ป้ายเลื่อน


WelCom To www.Kiss-Hack.blogspot.com สังคม IT สังคม Hacker

หมวดหมู่

วันจันทร์ที่ 16 ธันวาคม พ.ศ. 2556

TCP Wrapper คืออะไร?




  TCP Wrapper จัดว่าเป็นโปรแกรมที่ช่วยในด้านความปลอดภัยที่มีประโยชน์มาก สามารถ
ลดความเสี่ยงในการที่เครื่องของท่านจะถูกบุกรุกได้อย่างมีประสิทธิภาพ TCP-Wrapper มีหน้าที่
ตรวจสอบคำขอใช้บริการงานต่างๆ ที่เข้ามาในเครื่องของเรา และพิจารณาว่าจะให้บริการหรือไม่
ตามคำสั่งที่เราระบุไว้

TCP Wrapper คืออะไร?

  TCP Wrapper จะทำการตรวจสอบว่าผู้ใช้จากเครื่องอื่นๆ สามารถมาใช้บริการต่างๆ ของ
เครื่องเราหรือไม่ โดยจะทำงานภายใต้ Inetd (Internet Daemon)
การที่เครื่องเราให้บริการงานต่างๆ เราจะเรียกว่าเป็น Server ของบริการนั้นๆ เช่น FTP
Server การที่จะเป็น Server เครื่องของเราจะต้องมีโปรแกรม ซึ่งทำหน้าที่คอยฟัง (listen) คำขอ
ใช้บริการจากเครื่องลูกข่าย (Client) เมื่อมีคำขอมาแล้ว ก็จะเริ่มให้บริการจนสิ้นสุด จากนั้นก็จะวน
กลับไปอยู่ในโหมด listen ต่อไป

  โปรแกรมที่ทำหน้าที่เป็น Server (บางทีเรียกว่า daemon) ลักษณะการเขียนส่วนมากจะ
เขียนเป็นชื่อโปรโตคอลที่ให้บริการ แล้วตามด้วยตัว “d” (ย่อมาจาก daemon) เช่น โปรแกรมที่ทำ
หน้าที่ HTTP Server เราก็จะเรียกว่า httpd และโปรแกรมที่ทำหน้าที่ FTP Server เราก็จะ
เรียกว่า ftpd เป็นต้น

  Server จะทำงานได้ 2 โหมด คือโหมด Stand-alone และแบบผ่าน Inetd ในแบบ Standalone
โปรแกรมที่ทำหน้าที่เป็น Server นั้น จะถูกเรียกให้ทำงานทันทีและจะค้างอยู่ตลอด (อยู่ใน
listen mode ซึ่งสามารถดูได้โดยการใช้คำสั่ง ps ax หรือ ps –ef) ถึงยังไม่มีคำขอใช้บริการเข้ามา
ส่วนแบบ Inetd นั้น ตัว Inetd เองจะถูกเรียกให้ทำงานทันที และค้างอยู่ตลอด แต่ Daemon ที่ทำงานใต้ Inetd จะไม่ถูกเรียกให้ทำงาน จนกว่าจะมีคำขอใช้บริการ Inetd จะรับคำขอใช้บริการ
และดูว่าเป็นคำขอสำหรับ Server ตัวใด หลังจากนั้นก็จะทำการเรียกโปรแกรม Server นั้นให้
ทำงาน เมื่อทำงานเสร็จสิ้นแล้วก็จะปิดการทำงานไป เหลือแต่ Inetd โปรแกรมเดียว ที่ยังคงรับคำ
ขอต่อไป (ในแบบ listen mode)

   จะเห็นว่าในแบบ Stand-alone นั้น แต่ละ Server จะถูกเรียกให้ทำงานและค้างไว้ ซึ่งเป็น
การสิ้นเปลืองทรัพยากรของเครื่อง แต่หากมีคำขอใช้บริการก็สามารถทำงานได้ทันที แบบ Inetd
จะมีเพียง Inetd อันเดียวเท่านั้น ที่ถูกเรียกให้ทำงานค้างไว้ เป็นการประหยัดทรัพยากรของระบบ
แต่หากมีคำขอใช้บริการก็ต้องเสียเวลาในการเรียกใช้ Server แต่ละตัว แล้วก็ปิดไป และเปิดใหม่
เมื่อมีคำขอมาอีก

   แบบ Stand-alone จะเหมาะกับ Server ที่ให้บริการงานที่มีคำขอใช้บริการมาก ส่วน Inetd
