La cárcel fail2ban no funciona correctamente

La cárcel fail2ban no funciona correctamente

Estoy intentando bloquear solicitudes de scripts no disponibles para nginx con 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 =

Pero esto también crea un acierto si la referencia en el registro de acceso contiene la etiqueta script. Por ejemplo, esta línea: (He ofuscado la IP y el referente, y los trunqué en varias líneas; en el registro real, estas 4 líneas están en una sola línea).

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"

¿Cómo puedo cambiar la expresión regular para encontrar solo .aspetc en la GET /xxxxx HTTPsección?

Respuesta1

Bueno, hay cosas muy interesantes en las expresiones regulares, que las expresiones regulares son codiciosas.

Incluso si obtienen el partido al comienzo de la oración, seguirán buscando e irán por el último partido disponible en la oración. En su caso, coincide con este "referrer.com/default.aspx", porque tiene una expresión regular que coincide con .asp y también coincidirá con cualquier cosa con .asp*.

Por lo tanto, debes ser muy específico al trabajar con expresiones regulares.

Para esto, deberías probar esto:

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

Algo como esto debería funcionar muy bien. Si en algún caso no funciona, ahora sabes cuál es el problema y estoy seguro de que puedes solucionarlo investigando un poco en expresiones regulares.

Espero que esto haya ayudado.

información relacionada