Понимание результатов теста fail2ban при запуске fail2ban-regex на Nginx

Я настраиваю fail2ban на дропле Ubuntu 18.04 Digital Ocean под управлением Nginx.

Я подписался на это руководство по настройке и это руководство, чтобы создать собственный фильтр для отслеживания запросов на запрещенные URL-адреса.

Вот мой фильтр:

[Definition]
failregex = ^ \[error\] \d+#\d+: .* forbidden .*, client: <HOST>, .*$

ignoreregex =

Вот как выглядит запись в файле журнала, которую я пытаюсь уловить:

2020/03/09 12:18:08 [error] 14843#14843: *8 access forbidden by rule, client: xx.xx.xx.xx, server: xx.xx.xx.xx, request: "GET /var/ HTTP/1.1", host: "xxx.xxx.xxx.xx"

Вот тест, который я провожу:

/etc/fail2ban/filter.d# fail2ban-regex /var/log/nginx/error.log /etc/fail2ban/filter.d/nginx-forbidden.conf

И вот результат:

Running tests
=============

Use   failregex filter file : nginx-forbidden, basedir: /etc/fail2ban
Use         log file : /var/log/nginx/error.log
Use         encoding : UTF-8


Results
=======

Failregex: 131 total
|-  #) [# of hits] regular expression
|   1) [131] ^ \[error\] \d+#\d+: .* forbidden .*, client: <HOST>, .*$
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [200] {^LN-BEG}ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T|  ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\s*Zone offset)?
|  [254] ExYear(?P<_sep>[-/.])Month(?P=_sep)Day(?:T|  ?)24hour:Minute:Second(?:[.,]Microseconds)?(?:\s*Zone offset)?
`-

Lines: 1060 lines, 0 ignored, 131 matched, 929 missed
[processed in 0.47 sec]

Missed line(s): too many to print.  Use --print-all-missed to print all 929 lines

В моем файле журнала около 1060 строк, и 200 из них содержат дату. Из этих 200 131 содержит слово «запрещено», так что я думаю, что это работает, но я не уверен.

Вот мои вопросы:

1) Что такое «совпадения шаблона даты»? Это строки, которые начинаются с даты в ожидаемом формате? И поэтому являются ли они «кандидатами» на то, чтобы стать записями журнала, которые должны быть сопоставлены?

2) В чем разница между «проигнорировано» и «пропущено»?

3) Есть ли способ увидеть 131 «совпадающую» запись, чтобы я мог проверить, похожи ли они на то, что я пытаюсь поймать?

4) Где регулярное выражение в фильтре говорит client: <HOST>, что это за соответствие? Это IP-адрес «клиента» в записи журнала или запись «хост» в конце строки?

Ответы, вероятно, очевидны, если вы знаете, что означают эти термины, но я не могу найти объяснений, достаточно простых для моего невежества.


person Little Brain    schedule 09.03.2020    source источник


Ответы (1)


Слишком поздно, но ...

  1. fail2ban ищет даты в вашем журнале, пытаясь сопоставить их с шаблонами дат по умолчанию (шаблонами). Если у вас есть попадание, значит, совпала дата. В вашем примере было найдено / сопоставлено в общей сложности два разных формата даты (200 дат одного формата и 254 даты другого, соответственно).

  2. Игнорируемые строки - это строки, совпадающие с вашим ignoreregex, если он присутствует (в вашем случае его нет). Пропущенные строки - это строки, которые не были сопоставлены ни failregex, ни ignoreregex.

  3. Добавьте флаг --print-all-matched в команду fail2ban-regex

  4. client: <HOST>, будет соответствовать части client: xx.xx.xx.xx, в строке журнала. <HOST> - это псевдоним для предопределенного регулярного выражения, которое соответствует либо имени хоста, либо IP-адресу.

person AndroidX    schedule 02.01.2021