【问题标题】:Iptables remove specific rules by commentiptables 通过注释删除特定规则
【发布时间】:2015-05-17 11:39:23
【问题描述】:

我需要删除一些具有相同评论的规则。

例如,我有带有注释 =“测试它”的规则,所以我可以像这样获取它们的列表:

sudo iptables -t nat -L | grep '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之后会有问题=/

【问题讨论】:

  • a) 注释是单行注释 b) 注释位于规则前一行是否安全?

标签: linux firewall iptables coreos


【解决方案1】:

从 iptables 中删除基于注释的规则的最佳方法是:

iptables-save | grep -v COMMENT | iptables-restore

它会清除所有带有匹配注释的规则。至于我,我就是用这种方法来添加规则集,以后需要完全删除。

如果您只需要触及 PREROUTING 链,请在创建规则时为您的评论添加一些前缀或后缀,例如 preroute_COMMENT,以在 COMMENT 标识的规则集中产生影响

【讨论】:

    【解决方案2】:

    另一种通过评论删除的方法:

    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
    

    【讨论】:

      【解决方案3】:

      您可以使用以下命令:

      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(应该足够好)的行,并在术语iptablesplus 前面加上-A 替换-D,因为-D 删除了一条规则。然后使用e 命令执行替换操作的结果。 e 命令是sed 的 GNU 扩展。


      注意:如果除了简单地执行命令之外还想打印命令,可以使用s/-A/iptables -D/pe

      【讨论】:

      • 内部规则,如下所示:tcp dpt:8555 /* test it */ to:127.0.0.1:8080
      • /* */ shell 脚本中不允许使用样式 cmets。您是如何定义 iptables.rules 在哪种语言中的含义的?
      • bash,像这样:sudo iptables -t nat -I PREROUTING --src 0/0 --dst my_ip -p tcp --dport 8555 -j DNAT --to-destination 127.0.0.1: 8080 -m 评论 --comment "测试它"
      • 还有...我怎样才能使用你的 grep 来删除规则?
      • -v 仅输出与模式不匹配的行。当然,您需要将输出重定向到一个临时文件,然后将其重命名为iptables.rules(或其他)。如果您更喜欢 sed,它可以是一个命令:sed -i '/PREROUTING.*--comment.* test it/d' iptables.rules。但是在使用 -i! 之前总是要测试一个命令
      猜你喜欢
      • 1970-01-01
      • 2012-04-29
      • 2014-01-30
      • 2011-05-11
      • 2016-01-09
      • 2014-01-11
      • 2015-07-07
      • 2012-01-04
      相关资源
      最近更新 更多