ก็จะเหมาะกับบริการที่มีผู้ขอใช้ไม่มากนัก ตัวอย่างเช่น หากเครื่องของเราทำหน้าที่หลักเป็น Web
Server เราก็ควรให้ httpd ทำงานในแบบ Stand-alone ส่วน telnetd, ftpd มีผู้ใช้ไม่บ่อยนัก ก็ให้
อยู่ใต้ Inetd

  การที่เราจะให้ Server ใดทำงานภายใต้ Inetd เราจะต้องใส่ไว้ในไฟล์ /etc/inetd.conf
ตัวอย่างบรรทัดในไฟล์ /etc/inetd.conf สำหรับ FTP, TELNET, POP3 Server มีดังนี้

ftp        stream      tcp        nowait      root      /usr/sbin/tcpd         wu.ftpd  -l  -i  -a
telnet    stream      tcp        nowait      root     /usr/sbin/tcpd          in.telnetd
pop3     stream      tcp       nowait       root    /usr/sbin/in.pop3d    in.pop3d

   ในบรรทัดที่ 3 (pop3) นั้น จะเห็นว่าใน Field ที่ 6 และ 7 ต่างชี้ไปที่ /usr/sbin/in.pop3d
กรณีนี้ถ้ามีคำขอใช้บริการ pop3 inetd ก็จะทำการเรียกโปรแกรม /usr/sbin/in.pop3d นั่นเอง ส่วน
ในบรรทัดของ ftp และ telnet ใน Field ที่ 6 จะเป็น /usr/sbin/tcpd ซึ่งคือตัวโปรแกรม TCPWrapper
นั่นเอง กรณีนี้เวลามีผู้ขอใช้บริการ ftp หรือ telnet มายังเครื่องของเรา Inetd จะเรียก
โปรแกรม tcpd (TCP Wrapper) ก่อน ซึ่งจะทำการตรวจสอบว่าผู้ใช้มีสิทธิ์ที่จะใช้บริการของเรา
หรือไม่ ถ้ามีก็จะทำการเรียก /usr/sbin/wu.ftpd หรือ /usr/sbin/in.telnetd ต่อไป
ไฟล์ที่ TCP-Wrapper ใช้สำหรับเก็บเงื่อนไขสิทธิในการใช้บริการ มีอยู่ 2 ไฟล์ คือ /etc/
hosts.allow และ /etc/hosts.deny

• hosts.allow เป็นไฟล์ที่ใช้สำหรับแสดงรายละเอียดเงื่อนไขต่างๆ ที่ตั้งไว้ว่า อนุญาต
ให้ใคร (จาก IP หรือ host) เข้ามาทำงานกับเครื่องของเราได้บ้าง

• hosts.deny เป็นไฟล์ที่ใช้สำหรับแสดงรายละเอียดเงื่อนไขต่างๆ ที่ตั้งไว้ว่า ไม่
อนุญาตให้ใคร (จาก IP หรือ host) เข้ามาทำงานกับเครื่องของเราได้บ้าง
โดยมีรูปแบบการตั้งค่าดังนี้

                 <รายชื่อบริการ>: <เงื่อนไขในการให้บริการ>

รายชื่อบริการ คือชื่อของ application หรือ service ต่างๆ ของ Server นั้นๆ ที่เรา
กำหนดให้มันทำงานภายใต้ Inetd เช่น ftpd, fingerd เป็นต้น (ตรงกับใน Field แรก ของ
/etc/inetd.conf ) ถ้าเป็นคำว่า ALL หมายความว่า ทุกบริการที่มีปรากฏใน Inetd
เงื่อนไขในการให้บริการ อาจเป็นรายชื่อของโดเมนเนม เช่น utcc.ac.th, loxinfo.co.th,
nectec.or.th

หรือ IP Address เช่น 203.150.154.1, 164.115.115. เป็นต้น

  ในการกำหนดค่าต่างๆ ในไฟล์ hosts.allow และ hosts.deny จะใช้รูปแบบข้างต้น ในไฟล์
