Frage Mengenbegrenzung mit UFW: Grenzwerte einstellen


UFW's Man Seite erwähnt, dass es iptables Rate Limiting für mich einrichten kann:

ufw unterstützt die Begrenzung der Verbindungsrate, was für   schützen          gegen Brute-Force-Login-Angriffe. ufw verweigert Verbindungen bei einer IP          Adresse hat versucht, 6 oder mehr Verbindungen in den letzten 30 zu initiieren          Sekunden. Sehen http://www.debian-administration.org/articles/187  zum          Einzelheiten. Typische Verwendung ist:

     ufw limit ssh/tcp

Leider ist dies die gesamte Dokumentation, die ich finden konnte. Ich würde gerne bei UFW bleiben und keine komplizierteren iptables-Befehle verwenden (um die Dinge "unkompliziert" zu halten).

Wie würde ich ufw verwenden, um den gesamten eingehenden (also nicht ausgehenden) Verkehr auf Port 80 auf 20 Verbindungen pro 30 Sekunden zu begrenzen? Wie würde ich die Ratenbegrenzung für die Ports 30000 bis 30005 deaktivieren? Ist die Ratenbegrenzung standardmäßig für alle Ports aktiviert?


19
2018-03-11 12:35


Ursprung




Antworten:


UFW ist so konzipiert, dass es "unkompliziert" ist, was in diesem Fall bedeutet, dass Sie keine Kontrolle über die Einzelheiten der Rate haben, auf die Verbindungen begrenzt sind. Wenn Sie in die Python-Quelle von UFW eintauchen möchten, könnten Sie herausfinden, wie Sie es optimieren können. Die entsprechende Information ist (auf meinem Ubuntu 10.04 System) in /usr/share/pyshared/ufw/backend_iptables.py

Daher sollten Sie hier einige Fragen zu Ihrer Schnellfrage beantworten.

  1. Unter der Annahme, dass 10.10.10.0/24 Ihr lokales Netzwerk ist, wendet dies die standardmäßige Begrenzungsregel auf Port 80 / tcp incoming an:

    ufw limit proto tcp from any port 80 to 10.10.10.0/24
    
  2. und 3. Die Ratenbegrenzung ist standardmäßig nicht aktiviert. Verwenden Sie diese Regel, um sie jedem (Ziel-) Port außer dem gewünschten Bereich hinzuzufügen. Beachten Sie, dass Regeln (auch mit Bereichen) atomare Einheiten sind und nicht aufgeteilt werden können. Sie können dann beispielsweise keine Regel für einen Port hinzufügen delete eine (nicht vorhandene) Regel für einen bestimmten Bereich, um sie zu entfernen. limit ist kein akzeptables Argument dafür ufw default, entweder.

    ufw limit from any to any port 0:29999,30006:65535
    

18
2018-04-12 20:00



Bedeutet dies, dass die Rate nie eingestellt werden kann? - Tom
Nicht ohne Hacken der Quelle, zumindest nicht für UFW 0.30pre1-0ubuntu2, was aktuell für Ubuntu 10.04 ist. Vom Aussehen der Dinge in der aktuellen QuelleDas hat sich nicht geändert. Sie können jedoch iptables-Regeln in /etc/ufw/after.rules (oder /etc/ufw/before.rules) setzen, und diese werden ebenfalls verwendet. Sehen Mann UFW-Rahmen Für mehr Information. - bonsaiviking
@bonsaiviking Ist es möglich auf iptableWenn ja, dann ist iptable Backend von ufw. - Nullpointer


Wie im vorherigen Beitrag erwähnt, können Sie die user.rules anpassen. Ich brauche meine SMTP-Verbindungsrate von bis zu 12 Verbindungen in 6 Sekunden. Ich habe zuerst eine Regel wie unten gezeigt hinzugefügt. Hinweis: Dies fügt eine Grenzwertregel hinzu, die standardmäßig 6 in 30 Sekunden erlaubt

ufw limit smtp

und ich habe die /lib/ufw/user.rules bearbeitet (ich behalte eine benutzerdefinierte Kopie dieser Datei mit vielen anderen Verbesserungen) wie unten gezeigt ...

### tuple ### limit tcp 25 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --set
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --update --seconds 6 --hitcount 12 -j ufw-user-limit
-A ufw-user-input -p tcp --dport 25 -j ufw-user-limit-accept

6
2017-08-26 14:47





Das Ratenlimit kann in der ufw-Regeldatei geändert werden, die /lib/ufw/user.rules gefunden werden kann. Standardmäßig sind keine Grenzen für alle Ports aktiviert. Sie sollten jeden Port manuell hinzufügen oder indem Sie die Datei user.rules bearbeiten.


5
2018-04-12 08:50





Es lohnt sich, auf mögliche unbeabsichtigte Folgen der Verwendung der LIMIT-Funktion von ufw hinzuweisen.

Angenommen, Sie haben ein pauschales Limit für Port 22 / tcp als erste Ufw-Regel festgelegt:

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     LIMIT IN    Anywhere                  
...

mit der Annahme, dass alle Verbindungen, die unter dem Grenzwert arbeiten, noch gefiltert werden können, indem man den Regeln von ufw folgt und schließlich die Standard-Politik von "deny (incoming)".

Zumindest für ufw 0,35 wäre diese Annahme falsch. Tatsächlich akzeptiert die LIMIT IN-Logik sofort jede Eingabe, die vom Grenzwertkriterium nicht abgelehnt wurde.

Im Pseudocode ist die LIMIT-Logik

if CONDITION then DENY else ACCEPT

während andere ufw-Regeln Logik zu haben scheinen:

if CONDITION then (DENY|ACCEPT) else continue to next rule.

Ich persönlich fand, dass dies ein unerwartetes Verhalten für ufw LIMIT ist, was ich nur herausfand, indem ich in der Systemprotokolldatei viele Port 22-Anmeldeversuche unerwartet fand, die aufgrund der Filterung durch andere ufw-Regeln nie passiert sein sollten.

Details zur Verhaltensbestätigung

Die relevanten Zeilen des iptables-Codes, die von ufw eingefügt werden, lauten wie folgt:

-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name DEFAULT --mask 255.255.255.255 --rsource -j ufw-user-limit
-A ufw-user-input -p tcp -m tcp --dport 22 -j ufw-user-limit-accept
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT

Die obige Auflistung kann mit erstellt werden

iptables -S | grep ufw-user-limit

Die ersten beiden Zeilen sind in ufw-user-input was mit bestätigt werden kann

iptables -S | grep ufw-user-input

0
2018-03-31 19:01