删除到目前为止我创建的所有 INPUT DROP 规则

删除到目前为止我创建的所有 INPUT DROP 规则

我正在尝试创建一个脚本,该脚本将在某些条件下禁止某些 IP 地址,并且我需要一种方法来在每个午夜“清除”这些块,以便重新开始。我已经成功创建了阻塞部分。

我现在正在努力立即删除所有 INPUT DROP 规则,但以下命令返回“错误规则”错误。

iptables -D INPUT -j DROP

答案1

这是解决该问题的方法,因此该问题根本不存在。而不是在过滤器/输入中添加删除规则:

iptables -A INPUT -s 192.0.2.2 -j DROP
iptables -A INPUT -s 198.51.100.10 -i eth0 -j DROP
...

创建专用的用户链来帮助管理这些丢弃规则。执行此操作一次:

iptables -N onlydrops
iptables -A INPUT -j onlydrops

然后在需要的时候:

iptables -A onlydrops -s 192.0.2.2 -j DROP
iptables -A onlydrops -s 198.51.100.10 -i eth0 -j DROP
...

完成此操作后,可以通过一个命令刷新所有用户链内容,而不会影响 INPUT 中的其余规则集。在午夜,人们可以运行:

iptables -F onlydrops

像往常一样,顺序确实很重要。以上只是根据用例和现有规则进行定制的示例。

答案2

我对 iptables 的理解是,您不能通过一次调用“-D”命令来删除一组规则(例如所有 DROP 规则)。

您可以使用 Flush (-F) 删除链中的所有规则。
您可以使用删除 (-D) 从链中删除单个规则。

以下问题和答案表明,当您的规则条目相同时,这甚至是一个问题:
https://stackoverflow.com/questions/25055121/can-i-remove-multiple-matching-rules-with-the-iptables-delete-command

在我看来,iptabels 的手册页中提到

从所选链中删除一条或多条规则

具有误导性。我不知道可以从一次调用中删除多个规则的情况iptables -D。然而,也许在某些情况下我不知道这种情况是可能的。

更新:参见AB的评论,其中指出DNS可以通过“-D”参数删除多个规则。这是一个 DNS 名称解析为多个 IP 的情况。

答案3

如果您的 iptables 规则的定义中没有换行符,您应该能够执行以下操作:

iptables-save -t filter | grep -vxe '-A INPUT .*-j DROP' | iptables-restore

删除输出中以 开头-A INPUT和结尾的规则。-j DROPiptables-save


1 但我发现即使他们这样做也iptables-restore无法处理iptables-save输出,我认为这是一个错误。

相关内容