GNU/Linux >> Tutoriales Linux >  >> Cent OS

Bloquea los bots malos con Fail2ban

Fail2ban es una herramienta de seguridad versátil. Aunque se usa principalmente para prevenir ataques de fuerza bruta contra SSH, también se puede usar para proteger otros servicios.

Hay bots que escanean Internet y envían miles de solicitudes a los servidores web con la esperanza de encontrar vulnerabilidades. Esta publicación trata sobre cómo bloquear dichos bots con Fail2ban.

Suponemos que está utilizando Apache como su servidor web. Sin embargo, estas instrucciones se pueden personalizar fácilmente para nginx o cualquier otro servidor web.

Sin embargo, debe tener en cuenta que Fail2ban no es un firewall de aplicaciones web (WAF) y no puede bloquear solicitudes maliciosas si pasan. Esto se debe a que fail2ban toma medidas al monitorear los registros; Por lo tanto, se debe registrar al menos un intento malicioso antes de que Fail2ban pueda tomar alguna medida.

¿Qué es un bot malo de todos modos?

En esta publicación, nos centraremos en bloquear bots que hagan cualquiera de las siguientes cosas:

  • Busca en el sitio web un proxy abierto
  • Envía una solicitud GET con parámetros que. contienen cargas útiles de inyección SQL
  • Envía una solicitud GET con parámetros que. contienen cargas útiles de neurosis

Por supuesto, también puedes bloquear otros tipos de ataques. Sin embargo, nos limitamos a los tres casos mencionados anteriormente para este artículo.

Instalar Fail2ban

Fail2ban está disponible en el repositorio de la mayoría de las distribuciones.

Para instalarlo en Debian/Ubuntu ejecute:

sudo apt-get update
sudo apt-get install fail2ban

En CentOS, primero debe usar el repositorio EPEL; Entonces deberías activarlo e iniciarlo.

sudo yum -y install epel-release
sudo yum -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Conceptos básicos de Fail2ban

En el corazón del mecanismo de trabajo de Fail2ban se encuentran varias prisiones. En pocas palabras, una cárcel le indica a Fail2ban que mire una cantidad de registros y les aplique un filtro cada vez que cambie el registro. Si el número de coincidencias del filtro es igual al número máximo de coincidencias permitidas por la cárcel, se realiza una acción especificada en la cárcel.

Entonces necesitas definir dos cosas:un filtro y una cárcel. La cárcel está configurada para mirar los registros de Apache en busca de solicitudes maliciosas.

Definir filtros

Un filtro es simplemente una colección de expresiones regulares de Python que se comparan con un registro. Aquí tendríamos que definir filtros para los criterios descritos anteriormente.

Pero primero veamos una entrada en los registros de Apache:

66.249.79.189 - - [17/Jan/2017:14:10:41 +0000] "GET /robots.txt HTTP/1.1" 200 3494 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +https:
//www.google.com/bot.html)"

Observe que el encabezado de la solicitud GET /robots.txt HTTP/1.1 está entre comillas dobles. Si diseña tales reglas usted mismo, debe tener el cuidado suficiente para asegurarse de que solo coincida el encabezado de la solicitud. De lo contrario, corre el riesgo de bloquear a usuarios legítimos.

Las cargas útiles de inyección de SQL generalmente contienen cadenas de la forma union select(...) o select concat (...) . Así que puedes intentar hacer coincidir este patrón con la siguiente expresión regular:



