![fail2ban não bane, mas corresponde aos logs](https://rvso.com/image/776300/fail2ban%20n%C3%A3o%20bane%2C%20mas%20corresponde%20aos%20logs.png)
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-regex
encontre 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 auto
para monitoramento relacionado ao arquivo) ou ação de banimento inadequada ou algum erro no lado do fail2ban (verifique também o fail2ban.log).