fail2ban не банит, но сопоставляет логи

fail2ban не банит, но сопоставляет логи

Я пытаюсь создать защиту от перебора с помощью fail2ban. С тестом fail2ban он сопоставляет логи, которые я хочу сопоставить, но с моим тестовым перебором, который взломал сайт с 7+ неудачными попытками входа, он не банит мой IP-адрес.

фильтр:

[Definition]
failregex = <HOST>:.*"POST /login.*" 200 .*$
ignoreregex =

тюрьма:

[shop-brute-force]
enabled  = true
filter   = shop-brute-force
logpath  = /etc/exampleorg/shop/log/access.log
maxretry = 7
findtime = 60
bantime  = 900
ignoreip =

Пример журнала (анонимизирован с помощью ..., 88.88.88.88 и example.org):

2022/04/01 08:09:25.413720 88.88.88.88:10729 - - [01/Apr/2022:08:09:25 +0000] "POST /login?target=%2Fshop%2F HTTP/1.1" 200 2192 "https://example.org/login?target=%2Fshop%2F" "..."

тест:

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

Use   failregex filter file : shop-brute-force, basedir: /etc/fail2ban
Use         log file : /home/user/test.log
Use         encoding : UTF-8


Results
=======

Failregex: 3 total
|-  #) [# of hits] regular expression
|   1) [3] <HOST>:.*"POST /login.*" 200 .*$
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [106] Year(?P<_sep>[-/.])Month(?P=_sep)Day 24hour:Minute:Second(?:,Microseconds)?
`-

Lines: 106 lines, 0 ignored, 3 matched, 103 missed
[processed in 0.02 sec]

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

решение1

Я пытаюсь создать защиту методом подбора с помощью fail2ban
failregex = ... 200 ...

Это не обязательно попытка перебора, потому что 200 — это обычный ответ, который означает ОК... Обычно коды вроде 401 или 403 сигнализируют о несанкционированных попытках, или если служба отвечает кодом 200, она делает дополнительную запись в каком-то файле журнала или журнале (не обязательно в access.log). Но и другие вещи здесь весьма сомнительны, не говоря уже о том, что теоретически можно выполнить перебор, используя другие методы, такие как POST.

но с моим тестовым брутфорсом сайта с 7+ неудачными попытками входа ...
Lines: 106 lines, 0 ignored, 3 matched, 103 missed

Вы не предоставили всю выдержку из журнала, соответствующую этим 7 попыткам. И fail2ban-regexнашли только 3 совпадения, связанные с вашим failregex(что совсем не хорошо, например, не закреплено и имеет всеобъемлющие запросы, однако неважно - совпадений там нет). Вероятно, он регистрирует что-то другое как одну строку журнала из вашего примера, потому что ваше RE в основном соответствует этому. Поэтому, пожалуйста, обновите свой вопрос полной выдержкой из журнала, соответствующей всем 7 попыткам, которые вы сделали.

И последнее, но не менее важное: гораздо лучшее RE могло бы выглядеть так:

failregex = ^\s*<ADDR>:\d+ [^"]*"[A-Z]+ /login\b[^"]*" 200\b

Однако я все еще не уверен, что вы действительно будете этим пользоваться (из-за проблем с 200-м и прочего, о чем я упоминал выше).

Если это был только тест (с 3 строками журнала) и вы действительно видите все 7 строк журнала в реальном журнале, вы можете это проверитьFAQ по возможным причинам, по которым fail2ban не банит. Например, это может быть некорректно backend(установите его autoдля мониторинга, связанного с файлами) или неподходящее действие бана или какая-то ошибка на стороне fail2ban (проверьте также fail2ban.log).

Связанный контент