Ich habe versucht, einebenutzerdefinierte Jail-Regel in fail2ban, aber es wird nie angewendet.
Ich habe keine solche offizielle Dokumentation gefunden, vielleicht übersehe ich etwas.
/etc/fail2ban/filter.d/expressjs.conf
[Definition]
failregex = .* from ip <HOST>
/etc/fail2ban/jail.conf
[express-js]
enabled = true
filter = expressjs
logpath = /var/log/expressjs/slowin-killer.log
maxretry = 5
bantime = 3600
findtime = 600
/var/log/expressjs/slowin-killer.log
[20-5-2017 20:49:57] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 20:57:19] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 20:59:20] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 21:12:47] Failed to authentificate user "[email protected]" from ip 127.0.0.1
[20-5-2017 21:16:9] Failed to authentificate user "[email protected]" from ip 127.0.0.1
Keine Fehlermeldung, aber das Jail scheint aktiv zu sein...
$ fail2ban-client status expressjs
Status for the jail: expressjs
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/expressjs/slowin-killer.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Und das Seltsame ist, dass reguläre Ausdrücke in Ordnung sind ...
fail2ban-regex /var/log/expressjs/slowin-killer.log /etc/fail2ban/filter.d/expressjs.conf
Running tests
=============
Use failregex filter file : expressjs, basedir: /etc/fail2ban
Use log file : /var/log/expressjs/slowin-killer.log
Use encoding : UTF-8
Results
=======
Failregex: 27 total
|- #) [# of hits] regular expression
| 1) [27] .* from ip <HOST>
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [34] Day(?P<_sep>[-/])Month(?P=_sep)(?:Year|Year2) 24hour:Minute:Second
| [1] (?:DAY )?MON Day Year 24hour:Minute:Second(?:\.Microseconds)?
`-
Lines: 162 lines, 0 ignored, 27 matched, 135 missed
[processed in 0.01 sec]
Missed line(s): too many to print. Use --print-all-missed to print all 135 lines
Antwort1
Damit der Filter funktioniert, fehlen einige Dinge, die Sie beheben müssen:
- In Ihrem
expressjs.conf
haben Sie Folgendes festgelegtfindtime = 600
:maxretry = 5
Dies bedeutet, dass Sie innerhalb von 10 Minuten (600 s) 5 Fehlversuche (Regex-Übereinstimmung) benötigen, um die automatische Blockierungs-/Ablehnungsregel für iptables zu generieren.jail.conf
Manpage:
findtime time interval (in seconds) before the current time where failures will count towards a ban. maxretry number of failures that have to occur in the last findtime seconds to ban then IP.
Wenn Sie sich Ihre Protokolle ansehen, sind zwischen dem ersten und dem letzten Protokolleintrag (5 Versuche) in dem Protokoll, das Sie hier eingefügt haben, mehr als 10 Minuten vergangen. Erstes: 20:49
, Letztes:21:16
Alle Ihre Protokolle stammen von
127.0.0.1
. Wenn Sie sichjail.conf
den[DEFAULT]
Block ansehen, finden Sie dieignoreip = 127.0.0.1/8
Standardkonfiguration. Sofern Sie dies nicht geändert haben, ist es ziemlich gefährlich, eine Localhost-Adresse zu blockieren, da dadurch andere Software, die diese Adresse für die interne Kommunikation verwendet, beschädigt wird.Sie
expressjs.conf
haben die Konfiguration nichtdatepattern =
festgelegt, sodass fail2ban nicht erraten kann, welcher Teil der Protokolldatei das Datum ist. Holen Sie sich einige Beispiele aus/etc/fail2ban/filter.d
Dateien und Sie werden Datums-Regex wiedatepattern = ^L %%d/%%m/%%Y - %%H:%%M:%%S
oder findendatepattern = ^%%Y:%%m:%%d-%%H:%%M:%%S
. Ein weiteres Problem hier ist, dass Ihr „zweiter“ Teil des Protokolldatums bei Sekunden < 10 (z. B.21:16:9
bei Ihrem letzten Protokoll) nicht die abschließende Null hat und dies behoben werden muss.
Schauen Sie sich dieOffizielles Fail2ban-Wikium Beispiele zu erhalten und Ihren Filter zu verbessern. Sie müssen eine Menge Dinge beheben.