Рейтинг:0

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

флаг kr

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

Запуск тестов
==============

Используйте файл фильтра failregex: test, на основе каталога: /etc/fail2ban
Используйте файл журнала: /logs.txt
Использовать кодировку: UTF-8


Результаты
=======

Failregex: всего 10
|- #) [количество совпадений] регулярное выражение
| 1) [10] \sОшибка аутентификации\s<HOST>
`-

Игнорировать регулярное выражение: всего 0

Дата показа шаблона:
|- [количество просмотров] формат даты
| [10] ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T| ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\ s*Смещение зоны)?
`-

Строки: 10 строк, 0 проигнорировано, 10 совпало, 0 пропущено
[обработано за 0,12 сек.]

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

Запуск тестов
==============

Используйте файл фильтра failregex: test, на основе каталога: /etc/fail2ban
Используйте файл журнала: /logs/kubernetes.logs
Использовать кодировку: UTF-8

Traceback (последний последний вызов):
 Файл "/usr/bin/fail2ban-regex", строка 34, в <module>
   exec_command_line()
 Файл "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", строка 836, в exec_command_line
   если не fail2banRegex.start (аргументы):
 Файл "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", строка 776, в начале
   self.process (test_lines)
 Файл "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", строка 584, в процессе
   line_datetimestripped, ret, is_ignored = self.testRegex(строка)
 Файл "/usr/lib/python3.8/site-packages/fail2ban/client/fail2banregex.py", строка 456, в testRegex
   найдено = self._filter.processLine(строка, дата)
 Файл "/usr/lib/python3.8/site-packages/fail2ban/server/filter.py", строка 613, в processLine
   timeMatch = self.dateDetector.matchTime (строка)
 Файл "/usr/lib/python3.8/site-packages/fail2ban/server/datedetector.py", строка 368, в matchTime
   (строка[расстояние] == self.__lastPos[2], а не self.__lastPos[2].isalnum())
IndexError: индекс строки вне допустимого диапазона

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

фильтр.конф:

[Определение]

failregex = \sОшибка аутентификации\s<HOST>
djdomi avatar
флаг za
я думаю, что [Stackoverflow] уже ответил на него (https://stackoverflow.com/questions/56158596/how-to-use-fail2ban-under-kubernetes)
Рейтинг:0
флаг il

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

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.