|
|
|||||||
กล่าวนำ
ในระบบปฏิบัติการลีนุกซ์บางระบบ เช่น Red Hat เวอร์ชั่นตั้งแต่ 7.0 ขึ้นไป เป็นต้น จะติดตั้งโปรแกรม xinetd ให้ทำงานแทนการใช้งานโปรแกรม inetd และ tcpd เดิม ซึ่งโปรแกรม inetd เป็นโปรแกรมที่ควบคุมโปรแกรมที่ให้บริการในระบบเครือข่ายบนระบบปฏิบัติการยูนิกซ์ เมื่อมีการเรียกใช้บริการที่โปรแกรม inetd ควบคุมอยู่ เช่น ftp, telnet เป็นต้น (ผ่านการควบคุมของไฟล์ /etc/inetd.conf) และถูกกำหนดให้เรียกใช้โปรแกรม tcpd เพื่อตรวจสอบความถูกต้องของไอพีที่เรียกใช้บริการว่า ถูกต้องตามกฎที่ตั้งไว้ในไฟล์ /etc/hosts.allow และ /etc/hosts.deny หรือไม่ โปรแกรม inetd จะเรียกใช้โปรแกรม tcpd เพื่อตรวจสอบความถูกต้องของไอพีที่เรียกใช้บริการ หากถูกต้องโปรแกรม inetd จึงจะเรียกใช้โปรแกรมระบบเครือข่ายดังกล่าวนั้นอีกทอดหนึ่ง แสดงการทำงานทั้งหมดได้ตามรูปที่ 1
![]() |
โปรแกรม xinetd มีคุณสมบัติที่น่าสนใจ ดังนี้
การตั้งค่าของโปรแกรม xinetd
ในที่นี้จะอ้างอิงถึงการตั้งค่าในระบบปฏิบัติการลีนุกซ์ Red Hat 7.2 เป็นหลัก ไฟล์หลักที่กำหนดการทำงานของโปรแกรม xinetd ประกอบด้วยสองส่วนคือ
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
only_from = localhost
}
includedir /etc/xinetd.d
กฎเกณฑ์ และค่าของระบบที่สำคัญ
ไฟล์ระบบของโปรแกรม xinetd กำหนดให้มีตัวกระทำ (Operator) ทั้งหมด 3 ตัว ดังตารางที่
1
| Operators | ความหมาย |
| = | กำหนดค่าของระบบใดๆ ให้เท่ากับค่าที่ระบุ |
| += | เพิ่มค่าที่ระบุ ให้กับค่าของระบบ |
| -= | ลบค่าที่ระบุ ให้กับค่าของระบบ |
ตารางที่ 1 Operator ของไฟล์ระบบในโปรแกรม xinetd
ค่าคุณสมบัติที่น่าสนใจต่อระบบในโปรแกรม xinetd แสดงได้ดังตารางที่ 2
| ค่าคุณสมบัติ | ความหมาย |
| flags | บ่งบอกคุณสมบัติเพิ่มเติมของแต่ละ service โดยค่า และความหมายของคุณสมบัตินี้ขึ้นกับเวอร์ชันของโปรแกรม
xinetd สามารถศึกษาได้จากคำสั่ง man xinetd.conf ตัวอย่างของค่าคุณสมบัติ
เช่น
|
| log_type | บ่งบอกถึงรูปแบบการเก็บล็อกของ service ต่างๆ ที่ภายใต้โปรแกรม xinetd
มีสองแบบคือ
|
| log_on_success | บ่งบอกรายละเอียดข้อมูลการใช้งานของแต่ละ service ที่จะถูกเก็บสู่ไฟล์ล็อก
หลังจากที่เริ่มทำงาน หรือภายหลังจากผู้ใช้ผ่านขั้นตอนการล็อกอิน
|
| log_on_failure | บ่งบอกรายละเอียดข้อมูลการใช้งานของแต่ละ service ที่จะถูกเก็บสู่ไฟล์ล็อก
เมื่อการร้องขอใช้ service ผิดไปจากกฎระเบียบที่กำหนดในค่าระบบของโปรแกรม
xineted
|
| no_access | บ่งบอกถึงเครื่องลูกข่ายที่ไม่ต้องการให้ใช้งาน service สามารถบ่งบอกได้ในรูปแบบของ Domain Name หรือไอพี คล้ายกับการกำหนดในไฟล์ hosts.deny ของ tcpwrapper |
| only_from | บ่งบอกถึงเครื่องลูกข่ายที่ต้องการให้ใช้งาน service สามารถบ่งบอกได้ในรูปแบบเดียวกับ no_access |
| port | บ่งบอกถึงหมายเลขพอร์ตที่ service เปิดให้บริการ |
| protocol | ชนิดของโพรโตคอลของ service |
| server | บ่งบอกถึงไฟล์โปรแกรมของ service |
| server_args | ค่าอาร์กิวเมนต์เพิ่มเติมของโปรแกรม ในคุณสมบัติ server |
| instances | บ่งบอกจำนวนโพรเซสสูงสุดของ service ที่ทำงานในช่วงเวลาเดียวกัน |
| disable |
บ่งบอกว่า service มีการเปิดให้บริการหรือไม่ ถ้าค่าเป็น yes หมายถึงงดให้บริการ และ no หมายถึงเปิดให้บริการ |
| cps | บ่งบอกถึงจำนวนครั้งของการเชื่อมต่อสูงสุด ต่อวินาที |
| access_times |
บ่งบอกช่วงเวลาที่เปิดให้บริการ service โดยรูปแบบของค่าคือ
ชั่วโมง:นาที(ที่เริ่มให้บริการ)-ชั่วโมง:นาที(ที่หยุดให้บริการ) |
|
rlimit_cpu |
บ่งบอกถึงจำนวนของ CPU seconds สูงสุดที่ให้กับแต่ละ service |
| rlimit_stack |
บ่งบอกถึงจำนวนของ stack สูงสุดที่ให้กับแต่ละ service |
| per_source | บ่งบอกจำนวนการเชื่อมต่อสูงสุดของการใช้งาน service จากเครื่องลูกข่ายเดียวกัน |
ตารางที่ 2 แสดงค่าคุณสมบัติที่น่าสนใจของระบบในโปรแกรม xinetd
ตัวอย่างของไฟล์ในไดเรกทอรี /etc/xinetd.d/ ที่กำหนดการให้บริการของโปรแกรม ftp
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l
instances = 4
access_times = 7:00-12:30 13:30-21:00
nice = 10
only_from = 192.168.1.0/24
}
| ค่าคุณสมบัติ | ความหมาย |
| instances = 4 | กำหนดให้ยอมรับการขอใช้บริการ ftp พร้อมกันได้สูงสุด 4 โปรเซส |
| access_times = 7:00-12:30 13:30-21:00 | การให้บริการ ftp จะเปิดให้ผู้ใช้สามารถใช้ได้เฉพาะเวลา 7:00-12:30 และ 13:30-21:00 |
| only_from = 192.168.1.0/24 | ยอมรับการใช้บริการผ่านไอพีที่มาจากผู้ใช้ในวง 192.168.1.0/24 |
| log_type = FILE /var/log/servicelog | กำหนดให้เก็บไฟล์ล็อกของการใช้งาน xinetd ที่ /var/log/servicelog แทน /var/log/message |
| log_on_success = HOST PID USERID DURATION EXIT | การกำหนดค่าที่ต้องการเก็บในไฟล็อก หลังจากการเข้าใช้ประสบความสำเร็จ |
| log_on_failure = HOST USERID RECORD | การกำหนดค่าที่ต้องการเก็บในไฟล์ล็อก หลังจากการเข้าใช้ที่ล้มเหลว |
คุณสมบัติเพิ่มเติมของ Xinetd กับการปรับเปลี่ยนการเชื่อมต่อ (Redirect Features)
การปรับเปลี่ยนการเชื่อมต่อของการขอใช้บริการผ่านโปรแกรม xinetd เป็นคุณสมบัติอย่างหนึ่งที่เป็นประโยชน์มาก ตัวอย่างของการใข้งานคุณสมบัตินี้แสดงได้ตามรูปที่ 2
![]() |
รูปที่ 2 แสดง การร้องขอ ssh บน xinetd ที่อาศัยคุณสมบัติ redirect
จากรูปที่ 2 เครื่องลูกข่ายร้องขอการใช้บริการโปรแกรม ssh จากเครื่อง foo1.com ซึ่งถูกกำหนดให้การให้บริการโปรแกรม ssh ถูกควบคุมโดยโปรแกรม xinetd และกำหนดให้การร้องขอการใช้บริการโปรแกรม ssh ปรับเปลี่ยนไปใช้บริการที่เครื่อง foo2.com แทน ดังนั้นเสมือนว่าเครื่องลูกข่ายได้ขอใช้บริการโปรแกรม ssh จากเครื่อง foo1.com แต่ที่จริงแล้วการให้บริการนี้จะถูกควบคุมจากเครื่อง foo2.com โดยที่การเชื่อมต่อระหว่างเครื่องลูกข่ายกับเครื่อง foo1.com ก็ยังคงอยู่ กระบวนการเช่นนี้คล้ายคลึงกับการทำงานของ Transparent Proxy ตัวอย่างไฟล์ /etc/xinetd.d/ssh ของเครื่อง foo1.com ที่รองรับการทำงานตามตัวอย่างในรูปที่ 2 คือ
service ssh
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/sshd
server_args = -i
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
redirect = foo2.com 22
disable = yes
}
คุณสมบัติเพิ่มเติมของ Xinetd กับการกำหนดการเชื่อมต่อ (Bind Feature)
โปรแกรม xinetd มีคุณสมบัติในการกำหนดการเชื่อมต่อของไอพีในแต่ละบริการได้ การทำงานนี้จะมีประโยชน์กับเครื่องที่มีอุปกรณ์เชื่อมต่อระบบเครือข่าย (Network Interface) อย่างน้อยสองตัวขึ้นไป ตัวอย่างเช่น หากในองค์กรหนึ่งต้องการเปิดให้บริการ FTP ภายใน และภายนอกองค์กร แนวทางการใช้โปรแกรม xinetd กับความต้องการนี้คือ การแยกการให้บริการ FTP ออกเป็นสองส่วน คือ ส่วนของภายใน และภายนอกองค์กร ผ่านการตั้งค่า bind (ต้องกำหนดค่า id เสมอเพื่อแยกแยะความแตกต่างของ FTP ทั้งสองส่วน) รูปที่ 3 แสดงรูปแบบการทำงานของโปรแกรม xinetd ที่ให้บริการ FTP server ซึ่งกำหนดให้ไอพีภายในเป็น 192.168.1.1 และไอพีภายนอกเป็น 212.198.253.142
![]() |
รูปที่ 3 แสดงการเปิดให้บริการ FTP ทั้งภายใน และภายนอกองค์กร ที่ใช้คุณสมบัติ bind
ตัวอย่างไฟล์ /etc/xinetd.d/ftp ที่รองรับการทำงานตามตัวอย่างในรูปที่ 3 คือ
service ftp
{
id = ftp-public
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l
instances = 4
nice = 10
only_from = 0.0.0.0/0
bind = 212.198.253.142
}
service ftp
{
id = ftp-internal
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l
only_from = 192.168.1.0/24
bind = 192.168.1.1
}
บทสรุป
ค่าคุณสมบัติที่ยกตัวอย่างในบทความนี้เป็นเพียงบางส่วนของค่าทั้งหมดที่ xinetd มีให้ ค่าคุณสมบัติแต่ละค่านั้นมีประโยชน์ต่อการปรับแต่งการให้บริการที่แตกต่างกัน ดังนั้นการเลือกใช้ค่าคุณสมบัติใดๆ นั้น ผู้ดูแลระบบควรศีกษาให้เข้าใจก่อนนำมาปรับใช้ตามความเหมาะสมในแต่ละระบบ โปรแกรม xinetd เวอร์ชั่นปัจจุบัน (2.3.9 ณ. วันที่ 23 กันยายน 2545) ได้รับการปรับปรุงให้ใช้ได้กับระบบยูนิกซ์เกือบทุกประเภท ดังนั้นเป็นแนวทางที่ดีและเหมาะสม หากระบบได้รับการปรับเปลี่ยนการให้บริการของบริการต่างๆ จากเดิมที่ผ่านโปรแกรม inetd และ tcpwrapper ไปเป็นโปรแกรม xinetd
แหล่งข้อมูล
http://www.linuxfocus.org/English/November2000/article175.shtml
http://www.xinetd.org/
http://www.redhat.com/docs/manuals/linux/RHL-7.3-Manual/ref-guide/ch-tcpwrappers.html
| Home
|| เอกสารเผยแพร่ || Unix & Linux
ThaiCERT Disclaimer | Copyright © 2001 ThaiCERT(NECTEC). All rights reserved. |