Я не могу заставить мое регулярное выражение отказа fail2ban соответствовать записям журнала.
Ниже приводится образец записи журнала:
Failed login attempt {"xForwardedFor":"192.168.0.38","remoteAddress":"::ffff:127.0.0.1","userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0","timestamp":1573556557}
Это моя конфигурация:
[Definition]
failregex= ^Failed login attempt {\"xForwardedFor\":\"<HOST>\"
ignoreregex =
datepattern = "timestamp":{EPOCH}}$
Fail2ban не возвращает совпадение во время работы или при тестировании с помощью fail2ban-regex следующим образом.
fail2ban-regex 'Failed login attempt {"xForwardedFor":"192.168.0.38","remoteAddress":"::ffff:127.0.0.1","userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0","timestamp":1573556557}' '^Failed login attempt {\"xForwardedFor\":\"<HOST>\"'
Кажется, что ваш файл журнала не начинается с отметок времени. На основе Руководство,
Чтобы строка журнала соответствовала вашему failregex, она фактически должна совпадать в двух частях: начало строки должно соответствовать шаблону временной метки или регулярному выражению, а оставшаяся часть строки должна соответствовать вашему failregex. Если failregex привязан к ведущему
^
, то привязка относится к началу оставшейся части строки после отметки времени и промежуточного пробела.Шаблон или регулярное выражение для соответствия отметке времени в настоящее время не документированы и недоступны для чтения или установки пользователями. См. Ошибку Debian № 491253. Это проблема, если ваш журнал имеет формат метки времени, которого не ожидает fail2ban, поскольку тогда он не сможет сопоставить ни одной строки. Из-за этого вы должны тестировать любой новый failregex по образцу строки журнала, как в примерах ниже, чтобы быть уверенным, что он будет соответствовать. Если fail2ban не распознает вашу временную метку журнала, у вас есть два варианта: либо перенастроить ваш демон для регистрации с временной меткой в более распространенном формате, например, в приведенной выше строке журнала; или отправьте отчет об ошибке с просьбой включить ваш формат временной метки.
Я попробовал ваш случай на своей машине, поставив метки времени в начале, Fail2Ban распознает шаблон.
~$ sudo fail2ban-regex '1573556557 Failed login attempt {"xForwardedFor":"192.168.0.38","remoteAddress":"::ffff:127.0.0.1","userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0","timestamp":1573556557}' 'Failed login attempt {\"xForwardedFor\":\"<HOST>'
Running tests
=============
Use failregex line : Failed login attempt {\"xForwardedFor\":\"<HOST>
Use single line : 1573556557 Failed login attempt {"xForwardedFor":"...
Results
=======
Failregex: 1 total
|- #) [# of hits] regular expression
| 1) [1] Failed login attempt {\"xForwardedFor\":\"<HOST>
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [1] {^LN-BEG}Epoch
`-
Lines: 1 lines, 0 ignored, 1 matched, 0 missed
[processed in 0.01 sec]
Возможно, вы можете изменить свой файл журнала так, чтобы дату и время можно было поставить в начале. У меня также есть другие ссылки, связанные с вашим случаем:
Надеюсь, это поможет.