Я играю с 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>