Ich spiele mit fail2ban in Kubernetes herum. Dafür habe ich einen Pod erstellt, der gefälschte Protokollmeldungen erstellt: 2021-08-04 18:33:13 Authentifizierung fehlgeschlagen 15.15.15.15 Ich habe einen benutzerdefinierten Filter erstellt, um zu testen, ob fail2ban funktioniert. Ich habe zuerst das Dienstprogramm fail2ban-regex mit einer Datei ausprobiert, die 10 Zeilen dieser Protokollmeldungen enthält, und habe diese Ausgabe erhalten:
Running tests
=============
Use failregex filter file : test, basedir: /etc/fail2ban
Use log file : /logs.txt
Use encoding : UTF-8
Results
=======
Failregex: 10 total
|- #) [# of hits] regular expression
| 1) [10] \sAuthentication failed\s<HOST>
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [10] ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T| ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\s*Zone offset)?
`-
Lines: 10 lines, 0 ignored, 10 matched, 0 missed
[processed in 0.12 sec]
aber wenn ich dann denselben Filter für die Datei versuche, die die fortlaufenden Protokolle enthält, erhalte ich diesen Fehler:
Running tests
=============
Use failregex filter file : test, basedir: /etc/fail2ban
Use log file : /logs/kubernetes.logs
Use encoding : UTF-8
Traceback (most recent call last):
File "/usr/bin/fail2ban-regex", line 34, in <module>
exec_command_line()
File "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", line 836, in exec_command_line
if not fail2banRegex.start(args):
File "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", line 776, in start
self.process(test_lines)
File "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", line 584, in process
line_datetimestripped, ret, is_ignored = self.testRegex(line)
File "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", line 456, in testRegex
found = self._filter.processLine(line, date)
File "/usr/lib/python3.8/site-packages/fail2ban/server/filter.py", line 613, in processLine
timeMatch = self.dateDetector.matchTime(line)
File "/usr/lib/python3.8/site-packages/fail2ban/server/datedetector.py", line 368, in matchTime
(line[distance] == self.__lastPos[2] and not self.__lastPos[2].isalnum())
IndexError: string index out of range
Und wenn ich den Filter für Fail2Ban aktiviere, wird keine IP gesperrt, also denke ich, mein Filter funktioniert nicht, kann den Fehler aber nicht finden.
filter.conf:
[Definition]
failregex = \sAuthentication failed\s<HOST>
Antwort1
Dies ist ein bekannter Fehler (der inzwischen behoben wurde), siehehttps://github.com/fail2ban/fail2ban/issues/3020
Der eigentliche Grund ist jedoch ein ungenaues Datumsmuster und entweder ein unvollständiger Zeitstempel (entspricht dem standardmäßigen Datumsmustersatz) oder eine Zeile ohne Zeitstempel. Die Lösung wäre entweder ein Update oder (besser) ein möglichst präzises Datumsmuster, das im besten Fall am Anfang (oder Ende) verankert ist.