You are here: Beat » Wiki-Server » Fail2Ban

Fail2Ban

18 May 2025 - 08:34 | Version 2 |

Worum geht es?

Fail2Ban ist ein Filter zur Abwehr von unerwünschtem Netzwerkverkehr, insbesondere Hacking-Versuche und unfreundliche Bots.

Was nutze ich?

Auf meinen Wiki-Server nutze ich verschiedene Filter, unter anderem denjenigen gegen Brute-Force-SSL-Angriffe. Daneben habe ich auch eigene Filter für den eingehenden https-Verkehr aufgestellt:

robots.txt missachtende Bots

Die Zahl von Crawlern, die sich nicht an die Regeln von robots.txt hält, nimmt zu. Ich habe deshalb einen Mini-Honeypot in Form einer URL ins Wiki gepackt, die menschliche User nicht sehen, Crawler aber sehr wohl. Der Abruf dieser Datei wird per robots.txt verboten. Wer die URL trotzdem abruft, wird für eine Stunde vom Server ausgesperrt.

(Wer also anderes tun sollte, als diese Seite lesen, kann den Link https://wiki.doebe.li/ich-will-keine-bots anklicken und bekommt dann für 60 Minuten keine Antworten mehr von diesem Webserver...)

Hacking-Versuche

In diesem Filter sammle ich typische Anfragen von automatisierten Hacking-Versuchen. Eine IP-Adresse, die eine solche Anfrage stellt, wird für 24h gesperrt. Hilft mindestens gegen überflüssigen Traffic, der meinen Wikiserver belastet.

^.* .*"GET /.git.*$
^.* .*"GET /_phpmyadmin.*$
^.* .*"GET /admin.*$
^.* .*"GET /alive.php.*$
^.* .*"GET /app.*$
^.* .*"GET /?phpshells.*$
^.* .*"GET /backend.*$
^.* .*"GET /backup.*$
^.* .*"HEAD /backup.*$
^.* .*"GET /cgi-bin.*$
^.* .*"GET /core.*$
^.* .*"GET /credentials.*$
^.* .*"GET /dev/.*$
^.* .*"GET /home/.*$
^.* .*"GET /images.*$
^.* .*"GET /mysql/.*$
^.* .*"GET /php.*$
^.* .*"GET /old.*$
^.* .*"HEAD /old.*$
^.* .*"GET /sql.*$
^.* .*"GET /test/.*$
^.* .*"GET /wp.*$
^.* .*"HEAD /wp.*$
^.* .*"GET /wordpress.*$
^.* .*"HEAD /wordpress.*$

Massenabrufe

Mein Wiki-Server reagiert allergisch, wenn zu viele Abfragen gleichzeitig eingehen, weil jede Abfrage eine eigene Session mit Speicherbedarf aufbaut. Dieser burstartige Traffic kommt selten von grossen öffentlichen Interesse für mein Wiki, sondern von aggressiven Crawlern, die sich nicht an die in robots.txt notierte Regel halten, höchstens alle 15 Sekunden eine Seite abzurufen.

Ich brauche deshalb eine Regel, die zu aggressive Bots ruhigstellt. Der Schlüssel liegt darin, dafür nicht das normale Logfile des Webservers zu nutzen, sondern das Eventlog von Foswiki, weil dieses pro Seitenabruf nur eine Zeile enthält (Bilder, CSS und JS-Dateien werden da nicht protokolliert). Somit habe ich jetzt einen eigenen Fail2Ban-Filter erstellt:

[Definition]
failregex = ^.* guest \| view \|[^|]+\|[^|]+\| 
datepattern = ^\| %%Y-%%m-%%dT%%H:%%M:%%SZ
ignoreregex =

Mit diesem Filter ist jeder Seitenabruf eines nicht eingeloggten Users ein Ereignis für FAil2Ban. Darauf aufbauend kann ich nun ein FAil2Ban-Gefängnis definieren:

[wiki-event-log]
enabled = true
filter = wiki-event-log
logpath = /var/www/foswiki/working/logs/events.log
maxretry = 5
findtime = 15

Ins Gefängnis kommt, wer ohne sich einzuloggen innerhalb von 15 Sekunden 5 Wikiseiten abruft, für die bei mir eingestellte Standardzeit von 10 Minuten geblockt wird.

This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding wiki.doebe.li? Send feedback
This page was cached on 02 Jun 2025 - 04:51.