Pessoal... Fiz essa pergunta no site StackExchange e me sugeriram que aqui seria melhor...
Tenho um site nginx que está recebendo muitos acessos para um arquivo inexistente "mydata.html". Esses acessos são registrados no log de acesso do site com códigos de status 301 (ou 302). Gostaria de saber como configurar uma jail Fail2ban que capturará esses acessos e banirá o IP se forem excessivos.
Aqui está um exemplo de registro do arquivo de log:
1.2.3.4 - - [02/Mar/2025:00:00:06 -0700] "GET /MyData.html HTTP/1.1" 301 185 "http://xxx.MySite.com/MyData.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, como Gecko) Chrome/125.0.0.0 Safari/537.36"
E minha tentativa de um regex para selecionar a entrada ^.*MyData.*HTTP.* 301
. Esse regex pode ser modificado para também obter os códigos 302 ou outros?
Alguém pode me dar alguma orientação, sou pior que um iniciante com expressões regex. Obrigado....RDK
Seu regex de exemplo começa com
^
, que denota o início de uma linha, mas sua linha de log começa com o IP do solicitante1.2.3.4 - - ...
, então não corresponderá totalmente a essa linha de log. Para que um filtro funcione, você precisa incluir o IP/host e combiná-lo com a sequência especial<HOST>
, explicada na documentação do fail2ban aqui: Developing Filters - Regular ExpressionsPara corresponder a vários códigos de status diferentes, você pode colocá-los em uma construção "ou"
(301|302)
ou simplesmente terminar sua regex com30
para corresponder a cada código 30x.Um filtro completo para seu log poderia ser assim: