![Nftables funktioniert nicht wie erwartet, um mit Meter zu blockieren](https://rvso.com/image/789276/Nftables%20funktioniert%20nicht%20wie%20erwartet%2C%20um%20mit%20Meter%20zu%20blockieren.png)
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.