要清除 iptables 中的所有规则,我使用这个
#!/bin/bash
echo "clearing iptables ... "
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
到目前为止,此方法有效,因为 iptables 中不再有任何条目,可以使用以下方法检查
sudo iptables -L
或者
sudo iptables -S
但是,已转发到不同目标的流量仍被路由到该目标。
看起来,清除后的 iptables 仍然处于活动状态!
到目前为止,摆脱这些规则的唯一方法是重新启动系统,但这不太优雅。
在Debianiptables 似乎没有作为服务运行,因此启动或停止该服务不起作用。
如何彻底清除或重置 iptables,以使先前定义的规则停用?
答案1
刷新 iptables 规则不会影响已建立的连接(这些连接已通过 重定向)
DNAT
。这是相关的,因为 UDP 数据包的 conntrack 条目包含重定向信息,该信息在 iptables 规则之外使用。使用 检查现有的 conntrack 条目
conntrack -L
并使用命令监视 conntrack 事件conntrack -E
。使用该
conntrack -F
命令清除conntrack表项,新的UDP包将不再被重定向。要将 iptables 规则作为服务进行管理,请使用
netfilter-persistent
和iptables-persistent
包。最好使用
iptables-save
/iptables-restore
命令,而不是手动运行iptables
。它更安全、更原子化。要管理远程主机上的 iptables 规则,请使用该
iptables-apply
命令,如果尚未确认,则允许回滚规则集。
答案2
sudo ufw status verbose; sudo iptables -L;
也许 ufw 正在运行?尝试停止。
您能否详细介绍一下您的系统、网络以及哪些流量仍在路由?
1-2 个示例是可以的,包括初始防火墙规则。
编辑:
通过我的一些脚本检查.....还冲洗了链条。
sudo iptables -F INPUT
sudo iptables -F FORWARD
sudo iptables -F OUTPUT
答案3
清除 iptables 规则的脚本足以刷新所有规则并将默认策略设置为“接受”。这实际上禁用了防火墙,因为没有规则,一切都被允许。
我们从您的评论中知道您正在发送 UDP 数据包。您可能会觉得旧规则仍然有效一段时间,尤其是当有连续的 UDP 数据包流通过您的防火墙机器时。这主要是因为 UDP 没有办法关闭连接,因此防火墙不知道当前活动流何时结束。唯一的方法是使用空闲超时来刷新活动的“连接”,当没有看到更多数据包时。
您有两个选择:
- 等待一段时间再重试。这需要停止任何当前活动的“连接”。您可以在 中找到 UDP 超时
/proc/sys/net/netfilter/nf_conntrack_udp_timeout
。 - 使用
conntrack
工具手动删除现有的“连接”。
请注意,即使 UDP 是无连接协议,Linux 防火墙也会跟踪 TCP/UDP 的活动套接字。