วิธีที่ดีที่สุดในการล้างกฎ iptables ทั้งหมด


83

ฉันมีตัวอย่างนี้:

# flush all chains
iptables -F
iptables -t nat -F
iptables -t mangle -F
# delete all chains
iptables -X

มีความเป็นไปได้ไหมว่ากฎบางอย่างที่ใช้ไม่ได้จะยังคงมีอยู่หลังจากเรียกใช้สิ่งนี้?

แนวคิดคือการกำหนดค่า iptables ใหม่ทั้งหมดซึ่งสามารถถูกแทนที่ได้อย่างง่ายดายด้วยชุดกฎใหม่ (พารามิเตอร์ของเส้นทาง / ifconfig ไม่เป็นไร)

คำตอบ:


107

เพื่อตอบคำถามของคุณอย่างชัดเจนไม่: จะไม่มีกฎ "เหลือ" หลังจากล้างทุกตาราง อย่างไรก็ตามเพื่อประโยชน์ในการเป็นอย่างละเอียดคุณอาจต้องการกำหนดนโยบายสำหรับการเชื่อมต่อภายในINPUTและFORWARDโซ่ACCEPT:

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X

ล้างกฎ ip6tables:

ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -F
ip6tables -X

... และนั่นควรทำ iptables -nvLควรสร้างผลลัพธ์ (หรือคล้ายกันมาก ) เอาท์พุท:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

9
คุณลืมเกี่ยวกับ 'raw': iptables -t raw -F iptables -t raw -X
kK-Storm

there would not be any "leftover" rules after flushing every tableOP ไม่ล้างทุกตาราง คุณไม่ นี่คือสิ่งที่ดูเหมือนว่าถ้าคุณต้องการที่จะตรวจสอบอย่างละเอียด iptables -t "$table" -Zและคุณอาจต้องการที่จะเพิ่ม โปรดทราบว่าวิธีนี้คุณกำลังเข้ารหัสรายการตารางและเครือข่ายของพวกเขา ดังนั้นฉันอย่างจริงจังจะพิจารณาแก้ปัญหา Save-เรียกคืน หรือคุณสามารถเอาiptablesออกได้
x-yuri

23

สิ่งนี้จะรีเซ็ตระบบ iptables ของคุณเป็นสถานะพื้นฐานอย่างสมบูรณ์:

iptables-save | awk '/^[*]/ { print $1 } 
                     /^:[A-Z]+ [^-]/ { print $1 " ACCEPT" ; }
                     /COMMIT/ { print $0; }' | iptables-restore

นโยบายทั้งหมดจะถูกรีเซ็ตเป็น ACCEPT รวมถึงการล้างทุกตารางในการใช้งานในปัจจุบัน โซ่ทั้งหมดนอกเหนือจากโซ่ภายในจะไม่มีอยู่อีกต่อไป


1
แฮ็คเรียบร้อย! ฉันจะไม่ขึ้นอยู่กับมันเนื่องจากเป็นไปได้เสมอที่การเปลี่ยนแปลงเล็กน้อยในรูปแบบบันทึก / กู้คืนอาจทำให้แตกได้ น่าจะเป็นสิ่งที่ดีที่สุดที่จะติดกับ API ที่iptablesIMO ให้บริการอย่างชัดเจน
Steven วันจันทร์

3
ฉันเปลี่ยนใจ: รูปแบบข้อมูลไม่น่าจะเปลี่ยนแปลงอีกต่อไปเนื่องจากมีการใช้อย่างกว้างขวาง +1
Steven Monday

2
+1, แฮ็คที่น่าสนใจ
Sam Halicke

สิ่งนี้จัดการเพื่อกำจัดห่วงโซ่ UFW ที่เหลืออยู่สิ่งที่คำตอบที่ยอมรับไม่ได้
l0b0

นั่นเป็นรายละเอียดเล็กน้อย แต่คุณอาจต้องการแทนที่รายการแรกprint $1ด้วยprint $0เพื่อให้สอดคล้องกัน :)
x-yuri

