iptables删除规则需先用--line-numbers查看编号,再用-d加链名和序号删除;序号动态变化,删后需验证并保存配置以持久化。

直接用 iptables -D 加链名和序号就能删,关键是要先看清规则编号,再动手。
先查规则编号
不看编号就删,很容易删错。必须用带 --line-numbers 的命令列出带序号的规则:
-
sudo iptables -L INPUT --line-numbers(只看 INPUT 链) -
sudo iptables -L --line-numbers(查看所有链) - 加
-n可避免 DNS 解析延迟:sudo iptables -L INPUT -n --line-numbers
按序号删除规则
确认好要删的是哪条后,用 -D 指定链名和数字:
- 删 INPUT 链第 2 条:
sudo iptables -D INPUT 2 - 删 OUTPUT 链第 1 条:
sudo iptables -D OUTPUT 1 - 删 FORWARD 链第 5 条:
sudo iptables -D FORWARD 5
注意:序号是动态的,删掉上面一条,下面的序号会自动前移。比如删了第 2 条,原来的第 3 条就变成第 2 条。
删完要验证和保存
删完立刻再查一遍,确认是否生效:
sudo iptables -L INPUT -n --line-numbers
如果规则是临时生效的(没持久化),重启后会恢复。要永久生效,得保存配置:
- Debian/Ubuntu:
sudo iptables-save | sudo tee /etc/iptables/rules.v4 - RHEL/CentOS 7+:
sudo service iptables save或使用iptables-services - 通用方式(需安装 iptables-persistent):
sudo netfilter-persistent save
其他删除方式补充
除了按序号删,也可以按规则内容删,适合记不清序号但知道具体参数的情况:
- 删一条匹配源 IP 的规则:
sudo iptables -D INPUT -s 192.168.1.100 -j DROP - 删一条匹配端口的规则:
sudo iptables -D INPUT -p tcp --dport 8080 -j REJECT
这种方式要求规则内容完全一致,包括空格、大小写、参数顺序,稍有差异就会报错“Bad rule (does a matching rule exist in that chain?)”。所以初学者更推荐先查编号再删。











