我需要删除一些具有相同注释的规则。
例如,我有带有注释="测试它"的规则,所以我可以像这样获得它们的列表:
sudo iptables -t nat -L | grep 'test it'
但是,如何删除所有带有注释"test it"的预路由规则?
上级:正如@hek2mgl所说,我可以做这样的事情:
sudo bash -c "iptables-save > iptables.backup"
sed -i '/PREROUTING.*--comment.* "test it"/d' iptables.backup
sudo iptables-restore < iptables.backup
sudo rm iptables.backup
但是在保存和还原之间可能会更改iptables,因此还原后会出现问题=/
您可以使用以下命令:
iptables-save | sed -r '/PREROUTING.*comment.*test it/s/-A/iptables -D/e'
iptables-save
将返回 iptables 命令,这些命令可以在重新启动或其他任何内容后执行以返回防火墙的当前状态。
这意味着它将包含如下行:
...
-A PREROUTING -p tcp -m tcp --dport 25 -j ACCEPT -m comment --comment "test it"
...
sed
命令搜索包含 PREROUTING.*comment.*test it
的行(应该足够好),并在术语前面加上术语 iptables
加上替换-A
-D
,因为-D
会删除规则。然后使用 e
命令执行替换操作的结果。e
命令是 sed
的 GNU 扩展。
注意:如果除了简单地执行命令之外还要打印命令,则可以使用 s/-A/iptables -D/pe
。
另一种通过评论删除的方法:
NOWRULES=$(iptables --line-number -nL INPUT | grep comment_here | awk '{print $1}' | tac)
for rul in $NOWRULES; do /sbin/iptables -D INPUT $rul; sleep 0.1; done
从 iptables 中删除基于注释的规则的最佳方法是:
iptables-save | grep -v COMMENT | iptables-restore
它使用匹配的注释清除所有规则。至于我,我使用此方法添加稍后需要完全删除的规则集。
如果您只需要触摸预路由链,请在注释中添加一些前缀或后缀,例如在创建规则时preroute_COMMENT
以在注释识别规则集中发挥作用