Crear su propio filtro para fallos de fail2ban

Crear su propio filtro para fallos de fail2ban

Estoy jugando con fail2ban en kubernetes. Para eso, creé un pod que crea mensajes de registro falsos: 2021-08-04 18:33:13 Error de autenticación 15.15.15.15 Creé un filtro personalizado para probar si fail2ban está funcionando. Primero probé la utilidad fail2ban-regex con un archivo que contenía 10 líneas de estos mensajes de registro y obtuve este resultado:

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]

pero cuando pruebo el mismo filtro en el archivo, que contiene los registros continuos, aparece este error:

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

Y cuando activo el filtro para fail2ban, no hay ninguna IP prohibida, así que creo que mi filtro no funciona, pero no puedo encontrar el error.

filtro.conf:

[Definition]

failregex = \sAuthentication failed\s<HOST>

Respuesta1

Este es un error conocido (ya solucionado en el medio), consultehttps://github.com/fail2ban/fail2ban/issues/3020

Pero la razón real es un patrón de fecha impreciso y una marca de tiempo incompleta (que coincide con el conjunto de patrón de fecha predeterminado) o alguna línea sin marca de tiempo. La solución sería una actualización o (mejor) un patrón de fecha lo más preciso posible y, en el mejor de los casos, anclado al inicio (o al final).

información relacionada