要彻底清空iptables所有规则和自定义链,须先用iptables -F(含各表)清空规则,再用iptables -X(含各表)删除空的用户链;否则因链被引用而失败。

要彻底清空 Linux 系统中 iptables 的所有自定义链和内置链规则,必须分两步执行:先清空各链中的规则,再删除用户创建的空链。直接运行 iptables -F 只能清规则,不能删链;而 iptables -X 仅对空且未被引用的用户链生效,若跳过清空步骤会报错“Chain XXX is referenced”。
清空所有链中的规则
执行命令清空 filter 表全部默认链(INPUT、FORWARD、OUTPUT):
sudo iptables -F
这一步会保留链结构本身,但把每条规则都删掉。如果你之前切换过表(比如用过 -t nat),需显式指定表名清空:
sudo iptables -t nat -F → sudo iptables -t mangle -F → sudo iptables -t raw -F
【不执行这一步就直接运行 -X,后续删除链必然失败】
删除所有用户自定义链
方法一:逐个删除已知链名
sudo iptables -X MY_CUSTOM_CHAIN
方法二:批量删除所有满足条件的用户链(推荐)
sudo iptables -X
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
该命令不带参数时,会尝试删除当前表(默认 filter)中所有空的、非内置的链。注意:它不会碰 INPUT/FORWARD/OUTPUT 这类内建链,只处理你用 iptables -N 创建的链。
如果系统还启用了其他表(如 nat),且你在其中也建过自定义链,需切换表后重复执行:
sudo iptables -t nat -X
验证是否清空干净
第一步:检查 filter 表所有链是否无规则
sudo iptables -L -n
第二步:确认无用户链残留(输出中不应出现你自定义的链名)
sudo iptables -L -n | grep "Chain "
第三步:查看 nat 表等其他表是否有残留链
sudo iptables -t nat -L -n










