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

7

Estou tentando configurar o fail2ban no meu servidor de teste. Eu quero apenas bloquear temporariamente qualquer bot de script que tente investigar meu site. Então, tudo que tem cgi-bin , admin , setup.php e assim por diante. Analisei anteriormente tudo o que gera erros 404 com algo como grep "HTTP/1.1\" 404" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n no meu access.log.

Assegurei que nenhuma das minhas urls tenha nenhuma dessas partes.

Portanto, após a instalação, criei jail.local e não fiz nada com jail.conf . Meu arquivo se parece com isso (eu 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

Eu também criei a pasta apache-script-bots.conf in filter.d , que tem apenas isso dentro:

[Definition]
failregex = (admin|setup.php|main.php|w00tw00t|web-console|.jsp|manager|cgi-bin)
ignoreregex =

Ao reiniciar o fail2ban, ele me mostra que está tudo bem. Mas quando tento testar se minha cadeia funciona tentando ativá-lo com: mydomain/main.php Vejo que não estou preso.

Quando eu verifico o status do fail2ban, ele me diz que minha cadeia está funcionando

fail2ban-client status
Status
|- Number of jail:  2
'- Jail list:       ssh, apache-script-bots

Eu assumo que o problema está na expressão regular, mas não consigo entender o porquê.

    
por Salvador Dali 14.05.2014 / 12:57

1 resposta

6

Você precisa dizer ao fail2ban (via regex) onde, na entrada de log, ele encontrará um <HOST> para que possa banir esse 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 acionadores relevantes em qualquer lugar na entrada do registro.

Você pode querer tentar algo como

<HOST> -.*(/w00tw00t|/main.php |setup.php )

que deve vincular algumas das strings a locais mais específicos

    
por 14.05.2014 / 13:24

Tags