iptables 通过注释删除特定规则
Iptables remove specific rules by comment
我需要删除一些具有相同评论的规则。
例如,我有评论 = "test it" 的规则,所以我可以像这样获得它们的列表:
sudo iptables -t nat -L | grep 'test it'
但是我怎样才能删除所有带有注释 'test it' 的 PREROUTING 规则?
更新:
正如@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
但是save和restore之间可能是iptables的变化,所以restore之后会有问题=/
您可以使用以下命令:
iptables-save | sed -r '/PREROUTING.*comment.*test it/s/-A/iptables -D/e'
iptables-save
将 return iptables 命令执行到 return 重启后防火墙的当前状态。
意味着它将包含如下行:
...
-A PREROUTING -p tcp -m tcp --dport 25 -j ACCEPT -m comment --comment "test it"
...
sed
命令搜索包含 PREROUTING.*comment.*test it
的行(应该足够好)并在前面添加术语 iptables
plus 将 -A
替换为 -D
因为-D
删除一条规则。然后使用 e
命令执行替换操作的结果。 e
命令是 sed
.
的 GNU 扩展
注意:如果除了简单地执行命令之外还想打印命令,可以使用s/-A/iptables -D/pe
.
另一种通过评论删除的方法:
NOWRULES=$(iptables --line-number -nL INPUT | grep comment_here | awk '{print }' | tac)
for rul in $NOWRULES; do /sbin/iptables -D INPUT $rul; sleep 0.1; done
从 iptables 中删除基于评论的规则的最佳方法是:
iptables-save | grep -v COMMENT | iptables-restore
它会清除所有具有匹配评论的规则。至于我,我用这个方法来添加规则集,以后需要完全删除。
如果您只需要触及 PREROUTING 链,请在您的评论中添加一些前缀或后缀,例如 preroute_COMMENT
在创建规则时在 COMMENT 标识的规则集内产生差异
我需要删除一些具有相同评论的规则。
例如,我有评论 = "test it" 的规则,所以我可以像这样获得它们的列表:
sudo iptables -t nat -L | grep 'test it'
但是我怎样才能删除所有带有注释 'test it' 的 PREROUTING 规则?
更新: 正如@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
但是save和restore之间可能是iptables的变化,所以restore之后会有问题=/
您可以使用以下命令:
iptables-save | sed -r '/PREROUTING.*comment.*test it/s/-A/iptables -D/e'
iptables-save
将 return iptables 命令执行到 return 重启后防火墙的当前状态。
意味着它将包含如下行:
...
-A PREROUTING -p tcp -m tcp --dport 25 -j ACCEPT -m comment --comment "test it"
...
sed
命令搜索包含 PREROUTING.*comment.*test it
的行(应该足够好)并在前面添加术语 iptables
plus 将 -A
替换为 -D
因为-D
删除一条规则。然后使用 e
命令执行替换操作的结果。 e
命令是 sed
.
注意:如果除了简单地执行命令之外还想打印命令,可以使用s/-A/iptables -D/pe
.
另一种通过评论删除的方法:
NOWRULES=$(iptables --line-number -nL INPUT | grep comment_here | awk '{print }' | tac)
for rul in $NOWRULES; do /sbin/iptables -D INPUT $rul; sleep 0.1; done
从 iptables 中删除基于评论的规则的最佳方法是:
iptables-save | grep -v COMMENT | iptables-restore
它会清除所有具有匹配评论的规则。至于我,我用这个方法来添加规则集,以后需要完全删除。
如果您只需要触及 PREROUTING 链,请在您的评论中添加一些前缀或后缀,例如 preroute_COMMENT
在创建规则时在 COMMENT 标识的规则集内产生差异