Bloquear ataques DDos con Fail2ban

Bloquear ataques DDos con Fail2ban.

Bloquear ataques DDos (ataque de denegación de servicio) a gran escala, no es tarea sencilla, por no decir imposible. Para lograrlo deberíamos contar con una tremenda estructura tanto a nivel de red como de hardware, que lograra redireccionar las peticiones malignas.

Estos ataques a gran escala no suelen dirigirse a pequeños sitos web, sus victimas son grandes empresas o corporaciones. Aun así, nadie esta libre de recibir un ataque ddos a menor escala, y claro… lo mejor es prevenir.

Fail2ban es una excelente herramienta contra intrusiones, y aunque no está especialmente diseñada para bloquear ataques ddos, si que nos puede ayudar. En este articulo vemos como configurar correctamente Fail2ban para tal efecto.

 

Bloquear ataques DDos con Fail2ban

Si recuerdas el articulo anterior, las reglas de Fali2ban se basan en jails (jaulas). Así que nos aseguramos que tenemos en /etc/fail2ban/jail.local el jail ssh bien configurado.

[ssh-ddos]
enabled  = true
port     = ssh
filter   = sshd-ddos
logpath  = /var/log/auth.log
maxretry = 3

Pero claro… normalmente un ataque ddos no se dirige a ssh, atacan a http (apache). Tenemos un problema, de manera predeterminada Fail2ban no viene con ninguna regla para proteger Apache. No te preocupes Fail2ban nos permite crear nuestro jail personalizado.

Copia y pega lo siguiente:

[http-get-dos]
enabled = true
port = http,https
filter = http-get-dos
logpath = /var/log/apache*/*access.log
maxretry = 300
findtime = 300
bantime = 600
action = iptables[name=HTTP, port=http, protocol=tcp]

Guarda el archivo y cierra el editor.

Ahora necesitamos establecer el nuevo filtro http-get-dos.

cd /etc/fail2ban/filter.d

Creamos el archivo filtro.
sudo nano http-get-dos.conf

Copia y pega lo siguiente:
# Fail2Ban configuration filter httpd
#
#
[Definition]
# Option: failregex
# Note: This regex will match any GET entry in your logs, so basically all valid and not valid entries are a match.
# You should set up in the jail.conf file, the maxretry and findtime carefully in order to avoid false positives.
failregex = ^<HOST> -.*"(GET|POST).*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Guarda el archivo y cierra el editor.

Necesitamos reiniciar fail2ban.

sudo service fail2ban restart

Como ultimo apunte puedes verificar que fail2ban esta trabajando de manera correcta.
cat /var/log/fail2ban.log

ejemplo de salida…

[root@host ~]# cat /var/log/fail2ban.log
2019-10-20 03:29:03,830 fail2ban.server [3623]: INFO rollover performed on /var/log/fail2ban.log
2019-10-20 03:31:35,249 fail2ban.filter [3623]: INFO [proftpd] Found 115.226.132.151 – 2019-10-20 03:31:35
2019-10-20 03:31:35,600 fail2ban.actions [3623]: NOTICE [proftpd] Ban 115.226.132.151
2019-10-20 03:33:50,927 fail2ban.filter [3623]: INFO [ssh] Found 106.12.109.188 – 2019-10-20 03:33:50
2019-10-20 03:33:53,636 fail2ban.filter [3623]: INFO [ssh] Found 106.12.109.188 – 2019-10-20 03:33:53
2019-10-20 03:33:54,329 fail2ban.actions [3623]: NOTICE [ssh] Ban 106.12.109.188
2019-10-20 03:33:54,340 fail2ban.filter [3623]: INFO [apache] Found 106.12.109.188 – 2019-10-20 03:33:54

Espero que este articulo te sea de utilidad, puedes ayudarnos a mantener el servidor con una donación (paypal), o también colaborar con el simple gesto de compartir nuestros artículos en tu sitio web, blog, foro o redes sociales.

 

Una respuesta

  1. Henry
    21/10/2019

Agregar comentario