fail2ban não bane, mas corresponde aos logs

fail2ban não bane, mas corresponde aos logs

Tento criar uma proteção de força bruta com fail2ban. Com o teste fail2ban, ele corresponde aos logs que desejo corresponder, mas com meu teste bruto forçando o site com mais de 7 logins com falha, ele não proíbe meu endereço IP.

filtro:

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

cadeia:

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

log exemplo (anonimizado com ..., 88.88.88.88 e 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" "..."

teste:

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

Responder1

Tento criar uma proteção de força bruta com fail2ban
failregex = ... 200 ...

Isto não é necessariamente uma tentativa de força bruta, porque 200 é uma resposta regular, isso significa OK... Normalmente códigos como 401 ou 403 sinalizariam tentativas não autorizadas, ou se o serviço respondesse com 200, escreveria uma entrada de log adicional em algum arquivo de log ou diário (não necessariamente no arquivo access.log). Mas também outras coisas são muito questionáveis ​​aqui, muito menos teoricamente, alguém é capaz de usar força bruta usando outros métodos como POST.

mas com meu teste bruto forçando o site com mais de 7 logins com falha ...
Lines: 106 lines, 0 ignored, 3 matched, 103 missed

Você não forneceu o trecho completo do log correspondente a essas 7 tentativas. E fail2ban-regexencontre apenas 3 correspondências relacionadas à sua failregex(o que não é nada bom, por exemplo, não ancorado e com pega-tudo, mas não importa - as correspondências não estão lá). Provavelmente ele registra algo diferente como uma única linha de log do seu exemplo, porque seu RE basicamente corresponde a isso. Portanto, atualize sua pergunta com o trecho de log completo correspondente a todas as 7 tentativas que você fez.

E por último, mas não menos importante, um RE muito melhor poderia ser assim:

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

No entanto, ainda não tenho certeza se você realmente usaria isso (devido ao 200º problema e outros que mencionei acima).

Se foi apenas teste (com 3 linhas de log) e você realmente vê todas as 7 linhas de log no log real, você pode verificar issoFAQ sobre as possíveis razões pelas quais o fail2ban não bane. Por exemplo, pode estar incorreto backend(definir autopara monitoramento relacionado ao arquivo) ou ação de banimento inadequada ou algum erro no lado do fail2ban (verifique também o fail2ban.log).

informação relacionada