Aktionen

Ufw Limit gegen Überlastung einstellen

Aus znilwiki

Version vom 7. Juni 2026, 16:49 Uhr von BLinz (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „<u>'''Changelog:'''</u><br> * 07.06.2026 erste Version ---- ==Vorwort== Neulich hatte ich das Problem das mein Webserver auf dem diese Webseite läuft ständig auf 100% CPU lief.<br> Mit {{code|htop}} konnte ich sehen das es die Prozesse für diese Webseite hier sind (jede meiner Webseiten / Subdomain läuft unter einem eigenen Benutzer).<br> Im {{code|acccess.log}} konnte ich viele Zugriffe von verschiedenen IP-Adressen sehen.<br> Per Einzeiler tail -n…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Changelog:

  • 07.06.2026 erste Version

Vorwort

Neulich hatte ich das Problem das mein Webserver auf dem diese Webseite läuft ständig auf 100% CPU lief.
Mit htop konnte ich sehen das es die Prozesse für diese Webseite hier sind (jede meiner Webseiten / Subdomain läuft unter einem eigenen Benutzer).
Im acccess.log konnte ich viele Zugriffe von verschiedenen IP-Adressen sehen.
Per Einzeiler

tail -n 10000 /weg/zu/dem/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 20

zeigt die Top-Adressen der letzten 10.000 Logzeilen.
Im Gegensatz zu früher war es diesmal aber ziemlich verteilt über die Welt. Die Aufrufe an mein Wiki waren dabei maximal Belastend - es wurde Änderungen für bestimmt Zeiträume abgefragt oder vorherige Versionen usw.
Das übliche Sperren von 1 bis 2 IP-Adressen wirkte hier also nicht.
Ich hatte diverse Dinge ausprobiert, was funktionierte war die Begrenzung der Anzahl der Verbindungen pro IP-Adresse.



Die ufw-Regel

sudo ufw limit proto tcp from any to any port 80
sudo ufw limit proto tcp from any to any port 443

Dadurch wird automatisch jede IP-Adresse blockiert die versucht, mehr als 6 Verbindungen innerhalb von 30 Sekunden aufzubauen.
Erfolgt mehr als 30 Sekunden kein Zugriff von der IP, wird diese wieder freigegeben.
Zuschauen kann man dabei im Log:

tail -n 100 -F /var/log/ufw.log




Adressen oder IP-Blöcke whitelisten

sudo ufw allow from 192.168.0.10

nimmt die 192.168.0.10 aus allen Regeln heraus, per

udo ufw allow from 192.168.0.0/24

auch ein ganzes Netzwerksegment.



ufw-Regel wieder löschen

sudo ufw delete limit proto tcp from any to any port 80
sudo ufw delete limit proto tcp from any to any port 443




Eigene Limits statt 6 Versuche in 30 Sekunden setzen

Einen direkten Befehl eigene Limits zu setzen als die 6 Versuche in 30 Sekunden gibt es nicht.
Man muss die Regel zunächst erstellen und dann die folgende Datei bearbeiten:

sudo nano /etc/ufw/user.rules

In der Datei müsste irgendwo ein Abschnitt ähnlich wie diesem hier stehen:

-A ufw-user-input -p tcp --dport 443 -m conntrack --ctstate NEW -m recent --set --name ufwlimit_443 --rsource
-A ufw-user-input -p tcp --dport 443 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name ufwlimit_443 --rsource -j ufw-user-limit

Wonach Ihr suchen könnt ist --seconds 30 und/oder --hitcount 6, bei --dport sollte 80 oder 443 stehen.
Die beiden Werte passt Ihr einfach an, speichert die Datei und lasst diese per

sudo ufw reload

neu einlesen.



Kommentare

Loading comments...