ทำให้ iptables ง่ายต่อการบำรุงรักษา


14

เครือข่ายของฉันถูกล็อคอย่างสมบูรณ์ยกเว้นบางไซต์ที่ได้รับอนุญาต ทั้งหมดนี้ทำผ่าน iptables ซึ่งมีลักษณะดังนี้:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...

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

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT

ฉันเชื่อว่ามันเป็นไปได้ตั้งแต่man iptablesพูดว่า:

ที่อยู่อาจเป็นชื่อเครือข่ายชื่อโฮสต์ (โปรดทราบว่าการระบุชื่อใด ๆ ที่จะแก้ไขด้วยแบบสอบถามระยะไกลเช่น DNS เป็นแนวคิดที่ไม่ดีจริงๆ) ที่อยู่ IP ของเครือข่าย (พร้อม / หน้ากาก) หรือที่อยู่ IP ธรรมดา

แต่สิ่งที่ฉันเป็นห่วงคือส่วนที่ระบุว่า "การระบุชื่อที่จะแก้ไขด้วย ... DNS เป็นความคิดที่ไม่ดีจริงๆ" ทำไมนี่เป็นความคิดที่ไม่ดี มันช้าลงทุกอย่างหรือเปล่า

หากฉันไม่ควรใช้ชื่อโฮสต์ในกฎ iptables ฉันควรทำอย่างไรเพื่อลดความซับซ้อนของไฟร์วอลล์


คุณจะได้รับคำตอบที่ดีกว่าใน security.stackexchange.com
Jim B

คุณอาจถูกต้องว่าคำถามนี้อยู่ในเว็บไซต์นั้น แต่ถ้าคุณมีปัญหากับคำตอบที่ยอมรับโปรดอธิบายว่าทำไม
Big McLargeHuge

หากคุณต้องการทราบเกี่ยวกับการล็อคเครือข่ายของคุณและวิธีการดังกล่าวให้ถามเกี่ยวกับความปลอดภัยหากคุณต้องการใช้ iptables (ตรงข้ามกับการใช้ IPtables) นี่คือสถานที่
Jim B

คำตอบ:


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

หากจุดประสงค์ของคุณคือบล็อกการเข้าถึง HTTP คุณจะดีกว่าการตั้งค่าซอฟต์แวร์ที่ออกแบบมาเพื่อกรองในระดับนั้น (เช่น squid + squidquard)


1) ฉันเห็นว่านี่เป็นปัญหาได้อย่างไร - google.com สามารถแก้ไขเป็น 1.2.3.4 วันนี้ แต่พรุ่งนี้ที่อยู่ไม่ถูกต้อง เพียงแค่รีสตาร์ทไฟร์วอลล์ดูแลสิ่งนี้หรือไม่ 2) มันยังคงเป็นปัญหาด้านความปลอดภัยหรือไม่หากรู้จักเซิร์ฟเวอร์ DNS - เช่น DNS หรือ OpenDNS ของ Google
Big McLargeHuge

1
ฉันทำเครื่องหมายคำตอบนี้เป็นคำตอบเพราะมันอธิบายว่าทำไมฉันไม่ควรใช้ชื่อโฮสต์ในกฎ iptables และทำให้ฉันมีวิธีดำเนินการเพื่อทำให้ไฟร์วอลล์ของฉันง่ายขึ้น
บิ๊ก McLargeHuge

ฉันต้องการเพิ่มการสนับสนุนของฉันสำหรับ Squid ฉันใช้ Squid กับออฟฟิศของฉันและเมื่อตั้งค่าแล้วมันง่ายมากที่จะดูแลโฮสต์ที่อนุญาตพิเศษ (แม้ว่าฉันจะใช้มันในบัญชีดำ) ดูเหมือนว่าคุณมีงานที่ยิ่งใหญ่ในมือของคุณ ฉันไม่รู้ด้วยซ้ำว่าจะเริ่มต้นรายการที่อนุญาตพิเศษให้กับ Google ได้อย่างไร www.google.com แก้ไขได้ถึง 5 IP เพียงอย่างเดียวซึ่งจะไม่พูดอะไรเลยสำหรับ ssl.gstatic.com และโฮสต์อื่น ๆ ทั้งหมดที่เกี่ยวข้องกับการตรวจสอบความถูกต้อง G + ฯลฯ ซึ่งอาจแก้ไขได้กับหลาย ๆ IP
s.co.tt

Monumental เป็นวิธีที่ดีที่จะใส่มัน แต่ฉันแค่ใช้ Google เป็นตัวอย่าง โครงร่างพื้นฐานของ firwall ของฉันมีลักษณะดังนี้: หากปลายทางของแพ็กเก็ตนั้นอยู่ในรายการที่อนุญาตให้ยอมรับได้ มิฉะนั้นส่งผ่านพร็อกซีเซิร์ฟเวอร์
Big McLargeHuge

นอกจากนี้ยังมีปัญหาของระบบที่ใช้ DNS สำหรับการทำโหลดบาลานซ์ คุณอาจไม่ได้ผลลัพธ์เดียวกันหากค้นหาโดเมนดังกล่าวสองครั้งติดต่อกันดังนั้นการค้นหาครั้งเดียวจะไม่ทำให้รายการที่อยู่ IP ครบถ้วนสมบูรณ์ซึ่งโดเมนอาจแก้ไขได้
cdhowie

