nftables meter funktioniert nicht

Alles rund um sicherheitsrelevante Fragen und Probleme.
Antworten
Benutzeravatar
Trimension
Beiträge: 10
Registriert: 17.02.2018 11:28:26

nftables meter funktioniert nicht

Beitrag von Trimension » 15.02.2021 10:02:53

Moin zusammen,

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
Wir teilen das Konstrukt auf:

Code: Alles auswählen

ip filter input
Das identifiziert die Table

Code: Alles auswählen

tcp flags syn tcp dport ssh
Das matched bei einer neuen TCP-Connection

Code: Alles auswählen

meter flood size 128000 { ip saddr timeout 10s limit rate over 10/second}
Das ist die erste Aktion, die ich so verstehe:

  • 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 }
Als zweite Aktion wird die Source-IP in die Blacklist eingetragen und nach einer Minute wieder gelöscht
und als Letztes der Abschluss, das Verdickt, daß dieses Paket verwirft

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 :-)
jogibaer
[freier softwareentwickler]
cologne - germany

Benutzeravatar
Trimension
Beiträge: 10
Registriert: 17.02.2018 11:28:26

Re: nftables meter funktioniert nicht

Beitrag von Trimension » 15.02.2021 10:12:59

Nachtrag:

falls jemand weiß, wo das Dokumentiert ist, bitte lasst es mich wissen. Die Manpages geben zwar das Beispiel an, aber beschrieben ist dazu kein einziges Wort.
jogibaer
[freier softwareentwickler]
cologne - germany

Antworten