Я настраиваю 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-адрес «клиента» в записи журнала или запись «хост» в конце строки?
Ответы, вероятно, очевидны, если вы знаете, что означают эти термины, но я не могу найти объяснений, достаточно простых для моего невежества.