10

หากคุณใช้ชื่อโฮสต์ในไฟร์วอลล์ตอนนี้ไฟร์วอลล์ของคุณขึ้นอยู่กับ DNS วิธีนี้จะเปิดไฟร์วอลล์เพื่อแก้ไขปัญหาต่าง ๆ :

  • การค้นหา DNS ภายใต้ปริมาณสูงอาจทำให้เกิดความล่าช้า
  • การเปลี่ยนแปลง DNS จะไม่เผยแพร่ทันที ดังนั้นไฟร์วอลล์ของคุณอาจใช้ IP ที่แคชไว้
  • DNS สามารถถูกปลอมแปลงถูกแย่งชิงถูกแฮ็ก
  • DNS สามารถล้มเหลวได้ - หมายความว่าไฟร์วอลล์ของคุณล้มเหลว
  • กฎไฟร์วอลล์ของคุณถูกควบคุมโดยบุคคลที่สาม

หากคุณใช้ชื่อโฮสต์และคุณไม่ได้ควบคุม DNS ผู้อื่นจะควบคุมกฎ IPtables ของคุณ ข้อผิดพลาดข้อผิดพลาดหรือปัญหาด้านความปลอดภัยในตอนท้ายของพวกเขากลายเป็นปัญหาสำหรับคุณ

ครั้งเดียวที่ฉันเห็นชื่อโฮสต์ที่ใช้ดีสำหรับการดำเนินการภายใน ฉันทำงานในสำนักงานที่ได้รับมอบหมาย IP และชื่อโฮสต์ผ่าน DHCP ไฟร์วอลล์ใช้ชื่อโฮสต์เพื่อวางสิ่งกีดขวางระหว่างกลุ่มต่างๆ ตั้งแต่นี้ถูกควบคุมภายในทั้งหมดมันทำงานได้ดี


2
นี่เป็นคำตอบที่ดี แต่ไม่มีส่วนที่จะช่วยให้ไฟร์วอลล์ง่ายขึ้น
บิ๊ก McLargeHuge

3

คุณสามารถใช้ wrapper รอบ iptables เช่น shorewall เพื่อทำให้กฎของคุณง่ายขึ้น


นี่เป็นความคิดที่ดี แต่คุณไม่ได้บอกฉันว่าทำไมฉันไม่ควรใช้ชื่อโฮสต์ในกฎ iptables
บิ๊ก McLargeHuge

ฉันไม่รู้มากเกี่ยวกับชอร์วอลล์ แต่ฉันรู้สึกว่า davidkennedy85 ยังคงต้องรักษารายการที่อยู่ IP ทุกบริการที่เขาต้องการอนุญาตภายในชอร์วอลล์กำหนดค่า มันอาจทำให้การจัดการ netfilter ง่ายขึ้นเล็กน้อย แต่จะไม่แก้ปัญหาหลักของเขาซึ่งเป็นรายการ IP ที่ยิ่งใหญ่
s.co.tt

2

อย่างที่คนอื่น ๆ บอกไปแล้วว่าคุณไม่ควรใช้ชื่อ DNS ที่แก้ไขได้ในกฎ iptables พวกเขาไม่ถูกต้องควบคุมโดยบุคคลที่สามและโดยทั่วไปจะเป็นสิ่งที่ไม่ดี (tm) ฉันยังเพิ่มว่า DNS ของคุณอาจล้มเหลวหรือไม่สามารถเข้าถึงได้ในขณะที่บริการ iptables เริ่มต้นขึ้น ในกรณีนี้กฎจะไม่ถูกเพิ่มเลยและปัญหาประเภทใหม่อาจเกิดขึ้น (เช่นการสูญเสียการเข้าถึง ssh หลังจากรีสตาร์ท)

สิ่งที่คุณสามารถทำได้คือ:

  1. ใช้กลุ่มที่กำหนดเองเพื่อแยกกฎอย่างมีเหตุผล
  2. ใช้ipsets เพื่อให้มีการจัดกลุ่มที่อยู่และแยกจากกฎ
  3. เพิ่มความคิดเห็นให้กับกฎ

นอกจากนี้ยังไม่มีใครพูดถึงสิ่งที่ไม่ดีเกี่ยวกับชื่อโฮสต์ที่ไม่ได้รับการแก้ไขโดย DNS (เช่นมีการระบุไว้ในhostsคุณสามารถใช้พวกเขาหากคุณต้องการจริงๆ


ใช่ipsetคำตอบคือ ด้วยสคริปต์ที่รันจาก crontab เพื่ออัพเดต ipset
mivk

2

ฉันกำหนดชื่อโฮสต์ให้กับ ip ด้วยตนเองใน/ etc / hostsจากนั้นใช้ใน iptables

ด้วยวิธีนี้คุณ

  1. อย่าถ่ายโอนกฎไฟร์วอลล์ของคุณไปยังหน่วยงานภายนอก
  2. มี iptables ที่บำรุงรักษาได้ง่าย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.