วิธีรักษาความปลอดภัยบริการเครือข่ายโดยใช้ 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> : ...]
ที่ไหน,
- บริการ คือรายการบริการที่คั่นด้วยเครื่องหมายจุลภาคซึ่งควรใช้กฎปัจจุบัน
ไคลเอนต์ แสดงรายการชื่อโฮสต์ที่คั่นด้วยเครื่องหมายจุลภาคหรือที่อยู่ IP ที่ได้รับผลกระทบจากกฎ ไวด์การ์ดต่อไปนี้ได้รับการยอมรับ:
- ทั้งหมด ตรงกับทุกอย่าง ใช้ทั้งกับลูกค้าและบริการ
- LOCAL จับคู่โฮสต์โดยไม่มีจุดใน FQDN เช่น localhost
- KNOWN ระบุสถานการณ์ที่ทราบชื่อโฮสต์ ที่อยู่โฮสต์ หรือผู้ใช้
- UNKNOWN อยู่ตรงข้ามกับ KNOWN
- PARANOID จะทำให้การเชื่อมต่อหลุดหากการค้นหา DNS แบบย้อนกลับ (อันดับแรกคือที่อยู่ IP เพื่อระบุชื่อโฮสต์ จากนั้นไปที่ชื่อโฮสต์เพื่อรับที่อยู่ IP) ส่งคืนที่อยู่ที่แตกต่างกันในแต่ละกรณี
คุณอาจต้องการทราบว่ากฎที่อนุญาตให้เข้าถึงบริการที่กำหนดใน /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 มีสตริงนั้น”
บทความนี้มีประโยชน์กับคุณหรือไม่? คุณมีคำถามหรือความคิดเห็นหรือไม่? โปรดส่งข้อความถึงเราโดยใช้แบบฟอร์มความคิดเห็นด้านล่าง