A prisão fail2ban não está funcionando corretamente

A prisão fail2ban não está funcionando corretamente

Estou tentando bloquear solicitações de script não disponíveis para nginx com fail2ban.

# Noscript filter /etc/fail2ban/filter.d/nginx-noscript.conf:
#
# Block IPs trying to execute scripts such as .php, .pl, .exe and other funny scripts.
#
# Matches e.g.
# 192.168.1.1 - - "GET /something.cgi
#
[Definition]
failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\scgi)
ignoreregex =

Mas isso também cria uma ocorrência se o referenciador no log de acesso contiver a tag de script. Por exemplo, esta linha: (ofusquei o IP e o referenciador e trunquei várias linhas; no log real, essas 4 linhas estão em uma linha.)

1.2.3.4 - - [16/Dec/2013:18:01:10 +0100] "GET / HTTP/1.1" 
301 178 "http://referrer.com/default.aspx" 
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.41 Safari/537.36"

Como posso alterar o regexp para encontrar apenas o .aspetc na GET /xxxxx HTTPseção?

Responder1

Bem, há coisas muito interessantes nas expressões regulares, que as expressões regulares são gananciosas.

Mesmo que consigam a correspondência no início da frase, continuarão procurando e irão para a última correspondência disponível na frase. No seu caso, corresponde a "referrer.com/default.aspx", porque você tem uma expressão regular para corresponder a .asp e também corresponderá a qualquer coisa com .asp *.

Portanto, você precisa ser muito específico ao trabalhar com expressões regulares.

Para isso, você deve tentar o seguinte:

failregex = ^<HOST> -.*GET.*(\.asp|\.exe|\.pl|\.cgi|\scgi)\"\s\d*

Algo assim deve funcionar muito bem. Se, de qualquer forma, não funcionar, agora você sabe qual é o problema e tenho certeza de que pode corrigi-lo pesquisando um pouco na expressão regular.

Espero que isso tenha ajudado.

informação relacionada