estou tentando configurarfail2banno meu servidor de teste. Quero apenas bloquear temporariamente qualquer bot de script que tente investigar meu site. Então , tudo o que tem cgi-bin
, e assim por diante. Eu revisei anteriormente tudo o que gera erros 404 com algo como no meu access.log.admin
setup.php
grep "HTTP/1.1\" 404" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n
Garanti que nenhum dos meus URLs contenha nenhuma dessas partes.
Então, após a instalação eu criei jail.local
e não fiz nada com o jail.conf
. Meu arquivo está assim (quero bloquear o IP por 10 minutos):
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 600
destemail = myemail
banaction = iptables-multiport
action = %(action_mwl)s
[apache-script-bots]
enabled = true
port = http,https
filter = apache-script-bots
logpath = /var/log/apache2/access.log
maxretry = 1
Também criei apache-script-bots.conf
uma filter.d
pasta, que tem apenas isso dentro:
[Definition]
failregex = (admin|setup.php|main.php|w00tw00t|web-console|.jsp|manager|cgi-bin)
ignoreregex =
Ao reiniciar o fail2ban me mostra que está tudo bem. Mas quando tento testar se minha prisão funciona, tentando acioná-la com: mydomain/main.php
vejo que não estou preso.
Quando verifico o status do fail2ban, ele me diz que minha prisão está funcionando
fail2ban-client status
Status
|- Number of jail: 2
`- Jail list: ssh, apache-script-bots
Presumo que o problema seja com expressão regular, mas não consigo entender o porquê.
Responder1
Você precisa informar ao fail2ban (por meio do regex) onde na entrada de log ele encontrará um <HOST>
para que possa banir aquele host. Para um log de acesso normal que estaria no início da linha, então
<HOST> -.*(w00tw00t|main.php|setup.php)
funcionaria, mas pode não fazer exatamente o que você deseja, pois corresponderia aos gatilhos relevantes em qualquer lugar da entrada de log.
Você pode querer tentar algo como
<HOST> -.*(/w00tw00t|/main.php |setup.php )
que deve amarrar algumas das cordas a locais mais específicos