Debian 10 Server
Kernel 4.19.171-2
nft-Version: 0.9.0
ich versuche mich bereits seit Tagen an der Migration meiner iptables Firewall zu einer nftables-Firewall. Die meisten Regeln ließen sich problemlos konvertieren.
Leider gibt es Probleme mit dem alten "recent" Module, das man jetzt mit meters bzw. dynamischen Sets lösen könnte, wenn das funktioneiren würde
In diesem Bereich gibt es ein technisches Voll-Chaos. Jede nft/Kernel Kombination bringt eine eigene Funktionalität mit. Die offizielle Doku beschreibt nur die Funktionalität der neuesten Version, die aber hier nicht verfügbar ist. Vor nft-Version 0.8 gab es Flowtables, dann wurde das durch "meter" ersetzt und dann durch dynamische Sets, markiert mit dem Flag dynamic, was aber in Buster noch nicht drin steckt. Hier muss man mit "meter" arbeiten, aber das Beispiel in den man-Pages tut nicht das was man erwarten würde... deshalb hier mein Hilferuf ...
Bevor wieder die klassische Frage kommt, wozu man das braucht, das ist ein einfacher Mechanismus um Brute-Force-Attacken abzuwehren. Die Regel erlaubt jeder IP nur eine bestimmte Anzahl von Connections in einem festgelegten Zeitrahmen und wenn das überschritten wird, dann wird die IP für eine bestimmte Zeit geblockt...
und Nein, ich will das nicht mit fail2ban oder anderen Tools machen, sondern mit den Bordwerkzeugen... hier nft!
Die Regel:
Code: Alles auswählen
ip filter input tcp flags syn tcp dport ssh meter flood size 128000 { ip saddr timeout 10s limit rate over 10/second} add @blackhole { ip saddr timeout 1m } drop
Code: Alles auswählen
ip filter input
Code: Alles auswählen
tcp flags syn tcp dport ssh
Code: Alles auswählen
meter flood size 128000 { ip saddr timeout 10s limit rate over 10/second}
- verwende ein dynamisches Set mit dem Namen "flood" und der Größe 128000
- füge bei einem Match die Source-IP zu diesem meter-set hinzu, wenn der Match mehr als 10 mal pro Secunde stattfindet
- Lösche die gespeicherte IP nach 10 Sekunden
Code: Alles auswählen
add @blackhole { ip saddr timeout 1m }
Code: Alles auswählen
drop
Das funktioniert nicht! Das meter wird bei jedem Connection-Versuch mit der IP befüllt und nach Ablauf des Timeout wieder gelöscht. das Limit funktioniert hier nicht!
Die zweite Aktion, wird niemals ausgeführt, egal, wie oft und wie schnell man sich connected. Das Verdict wird ebenfalls niemals ausgeführt.
Hat jemand eine Idee, wo das Problem liegt? Ich denke mal, daß wenn das in den man-Pages als Beispiel angeführt wird, sollte das auch funktionieren, oder?
Oder habe ich diese REgel vielleicht falsch interpretiert? Weiß jemand, wie man das richtig macht ?
vielen Dank schon mal