如何避免在 nftables 中插入重复规则

如何避免在 nftables 中插入重复规则

在 nftables 中我有这个

table inet my_table {

    chain badips {

        ip saddr 185.165.190.17 counter packets 0 bytes 0 drop

    }
        type filter hook input priority filter; policy drop;
        # Block badips
        counter packets 0 bytes 0 jump badips
}

计划将一长串 IP 放入badips链中。如何只添加唯一的IP?有什么可以避免添加相同IP的吗?

现在我跑

nft add rule inet my_table badips "ip saddr <IP> counter packets 0 bytes 0 drop"

在nft规则中,我看到没有什么nft create rule不同的链。

答案1

不要为每个 ip 添加一条规则。只需创建一个规则,然后使用。例如:

table inet my_table {
        set badips_v4 {
                type ipv4_addr
        }

        set badips_v6 {
                type ipv6_addr
        }

        chain badips {
                type filter hook input priority filter; policy accept;
                counter ip saddr @badips_v4 drop
                counter ip6 saddr @badips_v6 drop
        }
}

有了这些规则,您可以通过将 IP 添加到适当的集合来阻止它:

nft add element inet my_table badips_v4 { 185.165.190.17 }

如果多次运行该语句,它不会将多个项目添加到set-- aset是唯一项目的集合,因此如果 中已存在项目set,则再次添加它是无操作的。

相关内容