2

เมื่อใดก็ตามที่ฉันต้องการไฟร์วอลล์ที่ปิดใช้งานจะเป็นดังนี้:

  • iptables-save > iptables.bak
  • service iptables stop (ฉันอยู่บน fedora)

1

คุณสามารถยกเลิกการโหลดiptablesโมดูลจากเคอร์เนล:

modprobe -r iptable_raw iptable_mangle iptable_security iptable_nat iptable_filter

UPDน่าเสียดายที่ดีเกินกว่าที่จะเป็นจริงได้ ตราบใดที่มีกฎหรือห่วงโซ่ที่ผู้ใช้กำหนดในตารางจำนวนการอ้างอิงของโมดูลที่สอดคล้องกันคือ 1 และmodprobe -rล้มเหลว คุณอาจลบกฎและเชนที่ผู้ใช้กำหนดเช่น:

echo $'*raw\nCOMMIT\n*mangle\nCOMMIT\n*security\nCOMMIT\n*nat\nCOMMIT\n*filter\nCOMMIT' | iptables-restore

หรือ:

iptables-save | awk '/^[*]/ { print $1 "\nCOMMIT" }' | iptables-restore

นอกจากนี้คุณอาจต้องการยกเลิกการโหลดโมดูลด้วยวิธีนี้ (ไม่มีชื่อโมดูลฮาร์ดโค้ด):

lsmod | egrep ^iptable_ | awk '{print $1}' | xargs -rd\\n modprobe -r

ในด้านสว่างหลังจากสิ่งนี้iptables-saveให้ผลลัพธ์ที่ว่างเปล่าดี :)


นั่นอาจเป็นค้อนที่นี่ ขอบคุณ.
Konrad Gajewski

0

หนึ่งสามารถทำได้ใน 1 หรือ 2 คำสั่ง:

 $ sudo iptables-save > iptables.bak
 $ sudo iptables -F

ผลลัพธ์:

$ sudo iptables -nvL
Chain INPUT (policy ACCEPT 3138 packets, 5567K bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 3602 packets, 6547K bytes)
pkts bytes target     prot opt in     out     source               destination         

5
หากนโยบายเริ่มต้นถูกตั้งค่าเป็น DROP นี่เป็นวิธีที่รวดเร็วในการล็อคออกจากเซิร์ฟเวอร์ ดังนั้นไม่ใช่มันไม่ใช่กระบวนการคำสั่ง 1 หรือ 2 คุณต้องตั้งค่าเป็น ACCEPT ก่อนหากไม่ใช่ในปัจจุบัน
RyanH

0

ฉันต้องปิดกั้นการเชื่อมต่อทั้งหมดเมื่อเร็ว ๆ นี้สิ่งที่ฉันทำคือ

iptables-policy INPUT DROP
iptables-policy OUTPUT DROP
iptables-policy FORWARD DROP

สำหรับการบันทึกฉันขอแนะนำต่อไปนี้

อูบุนตู:

/etc/init.d/iptables save
/sbin/service iptables save

RedHat / CentOS:

/etc/init.d/iptables save
/sbin/iptables-save

นอกเหนือจากการสำรองข้อมูลกฎ ufw ปัจจุบันทั้งหมดที่ฉันเคยใช้สิ่งนี้ในอดีต

cp /lib/ufw/{user.rules,user6.rules} /<BACKUP LOCATION> 
cp /lib/ufw/{user.rules,user6.rules} ./

ฉันคิดว่านี่อาจเป็นประโยชน์สำหรับการอ้างอิงในอนาคต คิดว่าฉันจะแบ่งปัน


0

สำรองข้อมูลการกำหนดค่าไปยัง iptables_backup.conf และทำความสะอาดกฎทั้งหมด

iptables-save | tee iptables_backup.conf | grep -v '\-A' | iptables-restore

วิธีคืนค่าการกำหนดค่าก่อนหน้า:

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