fail2ban fuer Nginx konfigurieren

fail2ban kennen viele für SSH, es funktioniert aber genauso gut für Nginx.
Wer einen Login-Bereich hat der im Internet erreichbar ist sollte Brute-Force-Versuche unterbinden.

Voraussetzung: fail2ban ist installiert

sudo apt-get install fail2ban

Filter erstellen

Wir erstellen einen Filter der fehlgeschlagene Logins erkennt.
Das Muster hängt davon ab was die Anwendung ins Log schreibt. Für einen typischen 401/403-Response.

sudo nano /etc/fail2ban/filter.d/nginx-login.conf
[Definition]
failregex = ^<HOST> .* "POST /login.* HTTP.*" (401|403)
ignoreregex =

Den Pfad /login an die eigene Anwendung anpassen.

Jail einrichten

sudo nano /etc/fail2ban/jail.local
[nginx-login]
enabled  = true
port     = http,https
filter   = nginx-login
logpath  = /var/log/nginx/access.log
maxretry = 5
bantime  = 3600
findtime = 600

5 Fehlversuche in 10 Minuten führen zu einer Sperre von einer Stunde.

sudo systemctl restart fail2ban

Status prüfen

sudo fail2ban-client status nginx-login

Zeigt wie viele IPs gerade gesperrt sind und wie viele Treffer es gab.

Eine IP manuell entsperren falls man sich selbst gesperrt hat.

sudo fail2ban-client set nginx-login unbanip 1.2.3.4