Nftables funktioniert nicht wie erwartet, um mit Meter zu blockieren

Nftables funktioniert nicht wie erwartet, um mit Meter zu blockieren

Ziel: Berücksichtigen Sie überschüssige Pakete, deren Quell-IP- und Zielportrate über 200 Pakete pro Sekunde liegt. Beispiel:

1 s bis 2 s: IP 1.1.1.1 an MyServer:80
[Dies geschieht 201 Mal in Sekunde 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 }
    }
}

Das Problem liegt in der HTTP-Kette. Das heißt, ich habe 20 HTTP-Anfragen an den Server gestellt (meine öffentliche Quell-IP ist 191.185.17.156). Der Akzeptanzzähler zeigt, dass insgesamt 200 Pakete vorhanden sind (einschließlich TCP-Tree-Way-Handshake, Bestätigung usw.). Bis dahin ist alles normal, siehe:

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

Was mich jetzt quält, ist, wie es möglich ist, dass 100 Pakete von meiner Quell-IP an Port 80 auf dem Server gesendet werden und gleichzeitig 73 Pakete überzählig sind. Da 100 kleiner als 200 ist, sollte der zweite Zähler leer sein.

Ganz zu schweigen davon, dass IPv4 zu Unrecht zur Sperrliste hinzugefügt wurde.

verwandte Informationen