(?i)^<HOST> -.*"[^"]+(?:union[^"]+select[^"]*|select[^"]+concat[^"]*)(?:%%2[8C]|[,(])

el <HOST> La parte define la posición de la dirección IP en la entrada de registro y el (?i) indica que la expresión regular no distingue entre mayúsculas y minúsculas.

el [^"] en la expresión regular garantiza que el texto coincidente esté entre comillas dobles. Esto garantiza que la expresión regular solo coincida con el encabezado de la solicitud y nada más. el (?:%%2[8C]|[,(]) indica que el union select o select concat una coma sigue en consecuencia (, ) o un corchete (( ), ya sea directamente o en su forma codificada por porcentaje.

A menudo, los bots que buscan proxies abiertos envían solicitudes en forma de:

101.33.59.9 - - [17/Jan/2017:14:10:41 +0000] "GET https://google.com/ HTTP/1.1" 400 3494 "-" "Mozilla"
101.33.59.9 - - [17/Jan/2017:14:10:44 +0000] "CONNECT yahoo.com:80" 400 3499 "-" "Mozilla"

Una expresión regular como la siguiente puede coincidir fácilmente con estas:

(?i)^<HOST> -.*"(?:(?:GET|POST|HEAD) https?:|CONNECT [a-z0-9.-]+:[0-9]+)

La expresión regular (?:(?:GET|POST|HEAD) https?: coincide con los requisitos del primer tipo, mientras que la expresión regular CONNECT [a-z0-9.-]+:[0-9]+ cumple con los requisitos del segundo tipo.

Los bots que buscan Shellshock a menudo envían solicitudes como:

10.11.12.13 - - [17/Jan/2016:16:00:00 +0000] "GET /cgi-bin/printenv.cgi HTTP/1.0" 200 1 "-" "() { test;};echo "Content-type: text/plain"; echo; echo; /bin/rm -rf /var/www/"

Una expresión regular como esta coincide con el patrón de Shellshock:

<HOST> -.*"()s*{[^;"]+[^}"]+}s*;

Aquí los revisamos () { <command>; } Patrón y el s tiene en cuenta los espacios que pueden incluirse en la solicitud maliciosa.

Si los combinamos ahora podemos escribir nuestro filtro:

[Definition]
failregex = <HOST> -.*"()s*{[^;"]+[^}"]+}s*;
            (?i)^<HOST> -.*"[^"]+(?:union[^"]+select[^"]*|select[^"]+concat[^"]*)(?:%%2[8C]|[,(])
            (?i)^<HOST> -.*"(?:(?:GET|POST|HEAD) https?:|CONNECT [a-z0-9.-]+:[0-9]+)
ignoreregex =

el ignoreregex le permite incluir elementos en la lista blanca. Puede agregar expresiones regulares ignoradas tal como se hizo para failregex.

Guarde el filtro anterior en /etc/fail2ban/filter.d/badbot.local

Definir la prisión

Ahora que ha definido el filtro, es hora de definir la cárcel. Aquí bloqueamos la dirección IP durante seis minutos si envía tres solicitudes de este tipo en seis minutos.

Añade esto al tuyo /etc/fail2ban/jail.local Archivo:

[badbot]
enabled   = true
port      = http,https
filter    = badbot
logpath   = /var/log/apache*/*access.log
maxretry  = 3
banaction = iptables-multiport
findtime  = 360
bantime   = 360

Una vez que haya configurado la cárcel, debe reiniciar fail2ban para que estos cambios surtan efecto. Dependiendo de su distribución, se requerirá uno de estos comandos para reiniciarlo:

sudo systemctl restart fail2ban
sudo service fail2ban restart

fail2ban ahora bloquea todos los intentos de bots malos que intentan atacar su servidor web. Puede extender estas reglas a su otro servidor web o cualquier otro tipo de ataque que pueda ver.




Cent OS
  1. Seguridad Linux:Proteja sus sistemas con fail2ban

  2. Debian – ¿Cómo bloquear non-free con las preferencias de Apt?

  3. Instalar Fail2ban en CentOS

  4. Cómo proteger Apache y SSH con Fail2Ban en CentOS 8

  5. Cómo instalar Fail2ban con Firewalld en Rocky Linux 8

Configurar el servidor BMC para que funcione con un nuevo bloque de IP públicas

Cómo instalar Fail2ban con Firewalld en Rocky Linux 8.4

Configure OpenDMARC con Postfix en CentOS/RHEL para bloquear la falsificación de correo electrónico

Cómo instalar Fail2ban con Firewalld en AlmaLinux 8

Cómo proteger SSH con Fail2Ban

Cómo bloquear una IP específica Conexión a un servidor con firewall-cmd