fail2ban jail não está funcionando corretamente

2

Estou tentando bloquear solicitações de script não disponíveis para o nginx com o 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 um hit se o referenciador no log de acesso contiver a tag de script. Por exemplo, esta linha: (Eu ofusquei o IP e o referer, e eu trunquei em 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 .asp etc na seção GET /xxxxx HTTP ?

    
por stUrb 16.12.2013 / 23:12

1 resposta

0

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

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

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

Para isso, você deve tentar isto:

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

Algo como isso deve funcionar muito bem. Se, de qualquer forma, isso não funcionar, agora você sabe qual é o problema, e tenho certeza de que você pode consertar isso com um pouco de expressão regular.

Espero que isso tenha ajudado.

    
por 18.12.2013 / 04:02