fail2ban beobachtet eine Logdatei auf ein Muster, zählt Treffer je Adresse und fügt eine Firewall-Regel hinzu, wenn die Zahl überschritten wird. Mehr tut es nicht — und das zu wissen sagt Ihnen genau, wobei es hilft und wobei nicht.

Was es aufhält

  • Wiederholte SSH-Passwortversuche — die Schlüssel allerdings ohnehin schon unterbinden.
  • Wiederholte fehlgeschlagene Anmeldungen an einem Formular, sofern die Fehlversuche protokolliert werden.
  • Einfache Scanner, die eine Liste bekannter Pfade abgehen.

Was es nicht aufhält

Es reagiert nur: Es greift nach mehreren Fehlversuchen ein, ein einzelner erfolgreicher Treffer wird also nie gesehen. Gegen einen Versuch, der über tausend Adressen verteilt ist und je zweimal probiert, hilft es ebenfalls nicht — und genau so sieht ein ernsthafter Versuch aus.

Ein Jail für einen Web-Login

# /etc/fail2ban/filter.d/mysite-login.conf
[Definition]
failregex = ^<HOST> .* "POST /login" 401
ignoreregex =
# /etc/fail2ban/jail.local
[mysite-login]
enabled  = true
filter   = mysite-login
logpath  = /var/log/nginx/access.log
maxretry = 5
findtime = 600
bantime  = 3600

Testen Sie das Muster vor dem Einschalten

fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/mysite-login.conf

Es gibt aus, wie viele Zeilen getroffen wurden. Null Treffer heißt, das Jail wird nie auslösen — und Sie werden sich für geschützt halten.

Sperren Sie sich nicht selbst

ignoreip = 127.0.0.1/8 ::1 YOUR.OFFICE.IP.HERE
Hinter einem CDN trägt jede Anfrage die Proxy-Adresse, die erste Sperre blockiert also den Proxy und mit ihm jeden Ihrer Besucher. Richten Sie zuerst die echte Client-Adresse ein — siehe den Artikel über das Leben hinter einem CDN.
fail2ban-client status mysite-login
fail2ban-client set mysite-login unbanip 1.2.3.4
Beginnen Sie mit einer Sperre von einer Stunde, nicht mit einer dauerhaften. Eine dauerhafte Sperrliste wächst, wird nie durchgesehen und enthält irgendwann einen Kunden.