การดูกฎ iptables ทั้งหมด


144

มีวิธีดูiptablesกฎในรายละเอียดอีกเล็กน้อยหรือไม่

ฉันเพิ่งเพิ่มมาสเคอเรดในช่วงของ IP:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart

ซึ่งได้ทำสิ่งที่ฉันต้องการ แต่เมื่อฉันใช้:

iptables -L

ฉันได้รับผลลัพธ์เดียวกันตามปกติ:

Chain INPUT (policy ACCEPT)
target    prot opt source        destination

Chain FORWARD (policy ACCEPT)
target    prot opt source        destination

Chain OUTPUT (policy ACCEPT)
target    prot opt source        destination

ฉันจะดูกฎรวมถึงกฎที่เพิ่มได้อย่างไร (ระบบคือ CentOS 6)

คำตอบ:


116

เมื่อใช้-L, --listตัวเลือกที่จะแสดงรายการกฎไฟร์วอลล์ปัจจุบันคุณยังจำเป็นต้องระบุตาราง Netfilter ที่เหมาะสม (หนึ่งfilter, nat, mangle, rawหรือsecurity) ดังนั้นถ้าคุณได้เพิ่มกฎที่natโต๊ะคุณควรระบุอย่างชัดเจนตารางนี้ใช้-t, --tableตัวเลือก:

iptables --table nat --list

หรือใช้แบบฟอร์มตัวเลือกสั้น ๆ :

iptables -t nat -L

หากคุณไม่ได้ระบุตารางเฉพาะfilterตารางจะถูกใช้เป็นค่าเริ่มต้น


เพื่อให้ได้ผลเร็วขึ้นก็จะมีประโยชน์ยังรวม-n, --numericตัวเลือกในการพิมพ์ที่อยู่ IP เป็นตัวเลขแทนชื่อโฮสต์จึงหลีกเลี่ยงการจำเป็นที่จะต้องรอการค้นหา DNS ย้อนกลับ

คุณจะได้รับข้อมูลมากขึ้นโดยรวม-v, --verboseตัวเลือก


113

iptablesควบคุมห้าตารางที่แตกต่างกัน: filter, nat, mangle, และraw securityในการโทรที่กำหนดiptablesจะแสดงหรือแก้ไขหนึ่งในตารางเหล่านี้เท่านั้นซึ่งระบุโดยอาร์กิวเมนต์เป็นตัวเลือก-t(การกำหนดค่าเริ่มต้นเป็นfilter) หากต้องการดูสถานะไฟร์วอลล์ที่สมบูรณ์คุณต้องโทรไปiptablesที่แต่ละตารางอย่างต่อเนื่อง

-vนอกจากนี้จะได้รับเป็นตัวแทนที่ถูกต้องของกฎที่คุณต้องผ่านตัวเลือก มิฉะนั้นเงื่อนไขที่สำคัญบางส่วนจะถูกตัดออกในการส่งออกเช่นอินเตอร์เฟซในกฎการกรอง (เช่นกฎว่า“ยอมรับทุกอย่าง” และกฎที่ระบุว่า“ยอมรับทุกอย่างบนอินเตอร์เฟซที่ย้อนกลับ” เท่านั้นที่สามารถโดดเด่นด้วย-v)

ดังนั้นเพื่อให้การนำเสนอที่สมบูรณ์ของกฎ netfilter คุณต้อง

iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security

หรือคุณสามารถเรียกiptables-saveโปรแกรมซึ่งแสดงกฎทั้งหมดในตารางทั้งหมดในรูปแบบที่สามารถแยกวิเคราะห์iptables-restoreได้ รูปแบบนี้สามารถอ่านได้อย่างสมเหตุสมผลโดยมนุษย์ (มันค่อนข้างคล้ายกับชุดการเรียกiptablesคำสั่งเพื่อสร้างตาราง)


56

iptables -Sไม่หลอกลวงสำหรับฉัน ดูเหมือนว่าจะแสดงรายการกฎทั้งหมดที่ใช้งานอยู่แม้ว่าจะปิดบริการอยู่ก็ตาม

จากหน้าคน:

-S, - รายการกฎ [โซ่] พิมพ์กฎทั้งหมดในห่วงโซ่ที่เลือก หากไม่ได้เลือกเชนใดเชนทั้งหมดจะถูกพิมพ์เช่น iptables-save เช่นเดียวกับคำสั่ง iptables อื่น ๆ มันใช้กับตารางที่ระบุ (ตัวกรองเป็นค่าเริ่มต้น)


