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

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

目标:处理源 IP 和目标端口速率大于每秒 200 个数据包的超额数据包,示例:

1s、2s、3s ...:IP 1.1.1.1 到 MyServer:80
[这种情况在第 1 秒内发生 201 次]

我想计算源 IP 和目标端口的传输速率超过每秒 200 个数据包的数据包,基本上,我只会对 http 执行此操作(下面的链),但它不起作用,看,

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

怎么可能 1.) 只有 100 个注册数据包,而 2.) 有 73 个注册数据包,其中 100 小于 200,因此 2. 的计数器应该为零,因为没有数据包超过 200 的速率Saddr:dport 中每秒的数据包数。

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 }
    }
}

我也尝试过:

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

这是因为我认为我可能正在接收来自其他 IP 的数据包,但不幸的是事实并非如此。

相关内容