hosts.allow จะหมายถึงการอนุญาต ในไฟล์ hosts.deny จะหมายถึงการปฏิเสธ เราสามารถสร้าง
เงื่อนไขต่างๆ ได้หลายเงื่อนไขภายในไฟล์เดียวกัน แต่ต้องไม่ขัดแย้งกันทั้งในไฟล์เดียวกัน และ
ระหว่างไฟล์ hosts.allow กับ hosts.deny ด้วย (ความจริง เราใช้แค่ไฟล์ใดไฟล์หนึ่งก็เพียงพอ ถ้า
บริการของเรา ส่วนใหญ่ปิดเปิดให้กับบางคนเท่านั้น ก็ควรใช้ hosts.deny แต่ถ้าบริการของเรา
ส่วนใหญ่เปิดปิดสำหรับบางคนเท่านั้น ก็ควรใช้ hosts.allow) ตัวอย่างดังนี้
อนุญาตให้ใช้งานได้ทุกอย่างจากทุกเครื่อง

   ที่ไฟล์                      hosts.allow ALL : ALL

   อนุญาตให้ใช้งานได้ทุกอย่างจากทุกเครื่อง ยกเว้นจาก IP 202.28.8.5

    ที่ไฟล์                     hosts.allow ALL : ALL EXCEPT 202.28.8.5

อนุญาตให้ใช้งานได้ทุกอย่าง ยกเว้น ftp จากทุกเครื่อง ยกเว้นจาก domain 202.28.8

    ที่ไฟล์                     hosts.allow ALL EXCEPT in.ftpd : ALL EXCEPT 202.28.8.

ไม่อนุญาตให้ใช้งานทุกอย่าง จากเฉพาะ IP 202.28.8.15 กับ 202.28.9.6

    ที่ไฟล์                    hosts.deny ALL : 202.28.8.15, 202.28.9.6

ไม่อนุญาต ให้ใช้งานทุกอย่าง ยกเว้น finger จากทุกเครื่องบน domain nectec.or.th

    ที่ไฟล์                    hosts.deny ALL EXCEPT in.fingerd : .nectec.or.th

(โปรดสังเกตเครื่องหมายจุด หน้า nectec.or.th)
ไม่อนุญาตให้ใช้งานทุกอย่าง ยกเว้น ftp จากทุกเครื่องบน domain nectec.or.th และไม่
อนุญาตให้เครื่องทุกเครื่องเข้ามาในเครือข่าย ยกเว้นเครื่องภายใน domain utcc.ac.th

     ที่ไฟล์                  hosts.deny ALL EXCEPT wu.ftpd : .nectec.or.th
                               ALL : ALL EXCEPT .utcc.ac.th

โปรดสังเกตคำว่า wu.ftpd นำมาจาก Field ที่ 6 ของบรรทัดของ ftpd ใน /etc/inetd.conf
ในเครื่องของท่านอาจแตกต่างออกไป

สำหรับเครื่องที่ใช้ซอฟต์แวร์ Linux-SIS เวอร์ชัน 2.0 ขึ้นไปจะมีการติดตั้ง TCP Wrapper
มาให้เรียบร้อยแล้วโดยมีข้อความในไฟล์ทั้งสองดังนี้

          /etc/hosts.allow                               -ไม่มีข้อความ-

        /etc/hosts.deny in.telnetd:                 ALL EXCEPT 192.168.1.
                                                              in.ftpd: ALL EXCEPT 192.168.1.

หมายความว่า ไม่อนุญาตให้ทำการ telnet หรือจากเครื่องใดๆ ยกเว้นเครื่องที่มี IP Address
ขึ้นต้นด้วย 192.168.1 (เช่น 192.168.1.1, 192.168.1.2, ...)

ท่านสามารถเพิ่มเติมแก้ไขไฟล์เหล่านี้ได้ตามความต้องการของท่าน (โปรดระวัง ไม่ควร
อนุญาตให้ผู้ใช้ใดๆ สามารถทำการ telnet/ftp มายังเครื่องเราได้โดยไม่จำเป็นเป็นอันขาด)

ระบบ Unix สมัยใหม่ส่วนใหญ่ จะมีการติดตั้ง TCP-Wrapper มาให้เรียบร้อยแล้ว ท่าน
สามารถตรวจสอบโดยการค้นหาว่ามีไฟล์ชื่อ tcpd (ตามปกติจะอยู่ใน /usr/sbin) หรือไม่ ถ้ามีอยู่
แล้ว ท่านก็เพียงแก้ไขไฟล์ /etc/inetd.conf, /etc/hosts.allow, /etc/hosts.deny ให้เป็นตามต้องการ
หากพบว่ายังไม่มี ท่านสามารถดาวน์โหลดต้นฉบับของซอฟต์แวร์ TCP-Wrapper ได้ที่

ftp://ftp .win.tue.nl/pub/security/