使用 nftables 对 ARP 请求的速率限制

Rate limit for ARP requests using nftables

我目前正在尝试使用 nftables 限制 ARP 流量。我正在使用以下规则:

table arp filter {
        chain input {
                limit rate 15/second accept # handle 3
        }

        chain output {
        }
}

然而,这些都没有效果。我做错了什么?我还尝试丢弃所有不符合第一条规则的数据包。

table arp filter {
        chain input {
                limit rate 10/second accept # handle 3
                drop # handle 4
        }

        chain output {
        }
}

编辑: 我已将以下行添加到链中:

type filter hook input priority 0; policy accept;

这给我留下了以下配置:

table arp filter {
        chain input {
                type filter hook input priority 0; policy accept;
                limit rate 10/second accept # handle 3
                drop # handle 4
        }

        chain output {
                type filter hook output priority 0; policy accept;
        }
}

这很好用,但为什么呢?

我相信这是因为在 nftables 链不会自动关联到 table,所以我们必须显式定义一个钩子来激活链。请注意,每个地址系列都有一组不同的挂钩:https://www.mankier.com/8/nft#Address_Families