語法格式
iptables [-t 表名] 管理選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]
注意事項
- 不指定表名時,默認使用
filter
表 - 不指定鏈名時,默認表示該表內所有鏈
- 除非設置規則鏈的缺省策略,否則需要指定匹配條件
設置規則內容
-A
:追加規則到指定鏈末尾-I
:在指定位置插入規則(默認插入到第 1 條)-R
:替換指定位置的規則-P
:設置默認策略(如ACCEPT
或DROP
)
示例:
iptables -A INPUT -p tcp -j ACCEPT
iptables -nL
插入規則:
iptables -I INPUT -p icmp -j ACCEPT
iptables -I INPUT 2 -p udp -j ACCEPT
設置默認策略:
iptables -P INPUT DROP
注意事項:
如果設置了 INPUT
鏈為 DROP
,但未寫允許 SSH 的規則,可能會斷開連接,建議使用 crontab
定時清空規則以防萬一:
crontab -l
*/1 * * * * bash /root/iptables/clear_iptables_rules.sh
# /root/iptables/clear_iptables_rules.sh
#!/bin/bash
/usr/sbin/iptables -t nat -F
/usr/sbin/iptables -t filter -F
/usr/sbin/iptables -P INPUT ACCEPT
列表查看規則
-n
:數字顯示 IP 和端口,避免 DNS 解析-v
:顯示詳細信息(流量統計)--line-numbers
:顯示規則的行號(方便刪除、替換)
清除規則
-F
:清空鏈中的規則(保留鏈)-X
:刪除用戶自定義的空鏈-Z
:將計數器歸零
自定義規則鏈
創建鏈:
iptables -N luobozi -t filter
添加規則:
iptables -A luobozi -p tcp --dport 2233 -j DROP
主鏈中調用自定義鏈:
iptables -A INPUT -p tcp -j luobozi
刪除自定義鏈(需先解除引用并清空):
iptables -D INPUT -j luobozi
iptables -F luobozi
iptables -X luobozi
示例:控制 ping 通信
只允許自己 ping 出去,別人不能 ping 進來:
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
允許多個端口通過(多端口匹配)
iptables -A INPUT -p tcp -m multiport --dport 21,23,25,80 -j ACCEPT
常見目標動作
ACCEPT
:允許REJECT
:拒絕并發送響應DROP
:丟棄數據包SNAT
:源地址轉換DNAT
:目標地址轉換LOG
:記錄日志MASQUERADE
:偽裝(多用于動態 IP)
規則持久化
保存規則:
iptables-save > rules.txt
恢復規則:
iptables-restore < rules.txt
啟動腳本示例(iptables_rules.sh
)
#!/bin/bash#清空規則鏈
/usr/sbin/iptables -X
/usr/sbin/iptables -t nat -F
/usr/sbin/iptables -t filter -F
/usr/sbin/iptables -P INPUT ACCEPT#定義可訪問的端口
iptables -A INPUT -p tcp -m multiport --dport 80,443,22,3306,21,20 -j ACCEPT
iptables -A INPUT -p udp -m multiport --sport 53 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT#創建自定義表,記錄日志規則
iptables -N luobozi_LOG
iptables -A luobozi_LOG -p tcp -j LOG --log-level 4 --log-prefix '##luobozi##'
iptables -A luobozi_LOG -p udp -j LOG --log-level 4 --log-prefix '##luobozi##'
iptables -A luobozi_LOG -p icmp -j LOG --log-level 4 --log-prefix '##luobozi##'#綁定日志規則
iptables -I INPUT -p tcp --dport 80 -j luobozi_LOG
iptables -I INPUT -p udp -j luobozi_LOG
iptables -I INPUT -p icmp -j luobozi_LOG#拒絕特定網段過來訪問
iptables -I INPUT -s 139.9.44.0/24 -j DROP
iptables -I INPUT -p tcp -m multiport --dport 80,443,22 -s 189.65.2.36 -j DROPiptables -P INPUT DROP
iptables -nL --line
模塊支持檢查與加載
查看模塊:
lsmod
加載 FTP NAT 模塊:
modprobe ip_nat_ftp