Рейтинг:0

Регулярное выражение Fail2ban не работает

флаг cn

Я хотел бы заблокировать любой запрос на получение /.git, /wp-login,/remote/login/, поэтому я создал следующий фильтр, который также включает другие запросы.

 badagents = 360Spider|ZmEu|Auto Spider 1.0|zgrab/[0-9]*\.[0-9a-zA-Z]*|Wget\(.*\)|MauiBot.*|AspiegelBot.*|SemrushBot.* |PHP/.*

failregex = ^.+?:\d+ <HOST> -.*"(GET|POST|HEAD).*HTTP.*(?:%(badagents)s)"$
        ^.+?:\d+ <HOST> -.*"(GET|POST|HEAD) /+wp-login\.php.*$
        ^.+?:\d+ <HOST> -.*"(GET|POST|HEAD) /.git/HEAD.*$
        ^.+?:\d+ <HOST> -.*"GET /.git/.*$
        ^.+?:\d+ <HOST> -.*"(GET|POST|HEAD) /wp-login/.*$
        ^.+?:\d+ <HOST> -.*"(GET|POST|HEAD) /.git/objects/.*$
        ^.+?:\d+ <HOST> -.*"(GET|POST|HEAD) //.git/objects/.*$
        ^.+?:\d+ <HOST> -.*"(GET|POST|HEAD) /remote/login/.*$
        ^.+?:\d+ <HOST> -.*"(GET|POST|HEAD) /wp/wp-includes/.*$
        ^.+?:\d+ <HOST> -.*"GET /wp/wp-includes/.*$
        ^.+?:\d+ <HOST> -.*"GET /wp/wp-login.php/.*$
        ^.+?:\d+ <HOST> -.*"GET /test/wp-includes/.*$
        ^.+?:\d+ <HOST> -.*"GET /config/getuser/.*$

Я также прикрепил это к моему jail.local с помощью

[разовый бан]
включено = верно
порт =http,https
путь к журналу = /var/log/nginx/access.log
              /var/log/nginx/prod_test.log
filter = одноразовый бан
бантайм = 300
максимальная попытка = 1
найти время = 10

Я проверил это, пытаясь получить доступ к /.git по URL-адресу более 10 раз, но меня все еще не забанили. Почему это не удается. Я считаю, что проблема в failregex, что мне нужно добавить, чтобы fail2ban работал?

Пример журнала выглядит так

3.17.11.219 - - [05/окт/2021:12:33:15 +0000] "GET //.git/objects/a5/920b6c86cc2d972bde9578c0a5d848dff67354 HTTP/1.1" 301 178 "-" "curl/7.61.1"
флаг cn
Сначала создайте пример файла журнала, который включает записи, которые вы хотите активировать, затем используйте команду `fail2ban-regex` для проверки ваших регулярных выражений. Без образца журналов для сравнения с тем, что у вас есть здесь, трудно помочь.
Geoff avatar
флаг cn
Я включил образец журнала
Рейтинг:0
флаг il

Ваши регулярные выражения (кстати, действительно "уязвимые") начинаются с ^.+?:\d+ <ХОСТ> -, что означает: найти IP-адрес (или имя хоста) после совпадения двоеточия, хотя бы 1 цифры и пробела.
Но ваша линия начинается с IP.

Таким образом, ваши регулярные выражения вообще не соответствуют вашему формату журнала.

Правильное (и менее «уязвимое») failregex будет выглядеть примерно так:

^<ADDR> \S+ \S+ (?:\[\] )?"[A-Z]+ /\S*(?<=/)(?:\.git|wp-login|удаленный/логин)\b[ ^"]*"\s+

но лучше было бы запретить их через веб-сервер (ответ с 403), а затем найти каждый ошибочный запрос с чем-то вроде:

^<АДРЕС> \S+ \S+ (?:\[\] )?"[A-Z]+ /[^"]*"\s+(?!401)[45]\d\d

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

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