ลดกฎไฟร์วอลล์โดยครึ่งหนึ่งกฎ iptables สำหรับ tcp และ udp


12

ฉันมีกฎ iptables จำนวนหนึ่งในไฟร์วอลล์ของฉันที่มีลักษณะดังนี้:

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

มีทางลัดสำหรับการมีกฎสองข้อ - กฎข้อหนึ่งสำหรับ tcp และอีกอันสำหรับ udp - สำหรับทุกที่อยู่? ฉันหมายถึงฉันสามารถทำสิ่งนี้:

iptables -A zone_lan_forward -p tcp,udp -d 1.2.3.0/24 -j ACCEPT

คำตอบ:


22

สร้างเชนใหม่ซึ่งจะยอมรับแพ็คเก็ต TCP และ UDP และข้ามไปยังเชนนั้นจากกฎ IP ที่ได้รับอนุญาตแต่ละพอร์ต:

iptables -N ACCEPT_TCP_UDP
iptables -A ACCEPT_TCP_UDP -p tcp -j ACCEPT
iptables -A ACCEPT_TCP_UDP -p udp -j ACCEPT

iptables -A zone_lan_forward -d 1.2.3.0/24 -j ACCEPT_TCP_UDP

สิ่งนี้จะเพิ่มโอเวอร์เฮดของสองบรรทัดเพิ่มเติม แต่แบ่งครึ่งของกฎ TCP / UDP

ฉันจะไม่ละทิ้ง-pข้อโต้แย้งเพราะคุณไม่เพียง แต่เปิดไฟร์วอลล์สำหรับ ICMP แต่ยังรวมถึงโปรโตคอลอื่น ๆ จากหน้า man ของ iptables เมื่อ-p:

โปรโตคอลที่ระบุสามารถเป็นหนึ่งใน tcp, udp, icmp หรือทั้งหมดหรืออาจเป็นค่าตัวเลขแทนหนึ่งในโปรโตคอลเหล่านี้หรือที่แตกต่างกัน อนุญาตให้ใช้ชื่อโปรโตคอลจาก / etc / protocol ได้

คุณอาจไม่ได้ฟังโพรโทคอลใด ๆ ยกเว้น TCP, UDP และ ICMP ในตอนนี้แต่ใครจะรู้ว่าอนาคตอาจมีอะไรบ้าง มันจะเป็นการปฏิบัติที่ไม่ดีที่จะเปิดไฟร์วอลล์ทิ้งไว้โดยไม่จำเป็น

คำเตือน: คำสั่ง iptables อยู่ด้านบนของหัวของฉัน; ฉันไม่สามารถเข้าใช้กล่องทดสอบ ATM ได้


นี่เป็นโซลูชันสุดหรูที่ไม่เปิดไฟร์วอลล์ไว้โดยไม่จำเป็น
Big McLargeHuge

4
แต่วิธีการสร้างโซ่ใหม่นี้จะล้มเหลวหากการกรองเสร็จสิ้นผ่านหมายเลขพอร์ตปลายทาง ใครสามารถแนะนำวิธีการเอาชนะปัญหาดังกล่าวข้างต้น
Amor

@Amor ในตัวอย่างนี้ถ้าคุณใช้-p allใน--dportกฎทั้งหมดในกลุ่มzone_lan_forwardที่อาจบรรลุสิ่งที่คุณกำลังมองหา ฉันแน่นอนว่าไม่มีวิธีอื่นที่จะเข้าสู่ chain นั้นด้วยโปรโตคอลที่ไม่ใช่ TCP / UDP เนื่องจากACCEPT_TCP_UDPchain เห็นได้ชัดว่านี่เป็นกลยุทธ์ที่มีความเสี่ยงหากมีหลายคนที่สามารถเข้าถึงแก้ไขกฎและมีคนเข้ามาและแก้ไขกฎของคุณโดยไม่เข้าใจความละเอียดนี้
ซามูเอลฮาร์เมอร์

อ๊ะ ไม่ได้สังเกตคำสั่งของโซ่ คุณจะต้องเปลี่ยนลำดับของโซ่ในตัวอย่างนี้ด้วยสำหรับสิ่งที่ฉันเพิ่งพูดว่าทำงานอย่างถูกต้อง ดังนั้นACCEPT_TCP_UDPกระโดดไปแล้วกระโดดไปzone_lan_forward ACCEPT
ซามูเอลฮาร์เมอร์

2

หากคุณไม่สนใจเกี่ยวกับทราฟฟิก ICMP (ซึ่งคุณสามารถบล็อกได้ทั่วโลกด้วยกฎต่อไป) คุณสามารถละเว้นการตั้งค่าสถานะ -p และมันจะครอบคลุมโปรโตคอลทั้งหมด


ฉันควรสนใจเกี่ยวกับปริมาณการใช้ ICMP หรือไม่ ฉันส่วนใหญ่เกี่ยวข้องกับการเข้าถึง HTTP
บิ๊ก McLargeHuge

ไม่ได้จริงๆ คุณสามารถบล็อก ICMP (ping) หากคุณต้องการ แต่เนื่องจากมันให้บริการทราฟฟิก HTTP อยู่ตลอดเวลาจึงมีประเด็นไม่มากนัก
นาธาน C

@NathanC ฉันคิดว่าคำแนะนำในการเปิดพอร์ตทั้งหมดเมื่อ OP ถามวิธีการแบ่งครึ่งกฎของเขาอาจนำไปสู่ปัญหาในตอนนี้หรือในอนาคต
Jed Daniels

@JedDaniels สวิตช์ -p ระบุโปรโตคอลและไม่ใช่พอร์ต คำตอบด้านล่างมีทางเลือกหากพวกเขาต้องการล็อคสิ่งอื่นใดนอกเหนือจาก tcp & udp
นาธาน C

@NathanC ใช่แล้วการลบ -p หมายถึง "เปิดโปรโตคอลทั้งหมดไม่ใช่แค่ tcp หรือ udp" ซึ่งไม่ประมาทหากไม่เป็นอันตราย
Jed Daniels
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.