Mă joc cu fail2ban în kubernetes. Pentru asta am creat un pod care creează mesaje de jurnal false: 2021-08-04 18:33:13 Autentificarea eșuată 15.15.15.15 Am creat un filtru personalizat, pentru a testa dacă fail2ban funcționează. Am încercat mai întâi utilitarul fail2ban-regex cu un fișier care conține 10 linii din aceste mesaje de jurnal și am obținut această ieșire:
Executarea testelor
==============
Utilizați fișierul de filtru failregex: test, basedir: /etc/fail2ban
Utilizați fișierul jurnal: /logs.txt
Utilizați codificarea: UTF-8
Rezultate
=======
Failregex: 10 în total
|- #) [# of hits] expresie regulată
| 1) [10] \sAutentificare eșuată\s<HOST>
`-
Ignoreregex: 0 total
Afișări șablon de dată:
|- [# of hits] format de dată
| [10] ExYear(?P<_sep>[-/.])Lună(?P=_sep)Ziua(?:T| ?)24hour:Minute:Second(?:[.,]Microsecunde)?(?:\ s*Zone offset)?
`-
Linii: 10 linii, 0 ignorate, 10 potrivite, 0 ratate
[procesat în 0,12 sec]
dar când încerc apoi același filtru împotriva fișierului, care conține jurnalele continue, primesc această eroare:
Executarea testelor
==============
Utilizați fișierul de filtru failregex: test, basedir: /etc/fail2ban
Utilizați fișierul jurnal: /logs/kubernetes.logs
Utilizați codificarea: UTF-8
Traceback (cel mai recent apel ultimul):
Fișierul „/usr/bin/fail2ban-regex”, linia 34, în <modul>
exec_command_line()
Fișierul „/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py”, linia 836, în exec_command_line
dacă nu fail2banRegex.start(args):
Fișierul „/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py”, linia 776, la început
self.process(linii_test)
Fișierul „/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py”, linia 584, în proces
line_datetimestripped, ret, is_ignored = self.testRegex(line)
Fișierul „/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py”, linia 456, în testRegex
găsit = self._filter.processLine(linie, dată)
Fișierul „/usr/lib/python3.8/site-packages/fail2ban/server/filter.py”, linia 613, în processLine
timeMatch = self.dateDetector.matchTime(line)
Fișierul „/usr/lib/python3.8/site-packages/fail2ban/server/datedetector.py”, linia 368, în matchTime
(linie[distanță] == self.__lastPos[2] și nu self.__lastPos[2].isalnum())
IndexError: index de șir în afara intervalului
Și când activez filtrul pentru fail2ban, nu am niciun ip interzis, așa că cred că filtrul meu nu funcționează, dar nu pot găsi greșeala.
filter.conf:
[Definiție]
failregex = \sAutentificare eșuată\s<HOST>