Benutzerdefinierter Fail2Ban-Filter nicht angewendet

Benutzerdefinierter Fail2Ban-Filter nicht angewendet

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:

  1. In Ihrem expressjs.confhaben Sie Folgendes festgelegt findtime = 600: maxretry = 5Dies 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.confManpage:
   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

  1. Alle Ihre Protokolle stammen von 127.0.0.1. Wenn Sie sich jail.confden [DEFAULT]Block ansehen, finden Sie die ignoreip = 127.0.0.1/8Standardkonfiguration. 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.

  2. Sie expressjs.confhaben die Konfiguration nicht datepattern =festgelegt, sodass fail2ban nicht erraten kann, welcher Teil der Protokolldatei das Datum ist. Holen Sie sich einige Beispiele aus /etc/fail2ban/filter.dDateien und Sie werden Datums-Regex wie datepattern = ^L %%d/%%m/%%Y - %%H:%%M:%%Soder finden datepattern = ^%%Y:%%m:%%d-%%H:%%M:%%S. Ein weiteres Problem hier ist, dass Ihr „zweiter“ Teil des Protokolldatums bei Sekunden < 10 (z. B. 21:16:9bei 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.

verwandte Informationen