Nftablesは期待どおりにメーターの使用をブロックしません。

Nftablesは期待どおりにメーターの使用をブロックしません。

目的:送信元IPおよび宛先ポート速度が1秒あたり200パケットを超える超過パケットを処理します。例:

1s, 2s, 3s...: IP 1.1.1.1 to MyServer:80
[1秒に201回発生]

送信元IPポートと宛先ポートの1秒あたり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 の速度を超えるパケットがないので 0 でなければなりません。 per Saddr:dport 1秒あたりのパケット数。

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からパケットを受信して​​いると思いましたが、残念ながらそうではありませんでした。

関連情報