นี่เป็นคำตอบที่ kwl จริง ๆ ฉันยังสังเกตเห็นว่า / sbin / บริการสถานะ iptables ให้ผลลัพธ์ที่คล้ายกัน
TheLovelySausage

6
+1 ไม่ 'ดูเหมือน' เกี่ยวกับมัน - จาก man page: "-S, พิมพ์กฎทั้งหมดใน chain ที่เลือกถ้าไม่มี chain ถูกเลือกเชนทั้งหมดจะถูกพิมพ์เหมือน iptables-save" นี่คือสิ่งที่ฉันต้องการ
Mike S

3
ฉันไม่พบสิ่งนี้เป็นกรณี iptables -Sไม่แสดงกฎของแนตทั้งหมดของฉันซึ่งฉันสามารถเห็นได้เมื่อฉันรันiptables -L -t nat
mulllhausen

1
@MikeS จากหน้า man คำสั่งทั้งสองทำงานเฉพาะในตารางที่ระบุกรองตามค่าเริ่มต้น "เช่นเดียวกับคำสั่ง iptables อื่น ๆ มันใช้กับตารางที่ระบุ (ตัวกรองเป็นค่าเริ่มต้น)" ถ้อยคำในเอกสารประกอบจะถูกคัดลอกเกือบเหมือนกันสำหรับ -S และ -L พวกเขาต่างกันเพียงในการจัดรูปแบบของผลลัพธ์ไม่ใช่กฎที่พิมพ์ นี่เป็นจริงอย่างน้อยใน Ubuntu 16.04 ซึ่งในระบบของฉันคือ iptables v1.6.0
สกอตต์

เห็นด้วยกับ @mulllhausen ที่นี่ ฉันต้องการ "sudo iptables - table nat - list" เพื่อแสดงกฎตาราง nat ของฉัน การตั้งค่าสถานะ "-S" ด้วยตัวเองไม่ได้แสดง
Robert Oschler

15

สิ่งที่ฉันทำคือการดำเนินการiptables-save > iptables_bckpนี้จะสำรองข้อมูลเลเยอร์ทั้งหมดแล้วแก้ไขไฟล์และเรียกคืน iptablesiptables-restore < iptables_bckp

# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp

คุณสามารถสำรองข้อมูลซ้ำได้ดังนั้นคุณสามารถแก้ไขได้โดยไม่ต้องเสีย iptables ที่ผ่านมา

นี่เป็นการฝึกฝนส่วนตัวฉันไม่ได้บอกว่านี่เป็นวิธีที่ดีที่สุด แต่สำหรับฉันก็ใช้งานได้ดี

ลองดู


นี่เป็นคำตอบที่เหมือนจริงเพียงคำตอบเดียวที่ฉันค้นพบในขณะนี้ที่ทิ้งทุกตารางไว้ด้วย
Chris Harrington

4

iptablesคำสั่งนอกจากนี้ยังต้องให้คุณระบุตารางมิฉะนั้นมันเริ่มต้นที่กรองตาราง ดังนั้นลอง:

iptables -t nat -L

1

คุณสามารถใช้ได้:

# lsmod | grep ip_tables
ip_tables              13193  4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter

เพื่อค้นหาตารางทั้งหมดและแสดงกฎเฉพาะในตาราง


1

หากมันจะช่วยให้คุณสามารถเขียนสคริปต์ทุบตีและวางไว้ในโฟลเดอร์ที่อ้างอิงโดยเส้นทางของคุณหรืออ้างอิงผ่านนามแฝงในไฟล์ ~ / .bashrc

AllRules.sh

#!/bin/bash

 echo "Filter table:"
 iptables -t filter -vL

 echo "Nat table:"
 iptables -t nat -vL

 echo "Mangle table:"
 iptables -t mangle -vL

 echo "Raw table:"
 iptables -t raw -vL

 echo "Security table:"
 iptables -t security -vL

 echo 
 echo "All rules in all tables printed"

อย่าลืมให้สิทธิ์สคริปต์ทุบตีใหม่แก่คุณด้วย chmod

หากการอนุญาตเป็นปัญหาคุณอาจต้องเพิ่ม sudo ต่อหน้าiptablesคำสั่งทั้งหมด


0
iptables -vnxL
iptables -vnxL -tnat

อาจเป็นไปได้เพิ่มเติมแม้ว่าสิ่งเหล่านี้จะไม่ค่อยได้ใช้มาก:

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