Ratenbegrenzung mit UFW: Grenzen setzen

22

In der UFW-Manpage wird erwähnt, dass iptables ratenbegrenzend für mich eingerichtet werden kann:

ufw unterstützt die Beschränkung der Verbindungsrate, die zum Schutz vor Brute-Force-Login-Angriffen nützlich ist. ufw lehnt Verbindungen ab, wenn eine IP-Adresse in den letzten 30 Sekunden versucht hat, 6 oder mehr Verbindungen herzustellen. Weitere Informationen finden Sie unter http://www.debian-administration.org/articles/187 . Typische Verwendung ist:

     ufw limit ssh/tcp

Leider ist dies die gesamte Dokumentation, die ich finden konnte. Ich möchte 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) Datenverkehr auf Port 80 auf 20 Verbindungen pro 30 Sekunden zu beschränken? Wie deaktiviere ich die Ratenbeschränkung für die Ports 30000 bis 30005? Ist die Ratenbegrenzung standardmäßig für alle Ports aktiviert?

Tom
quelle

Antworten:

21

UFW ist so konzipiert, dass es "unkompliziert" ist. In diesem Fall haben Sie keine Kontrolle über die Einzelheiten der Rate, auf die die Verbindungen beschränkt sind. Wenn Sie sich mit der Python-Quelle von UFW befassen möchten, können Sie herausfinden, wie Sie sie optimieren können. Die entsprechenden Informationen befinden sich (auf meinem Ubuntu 10.04-System) in/usr/share/pyshared/ufw/backend_iptables.py

Wenn Sie das Timing-Problem beiseite lassen, finden Sie am Ende einige Antworten auf Ihre Schnellfeuer-Fragen.

  1. Vorausgesetzt, 10.10.10.0/24 ist Ihr lokales Netzwerk, gilt die Standardeinschränkungsregel für eingehenden Port 80 / TCP:

    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 es zu jedem (Ziel-) Port mit Ausnahme des gewünschten Bereichs hinzuzufügen. Beachten Sie, dass Regeln (auch mit Bereichen) atomare Einheiten sind und nicht aufgeteilt werden können. Sie können beispielsweise keine Regel für einen Port hinzufügen und dann deleteeine (nicht vorhandene) Regel für einen bestimmten Bereich, um ihn zu entfernen. limitist auch kein akzeptables Argument dafür ufw default.

    ufw limit from any to any port 0:29999,30006:65535
    
bonsaiviking
quelle
Bedeutet dies, dass die Rate niemals eingestellt werden kann?
Tom
2
Nicht ohne die Quelle zu hacken, zumindest nicht für UFW 0.30pre1-0ubuntu2, was aktuell für Ubuntu 10.04 ist. Aus der Sicht der Dinge in der aktuellen Quelle hat sich das nicht geändert. Sie können jedoch iptables-Regeln in /etc/ufw/after.rules (oder /etc/ufw/before.rules) einfügen, und diese werden ebenfalls verwendet. Weitere Informationen finden Sie unter man ufw-framework .
Bonsaiviking
@bonsaiviking Ist es möglich iptable, wenn ja, dann ist iptable das Backend von ufw.
Nullpointer
6

Wie im vorherigen Beitrag erwähnt, können Sie die user.rules anpassen. Ich benötige ein SMTP-Verbindungsratenlimit von bis zu 12 Verbindungen in 6 Sekunden. Ich habe eine Regel hinzugefügt, wie unten gezeigt. Hinweis: Dies fügt eine Begrenzungsregel hinzu, die standardmäßig 6 in 30 Sekunden zulässt

ufw limit smtp

und ich habe die Datei /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
Arul Selvan
quelle
Ich fand user.rules in / etc / ufw
Otto Kanellis
5

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

Cikuraku
quelle
1

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

Angenommen, man hat Port 22 / tcp als erste UFW-Regel ein pauschales Limit zugewiesen:

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

mit der Annahme, dass alle Verbindungen, die unter dem Grenzwert arbeiten, weiterhin durch Befolgen der UFW-Regeln und schließlich der Standardrichtlinie "Verweigern (eingehend)" gefiltert werden können.

Zumindest für ufw 0.35 wäre diese Annahme falsch. Tatsächlich akzeptiert die LIMIT IN-Logik Eingaben, die nicht vom Limit-Kriterium abgelehnt wurden, sofort.

Im Pseudocode ist die LIMIT-Logik

if CONDITION then DENY else ACCEPT

während andere UFW-Regeln logisch zu sein scheinen:

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

Ich persönlich habe festgestellt, dass dies ein unerwartetes Verhalten für ufw LIMIT ist, das ich nur entdeckt habe, als ich unerwartet viele Anmeldeversuche für Port 22 in der Systemprotokolldatei gefunden habe, die aufgrund der Filterung durch andere ufw-Regeln niemals hätten passieren dürfen.

Details zur Verhaltensbestätigung

Die relevanten Zeilen des von ufw eingefügten iptables-Codes 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 aufeinanderfolgend und ufw-user-inputkönnen mit bestätigt werden

iptables -S | grep ufw-user-input
Craig Hicks
quelle