Como configurar corretamente o fail2ban para banir IP se estiver acessando alguns arquivos errados

Como configurar corretamente o fail2ban para banir IP se estiver acessando alguns arquivos errados

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.adminsetup.phpgrep "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.locale 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.confuma filter.dpasta, 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.phpvejo 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

informação relacionada