如何将输入规则幂等地添加到预配置的 nftables 中

如何将输入规则幂等地添加到预配置的 nftables 中

我有一个实用程序需要一个空闲的 TCP 端口。由于我不想更改现有的配置文件,因此我需要能够向 nftables 动态添加规则。

有一个名为filter的inet表,其中包含输入规则:

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        # existing rules
    }
}

添加规则很容易,例如:

nft add rule inet filter input tcp dport { 4848 } ct state new,established counter accept

这里的问题是如何以幂等的方式做到这一点?

  • 如果我运行相同的命令两次,两次完全相同的规则已生成。
  • nft delete rule inet filter input handle ##需要一个会变化的句柄号,并且使用它nft -n -a list ruleset | grep ...来解析句柄号感觉不对
  • 添加新链nft -f并每次刷新它也不起作用,因为如上所述这里

这是不是一条链可以提供比具有拒绝(或丢弃)规则的链更广泛的访问权限(以接受规则的形式)。

答案1

使用集合来管理会更容易:

table inet filter {
    set myport_tcp {
        type inet_service
        elements = { 4848 }
    }   

    chain input {
        type filter hook input priority 0; policy drop;
        # existing rules
        tcp dport @myport_tcp ct state new,established counter accept
        # more existing rules
    }
}

您可以通过以下方式清空集合:

nft flush set inet filter myport_tcp 

您可以通过以下方式将新端口添加到集合中:

nft add element inet filter myport_tcp elements = { 4949 }

或者通过以下方式将多个端口添加到集合中:

nft add element inet filter myport_tcp elements = { 14949, 9494 }

相关内容