Fail2ban Nginx Konfiguration
Hallo,
ich wollte gern fail2ban nutzen für meinen Nginx Webserver um die ganzen Bots zu bannen.
Nachdem ich fail2ban installiert habe, habe ich die jail.local erstellt mit folgendem Inhalt:
Wenn ich dann schaue was z.B. der Filter nginx-bad-request macht:
sehe ich, dass fail2ban das system journal durchsucht.
Das bringt natürlich nichts, da Nginx hier loggt: /var/log/nginx/access.log
Da ich bestimmt nicht der erste Mensch bin, der Nginx auf Ubuntu LTS 24.04 mit fail2ban betreiben will, stellt sich mir die Frage: Was soll ich hier ändern ?
Nginx ins Journal loggen lassen will ich ungern, wüsste auch nicht wie/wo ich das einstellen sollte.
Oder muss ich die ganzen Regeln unter /etc/fail2ban/filter.d/ händlisch ändern?
z.B.: nginx-http-auth.conf
ich könnte bei den 4 Filtern für Nginx dort eintragen:
ich bin mir aber nicht sicher ob das im Sinne des Erfinders ist.
MfG
ich wollte gern fail2ban nutzen für meinen Nginx Webserver um die ganzen Bots zu bannen.
Nachdem ich fail2ban installiert habe, habe ich die jail.local erstellt mit folgendem Inhalt:
[DEFAULT]
ignoreself = true
bantime = 2h
maxretry = 3
[nginx-bad-request]
enabled = true
[nginx-botsearch]
enabled = true
[nginx-http-auth]
enabled = true
[nginx-limit-req]
enabled = true
Wenn ich dann schaue was z.B. der Filter nginx-bad-request macht:
fail2ban-client status nginx-bad-request
Status for the jail: nginx-bad-request
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- Journal matches: _SYSTEMD_UNIT=nginx.service + _COMM=nginx
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Das bringt natürlich nichts, da Nginx hier loggt: /var/log/nginx/access.log
Da ich bestimmt nicht der erste Mensch bin, der Nginx auf Ubuntu LTS 24.04 mit fail2ban betreiben will, stellt sich mir die Frage: Was soll ich hier ändern ?
Nginx ins Journal loggen lassen will ich ungern, wüsste auch nicht wie/wo ich das einstellen sollte.
Oder muss ich die ganzen Regeln unter /etc/fail2ban/filter.d/ händlisch ändern?
z.B.: nginx-http-auth.conf
# fail2ban filter configuration for nginx
[Definition]
mode = normal
mdre-auth = ^\s*\[error\] \d+#\d+: \*\d+ user "(?:[^"]+|.*?)":? (?:password mismatch|was not found in "[^\"]*"), client: <HOST>, server: \S*, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"(?:, referrer: "\S+")?\s*$
mdre-fallback = ^\s*\[crit\] \d+#\d+: \*\d+ SSL_do_handshake\(\) failed \(SSL: error:\S+(?: \S+){1,3} too (?:long|short)\)[^,]*, client: <HOST>
mdre-normal = %(mdre-auth)s
mdre-aggressive = %(mdre-auth)s
%(mdre-fallback)s
failregex = <mdre-<mode>>
ignoreregex =
datepattern = {^LN-BEG}
journalmatch = _SYSTEMD_UNIT=nginx.service + _COMM=nginx
ich könnte bei den 4 Filtern für Nginx dort eintragen:
journalmatch =/var/log/nginx/access.log
MfG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 670659
Url: https://administrator.de/forum/fail2ban-nginx-konfiguration-670659.html
Ausgedruckt am: 22.02.2025 um 04:02 Uhr
11 Kommentare
Neuester Kommentar
Interessant ist das es den Abschnitt "[nginx]" in der aktuellen jail.local gar nicht mehr als Konfig Option gibt sondern nur noch...
Auch unter /filter.d gibt es keinen nur "nginx" Filter.
Unter Debian (Bookworm) ist die banaction mit nftables in der jail.local so definiert:
Fragt sich also wie man die Filter Tips von oben unter diesen Vorgaben dann korrekt integriert? 🤔
[nginx-http-auth]
# mode = normal
port = http,https
logpath = %(nginx_error_log)s
[nginx-limit-req]
port = http,https
logpath = %(nginx_error_log)s
[nginx-botsearch]
port = http,https
logpath = %(nginx_error_log)s
[nginx-bad-request]
port = http,https
logpath = %(nginx_access_log)s
-rw-r--r-- 1 root root 474 Nov 9 2022 nginx-bad-request.conf
-rw-r--r-- 1 root root 740 Nov 9 2022 nginx-botsearch.conf
-rw-r--r-- 1 root root 1048 Nov 9 2022 nginx-http-auth.conf
-rw-r--r-- 1 root root 1513 Nov 9 2022 nginx-limit-req.conf
[DEFAULT]
banaction = nftables-multiport
banaction_allports = nftables-allports
chain = input
backend = systemd
[recidive]
banaction = nftables-allports
OK, mit deinem Ruleset mal aktiviert. Bis dato außer mir selbst noch nix ins Netz gegangen. Die Spannung steigt... 
Das v6 Verhalten ist hier identisch. Die Bösewichte haben wohl (noch) wenig Ahnung von v6.
Nachtrag: Da stimmt aber etwas mit deinem Nginx Filterset nicht. Loggt man sich selber ohne Fehlversuche etc. im Webserver ein und wieder aus (SQL Anwendung) ist man nach dem Ausloggen sofort geblockt. 😡
Mit den Default im fail2ban enthaltenen nginx-http-auth Filter passiert dies nicht wenn man diesen ganz einfach in der jail.local mit enable=true aktiviert.
https://www.digitalocean.com/community/tutorials/how-to-protect-an-nginx ...
Das v6 Verhalten ist hier identisch. Die Bösewichte haben wohl (noch) wenig Ahnung von v6.
Nachtrag: Da stimmt aber etwas mit deinem Nginx Filterset nicht. Loggt man sich selber ohne Fehlversuche etc. im Webserver ein und wieder aus (SQL Anwendung) ist man nach dem Ausloggen sofort geblockt. 😡
Mit den Default im fail2ban enthaltenen nginx-http-auth Filter passiert dies nicht wenn man diesen ganz einfach in der jail.local mit enable=true aktiviert.
https://www.digitalocean.com/community/tutorials/how-to-protect-an-nginx ...
Bei Debian Bookworm laufen die Nginx Logs per Default in /var/log/nginx auf das ist es nicht. Das Access Log hatte tatsächlich ein PHP Warning geschmissen wegen einer Variablen. Das ist nun gefixt und jetzt kommen nur noch vereinzelt sowas wie
SSL_do_handshake() failed (SSL: error:0A00006C:SSL routines::bad key share) while SSL handshaking, client: 134.209.245.159
FastCGI sent in stderr: "PHP message: PHP Warning: Undefined array key "HTTP_USER_AGENT" in /var/www/html/index.php on line 57" while reading response header
von irgendwelchen bösen Buben. Nix Kritisches also wo der (dein) Filter fehlerhaft zuschlagen sollte.
Mit "dein" Filter war das
gemeint, was man ja als neue Datei nginx.conf unter filter.d erstellen muss. Darauf verweist ja dann der
[nginx]
enabled = true
...
Abschnitt in der jail.local
Mit dem Ansatz versuche ich nochmal einen 2ten Anlauf...
SSL_do_handshake() failed (SSL: error:0A00006C:SSL routines::bad key share) while SSL handshaking, client: 134.209.245.159
FastCGI sent in stderr: "PHP message: PHP Warning: Undefined array key "HTTP_USER_AGENT" in /var/www/html/index.php on line 57" while reading response header
von irgendwelchen bösen Buben. Nix Kritisches also wo der (dein) Filter fehlerhaft zuschlagen sollte.
Mit "dein" Filter war das
[Definition]
failregex = ^<HOST>.*"(GET|POST|PUT).*" (400|403|404).*$
ignoreregex =
[nginx]
enabled = true
...
Abschnitt in der jail.local
Mit dem Ansatz versuche ich nochmal einen 2ten Anlauf...