Создайте собственный фильтр для сбоев fail2ban

Создайте собственный фильтр для сбоев fail2ban

Я играюсь с fail2ban в kubernetes. Для этого я создал pod, который создает поддельные сообщения журнала: 2021-08-04 18:33:13 Authentication failed 15.15.15.15 Я создал пользовательский фильтр, чтобы проверить, работает ли fail2ban. Сначала я попробовал утилиту fail2ban-regex с файлом, содержащим 10 строк этих сообщений журнала, и получил такой вывод:

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]

Но когда я затем пробую применить тот же фильтр к файлу, содержащему постоянные журналы, я получаю эту ошибку:

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

А когда я активирую фильтр для fail2ban, там нет забаненного IP, поэтому я думаю, что мой фильтр не работает, но я не могу найти ошибку.

фильтр.conf:

[Definition]

failregex = \sAuthentication failed\s<HOST>

решение1

Это известная ошибка (уже исправлена), см.https://github.com/fail2ban/fail2ban/issues/3020

Но фактическая причина — неточный datepattern и либо неполная временная метка (соответствующая набору datepattern по умолчанию), либо какая-то строка вообще без временной метки. Решением было бы либо обновление, либо (лучше) точный datepattern, насколько это возможно, и в лучшем случае привязанный к началу (или концу).

Связанный контент