ค้นหาเว็บไซต์

วิธีรักษาความปลอดภัยบริการเครือข่ายโดยใช้ TCP Wrappers ใน Linux


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

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

ทำความเข้าใจกับ hosts.allow และ hosts.deny

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

ตามค่าเริ่มต้น ไฟล์เหล่านี้จะว่างเปล่า ถูกใส่เครื่องหมายความคิดเห็นทั้งหมด หรือไม่มีอยู่ ดังนั้นทุกอย่างจึงได้รับอนุญาตผ่านเลเยอร์ TCP wrappers และระบบของคุณต้องพึ่งพาไฟร์วอลล์เพื่อการป้องกันเต็มรูปแบบ เนื่องจากสิ่งนี้ไม่ต้องการ เนื่องจากเหตุผลที่เราระบุไว้ในบทนำ ตรวจสอบให้แน่ใจว่ามีทั้งสองไฟล์:

ls -l /etc/hosts.allow /etc/hosts.deny

ไวยากรณ์ของทั้งสองไฟล์เหมือนกัน:

<services> : <clients> [: <option1> : <option2> : ...]

ที่ไหน,

  1. บริการ คือรายการบริการที่คั่นด้วยเครื่องหมายจุลภาคซึ่งควรใช้กฎปัจจุบัน
  2. ไคลเอนต์ แสดงรายการชื่อโฮสต์ที่คั่นด้วยเครื่องหมายจุลภาคหรือที่อยู่ IP ที่ได้รับผลกระทบจากกฎ ไวด์การ์ดต่อไปนี้ได้รับการยอมรับ:

    1. ทั้งหมด ตรงกับทุกอย่าง ใช้ทั้งกับลูกค้าและบริการ
    2. LOCAL จับคู่โฮสต์โดยไม่มีจุดใน FQDN เช่น localhost
    3. KNOWN ระบุสถานการณ์ที่ทราบชื่อโฮสต์ ที่อยู่โฮสต์ หรือผู้ใช้
    4. UNKNOWN อยู่ตรงข้ามกับ KNOWN
    5. PARANOID จะทำให้การเชื่อมต่อหลุดหากการค้นหา DNS แบบย้อนกลับ (อันดับแรกคือที่อยู่ IP เพื่อระบุชื่อโฮสต์ จากนั้นไปที่ชื่อโฮสต์เพื่อรับที่อยู่ IP) ส่งคืนที่อยู่ที่แตกต่างกันในแต่ละกรณี
  3. สุดท้ายนี้ รายการทางเลือกของการดำเนินการที่คั่นด้วยเครื่องหมายทวิภาคจะระบุถึงสิ่งที่จะเกิดขึ้นเมื่อมีการเรียกใช้กฎที่กำหนด

คุณอาจต้องการทราบว่ากฎที่อนุญาตให้เข้าถึงบริการที่กำหนดใน /etc/hosts.allow จะมีความสำคัญเหนือกว่ากฎใน /etc/hosts.deny ห้าม มัน. นอกจากนี้ หากใช้กฎสองข้อกับบริการเดียวกัน ระบบจะพิจารณาเฉพาะกฎข้อแรกเท่านั้น

ขออภัย ไม่ใช่บริการเครือข่ายทั้งหมดที่รองรับการใช้ TCP wrappers หากต้องการตรวจสอบว่าบริการที่กำหนดรองรับหรือไม่ ให้ทำดังนี้

ldd /path/to/binary | grep libwrap

หากคำสั่งดังกล่าวส่งคืนเอาต์พุต ก็สามารถห่อ TCP ได้ ตัวอย่างนี้คือ sshd และ vsftpd ดังที่แสดงไว้ที่นี่:

วิธีใช้ TCP Wrappers เพื่อจำกัดการเข้าถึงบริการ

ขณะที่คุณแก้ไข /etc/hosts.allow และ /etc/hosts.deny ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มบรรทัดใหม่โดยกด Enter หลังบรรทัดสุดท้าย เส้นที่ไม่ว่างเปล่า

หากต้องการอนุญาตให้ SSH และ FTP เข้าถึงเฉพาะ 192.168.0.102 และ localhost เท่านั้น และปฏิเสธรายการอื่นๆ ทั้งหมด ให้เพิ่มสองบรรทัดนี้ใน /etc/hosts.deny : :

sshd,vsftpd : ALL
ALL : ALL

และบรรทัดต่อไปนี้ใน /etc/hosts.allow:

sshd,vsftpd : 192.168.0.102,LOCAL
#
hosts.deny	This file contains access rules which are used to
#		deny connections to network services that either use
#		the tcp_wrappers library or that have been
#		started through a tcp_wrappers-enabled xinetd.
#
#		The rules in this file can also be set up in
#		/etc/hosts.allow with a 'deny' option instead.
#
#		See 'man 5 hosts_options' and 'man 5 hosts_access'
#		for information on rule syntax.
#		See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : ALL
ALL : ALL
#
hosts.allow	This file contains access rules which are used to
#		allow or deny connections to network services that
#		either use the tcp_wrappers library or that have been
#		started through a tcp_wrappers-enabled xinetd.
#
#		See 'man 5 hosts_options' and 'man 5 hosts_access'
#		for information on rule syntax.
#		See 'man tcpd' for information on tcp_wrappers
#
sshd,vsftpd : 192.168.0.102,LOCAL

การเปลี่ยนแปลงเหล่านี้เกิดขึ้นทันทีโดยไม่จำเป็นต้องรีสตาร์ท

ในภาพต่อไปนี้ คุณสามารถเห็นผลของการลบคำว่า LOCAL ออกจากบรรทัดสุดท้าย: เซิร์ฟเวอร์ FTP จะไม่สามารถใช้งานได้สำหรับ localhost หลังจากที่เราเพิ่มไวด์การ์ดกลับ บริการจะสามารถใช้งานได้อีกครั้ง

หากต้องการอนุญาตบริการทั้งหมดไปยังโฮสต์ที่ชื่อมี example.com ให้เพิ่มบรรทัดนี้ใน hosts.allow:

ALL : .example.com

และหากต้องการปฏิเสธการเข้าถึง vsftpd ไปยังเครื่องบน 10.0.1.0/24 ให้เพิ่มบรรทัดนี้ใน hosts.deny:

vsftpd : 10.0.1.

ในสองตัวอย่างสุดท้าย ให้สังเกต จุด ที่จุดเริ่มต้นและจุดสิ้นสุดของรายชื่อลูกค้า ใช้เพื่อระบุ “โฮสต์ทั้งหมดและ/หรือไคลเอนต์ที่ชื่อหรือ IP มีสตริงนั้น”

บทความนี้มีประโยชน์กับคุณหรือไม่? คุณมีคำถามหรือความคิดเห็นหรือไม่? โปรดส่งข้อความถึงเราโดยใช้แบบฟอร์มความคิดเห็นด้านล่าง