มีลิงค์ไปยังเอกสารทางการและเอกสารแนะนำบนเว็บไซต์ Netfilter
นี้ไม่ได้เป็นเรื่องใหม่ที่มีทรัพยากรที่ไร้ขีด จำกัด
คำสั่งพื้นฐานส่วนใหญ่จะใช้งานง่ายเป็นธรรมได้อย่างง่ายดายและสามารถอ้างอิงถึงmanpage
netfilter ซึ่งเป็นเทคโนโลยีระดับเคอร์เนลที่เปิดใช้งานการกรองแพ็คเก็ตค่อนข้างสูง มีตารางเพิ่มเติมที่สามารถรวมแพ็คเก็ตแปลแพ็คเก็ตและอื่น ๆ ที่มีผลต่อการกำหนดเส้นทาง iptables
ยูทิลิตี้เป็นเครื่องมือ userland สำหรับการโต้ตอบกับ netfilter หากคุณต้องการเรียนรู้เกี่ยวกับฟังก์ชั่นขั้นสูงฉันแนะนำให้คุณอ้างอิงเอกสารดังกล่าวข้างต้น สำหรับข้อมูลเบื้องต้นเกี่ยวกับฟังก์ชั่นพื้นฐานโปรดอ่านเพิ่มเติม
หากต้องการแสดงกฎที่มีอยู่ทั้งหมด:
iptables -L -n
-n
ป้องกัน iptables จากการแก้ไข ips ซึ่งให้ผลลัพธ์ที่เร็วกว่า
ตารางเริ่มต้นคือfilter
ตารางซึ่งเป็นสิ่งที่ใช้เพื่อนำกฎไฟร์วอลล์พื้นฐานไปใช้กับสามเครือข่าย สามโซ่ค่าเริ่มต้นในfilter
ตารางINPUT
, และOUTPUT
FORWARD
โซ่ส่วนใหญ่จะอธิบายตนเอง เชน INPUT ส่งผลกระทบต่อแพ็กเก็ตที่เข้ามาเชน chain OUTPUT ส่งผลกระทบต่อแพ็กเก็ตที่สร้างขึ้นในเครื่องและในที่สุดก็ส่งต่อสำหรับแพ็กเก็ตใด ๆ
ในบรรดาเป้าหมายที่คุณระบุคุณสามารถDROP
แพ็คเก็ตซึ่งหมายถึงเพียงเพิกเฉยและไม่ตอบสนอง คุณสามารถREJECT
แพ็คเก็ตซึ่งการตอบสนอง icmp จะถูกส่งไปยังแหล่งที่มาของการปฏิเสธ ในที่สุดคุณก็สามารถทำได้ACCEPT
ซึ่งช่วยให้แพ็คเก็ตเพื่อดำเนินการต่อเส้นทาง
บ่อยครั้งที่มีไฟร์วอลล์หันหน้าไปทางภายนอกตัวเลือกเริ่มต้นจะDROP
ตรงข้ามกับREJECT
ซึ่งจะช่วยลดการปล่อยให้มองเห็นได้ของเครือข่ายของคุณบนอินเทอร์เน็ต ตัวอย่างเช่น IP ที่อื่นจะ จำกัด DROP
ให้บริการไปยังโฮสต์ที่เฉพาะเจาะจงจะมีการแสดงผลน้อยลงด้วย
หมายเหตุ-A
หมายถึงผนวกท้ายของห่วงโซ่ -I
หากคุณต้องการที่จะแทรกไปด้านบนคุณสามารถใช้ กฎทั้งหมดจะถูกประมวลผลจากบนลงล่าง -D
สำหรับการลบ
ไปDROP
ยังแพ็กเก็ตที่เข้ามาจาก192.168.235.235
:
iptables -A INPUT -s 192.168.235.235 -j DROP
สิ่งนี้จะข้ามไปยังDROP
เป้าหมายสำหรับโปรโตคอลทั้งหมดที่มาจาก IP นั้น
ที่จะยอมรับ:
iptables -A INPUT -s 192.168.235.235 -j ACCEPT
ในการป้องกันการเข้าถึง IP นั้นจากเซิร์ฟเวอร์หรือเครือข่ายท้องถิ่นของคุณ:
iptables -A OUTPUT -d 192.168.235.235 -j DROP
คุณสามารถระบุ-p
โปรโตคอล-s
แหล่งที่มาของแพ็คเก็ต-d
ปลายทางสำหรับแพ็กเก็ตพอร์ตปลายทางพอร์ต--dport
ต้นทาง--sport
และแฟล็กอื่น ๆ อีกมากมายที่จะมีผลต่อวิธีที่แพ็กเก็ตได้รับการปฏิบัติตามกฎ
หากINPUT
นโยบายเริ่มต้นของคุณคือDROP
และคุณต้องการให้ทุกคนที่ 192.168.123.0/24
เครือข่ายย่อยเข้าถึง SSH บนเซิร์ฟเวอร์ของคุณนี่คือตัวอย่าง:
iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT
ถูกต้องแล้วคุณสามารถใช้สัญกรณ์ CIDR ได้เช่นกัน!
โดยทั่วไปแล้วนโยบายเริ่มต้นที่ดีที่สุดDROP
สำหรับโซ่ทั้งหมด ห่วงโซ่ทุกคนมีนโยบายเริ่มต้นซึ่งระบุโดย-P
ธง แม้ว่าคุณจะมีการตั้งค่านโยบายเป็นค่าเริ่มต้นDROP
แต่ก็ยังแนะนำให้มีรายการสุดท้ายในเครือเพื่อให้เป็นDROP
เช่นกัน
ตัวอย่างเช่นหากต้องการเปลี่ยนนโยบายเป็นDROP
สำหรับเครือข่าย INPUT, FORWARD และ OUTPUT:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
ระวังหากคุณระบุนโยบายเริ่มต้นของ DROP สำหรับ INPUT ในระบบระยะไกลโดยไม่อนุญาตให้คุณเข้าถึง SSH ก่อนคุณสามารถป้องกันตัวคุณเองจากการเข้าถึงระบบ หากบนระบบรีโมตคุณสามารถระบุ crontab ชั่วคราวเพื่อล้างกฎทั้งหมดทุก 5 นาทีว่าล้มเหลว
หากต้องการลบกฎทั้งหมดและอนุญาตการรับส่งข้อมูลทั้งหมด:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F
หมายเหตุ-X
เอาโซ่ที่สร้างขึ้นทั้งหมด -F
วูบวาบกฎทั้งหมด
มีเครื่องมือเนทีฟเพื่อบันทึกและกู้คืนกฎ โดยเฉพาะอย่างยิ่งและiptables-save
iptables-restore
ดิสทริบิวชัน Linux ส่วนใหญ่มีsave
และrestore
ฟังก์ชั่นภายในไฟล์ init iptables ที่มาพร้อมกับระบบ
มีแนวทางปฏิบัติที่ดีที่สุดสำหรับไฟร์วอลล์อื่น ๆ เช่นการทิ้งแพ็กเก็ตที่ผิดรูปแบบและทราฟฟิกที่ไม่พึงประสงค์ประเภทอื่น นี่เป็นข้อดีอย่างหนึ่งของการใช้ยูทิลิตีส่วนหน้าเช่นShorewallเนื่องจากจะใช้งานนโยบายเหล่านี้หลายอย่างเป็นค่าเริ่มต้น อย่างไรก็ตามฉันเห็นด้วยกับวิธีการของคุณและชอบที่จะรักษากฎของตัวเองโดยตรงเช่นกันและแนวทางปฏิบัติที่ดีที่สุดแบบเดียวกันนี้สามารถนำไปใช้ได้โดยไม่ต้องมีส่วนหน้า