Nftables 无法按预期使用 meter 进行阻止

Nftables 无法按预期使用 meter 进行阻止

目标:计算源 IP 和目标端口速率大于每秒 200 个数据包的多余数据包,例如:

1 秒到 2 秒:IP 1.1.1.1 到 MyServer:80
[这在第 1 秒发生了 201 次]

table netdev filter {
    set whitelist {
        type ipv4_addr
        elements = { 186.248.79.100 }
    }

    set blocklist {
        type ipv4_addr
        size 65535
        flags dynamic,timeout
        timeout 30s
    }

    chain ingress {
        type filter hook ingress device "eth0" priority -450; policy accept;
        ip saddr @whitelist accept
        ip daddr 10.0.0.192 jump input
        ip daddr != 10.0.0.192 jump forward
    }

    chain http {
        ip saddr 191.185.17.156 counter
        meter http size 65535 { ip saddr . tcp dport limit rate over 200/second } add @blocklist { ip saddr } counter
    }

    chain forward { }

    chain input {
        tcp dport vmap { 8000 : jump portainer, 9443 : jump portainer }
        tcp dport vmap { 80 : jump http }
    }
}

问题出在http链上,也就是说,我向服务器发出了20个http请求(我的公网源IP是191.185.17.156)accept计数器显示总共有200个数据包(包括tcp树形握手,ack等),在此之前都是正常的,参见:

ip saddr 191.185.17.156 counter packets 100 bytes 4920

meter http size 65535 { ip saddr . tcp dport limit rate over 200/second } add @blocklist { ip saddr } counter packets 73 bytes 3576

现在让我头疼的是,怎么可能从我的源 IP 向服务器的 80 端口发送了 100 个数据包,同时又有 73 个多余的数据包?由于 100 小于 200,因此第二个计数器应该为空

更不用说 IPv4 被不当地添加到了阻止列表中。

相关内容