Proteger un servidor de ataques DDos con mod_evasive

Proteger un servidor de ataques DDos con mod_evasive.

El tipo más común de ataque a un servidor o VPS es el DDos. La forma de operar de estos ataques es, lanzar repetidas solicitudes contra un servidor desde varios sistemas a la vez. Si son excesivas, la maquina receptora se queda sin ciclos de procesamiento, memoria o ancho de banda de red y, el sistema se bloquea de manera irreversible hasta que no pueda levantarse por si sola.

Es evidente que contra ataques de millones de clientes, no existe forma de pararlo, también te digo que esto no es común. Lo normal es que se lancen unos cientos, tal vez unos pocos miles. Para esto tenemos una solución, tenemos el módulo de Apache «mod_evasive».

La utilidad mod_evasive supervisa las solicitudes entrantes del servidor, incluyendo las que son sospechosas. Por ejemplo.

  • Detecta el exceso de solicitudes a una página en concreto por segundo.
  • Más de 50 solicitudes simultáneas por segundo las considera sospechosas.
  • Esta pendiente de la repetición de solicitudes desde una ip que ya está en la lista negra.

Al detectar un ataque, el módulo de apache envía un error 403 a la máquina cliente. Al proteger un servidor de manera predeterminada, bloquea las ip afectadas durante 10 segundos, pero este valor es modificable.

Hoy veremos como instalar y configurar mod_evasive, en nuestro servidor con CentOS o Debian / Ubuntu y derivados. Proteger un servidor contra DDos.

 

Proteger un servidor de ataques DDos con mod_evasive

Antes de comenzar debes tener presente que «mod_evasive», es un módulo de Apache (instalado y corriendo). No funciona con un servidor Nginx, pero si en Apache + Nginx. Vemos como instalar el módulo.

Instalar mod_evasive en Debian / Ubuntu

sudo apt-get install apache2-utils

sudo apt-get install libapache2-mod-evasive

Instalar mod_evasive en CentOS

sudo yum install epel-release
sudo apt update

sudo yum install httpd-devel

sudo yum install mod_evasive

Ejemplo…

[root@solo-linux ~]# sudo yum install mod_evasive
Complementos cargados:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.niif.hu
 * epel: mirrors.coreix.net
 * extras: ftp.rezopole.net
 * remi: mirror.netweaver.uk
 * remi-php74: mirror.netweaver.uk
 * remi-safe: mirror.netweaver.uk
 * remi-test: mirror.netweaver.uk
 * updates: mirrors.ukfast.co.uk
Resolviendo dependencias
--> Ejecutando prueba de transacción
---> Paquete mod_evasive.x86_64 0:1.10.1-22.el7 debe ser instalado
--> Resolución de dependencias finalizada

Dependencias resueltas

================================================================================
 Package             Arquitectura   Versión                  Repositorio  Tamaño
================================================================================
Instalando:
 mod_evasive         x86_64         1.10.1-22.el7            epel          26 k

Resumen de la transacción
================================================================================
Instalar  1 Paquete

Tamaño total de la descarga: 26 k
Tamaño instalado: 56 k
Is this ok [y/d/N]: y
Downloading packages:
mod_evasive-1.10.1-22.el7.x86_64.rpm                                                                   |  26 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Instalando    : mod_evasive-1.10.1-22.el7.x86_64                                                                        1/1 
  Comprobando   : mod_evasive-1.10.1-22.el7.x86_64                                                                        1/1 

Instalado:
  mod_evasive.x86_64 0:1.10.1-22.el7                                                                                          

¡Listo!

Proteger un servidor de ataques DDos con mod_evasive

 

Configurar mod_evasive

Proteger un servidor con mod evasive

Proteger un servidor con mod_evasive

Configurar mod_evasive en Debian / Ubuntu
sudo nano /etc/apache2/mods-enabled/evasive.conf
Configurar mod_evasive en CetOS y derivados
sudo nano /etc/httpd/conf.d/mod_evasive.conf

Al acceder al archivo, nos encontramos con las siguientes opciones configurables.

DOSHashTableSize 3097

DOSPageCount 2

DOSSiteCount 50

DOSPageInterval 1

DOSSiteInterval 1

DOSBlockingPeriod 10

DOSEmailNotify usuario@mimail.com

DOSLogDir "/var/log/apache2/"

Puedes configurar los valores según tus necesidades, pero ten en cuenta que para máquinas con un tráfico normal, los valores por defecto son aceptables. Vemos el detalle explicativo.

  • DOSHashTableSize: Este valor asigna espacio para ejecutar las operaciones de búsqueda. Al aumentar el tamaño, mejora la velocidad a costa de un mayor consumo de memoria.
  • DOSPageCount: Número de solicitudes a una página concreta para ingresar una ip a la lista negra.
  • DOSSiteCount: Número de solicitudes al sitio para ingresar una ip a la lista negra.
  • DOSPageInterval: Número de segundos que calcula el umbral de accesos a una página en particular de una ip.
  • DOSSiteInterval: Número de segundos que calcula el umbral de accesos a un sitio de una ip.
  • DOSBlockingPeriod: Tiempo en segundos que una ip permanece en la lista negra.
  • DOSEmailNotify: Puedes des comentar la línea e introducir tu email. El módulo te avisará en cada bloqueo.
  • DOSSystemCommand: Por si quieres ejecutar un comando específico al detectar un ataque.
  • DOSLogDir: Por si quieres modificar la ruta donde se guardan los logs.
  • DOSWhitelist: Lista blanca de ip’s.

 

Una vez tengamos configurado el archivo, lo guardas. Para proteger un servidor de ataques DDos, tan solo nos falta recargar los módulos de Apache, o reiniciar el mismo.

Reiniciar http en Debian / Ubuntu
sudo systemctl reload apache2
Reiniciar http en CentOS
sudo systemctl restart httpd.service

 

Nota final

Para proteger un servidor con este módulo, es requisito indispensable utilizar iptables o nftables. Si usas las herramientas firewalld o UFW, debes deshabilitarlas.

# En CentOS
systemctl stop firewalld
systemctl disable firewalld

# En Ubuntu
systemctl stop udw
systemctl disable ufw

Instalamos y habilitamos el nuevo servicio de iptables.

# En CentOS
sudo yum update && yum install iptables-services
sudo systemctl enable iptables
sudo systemctl start iptables

# En Ubuntu
sudo apt update && apt install iptables-services
sudo apt systemctl enable iptables
sudo apt systemctl start iptables

Reinicia el servidor o VPS.

sudo reboot

 

Canales de Telegram: Canal SoloLinux – Canal SoloWordpress

Espero que este artículo 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. Proteger un servidor de ataques DDos con mod_evasive.

 

4 Comentarios

  1. Ricardo Ugalde
    19/08/2020
    • Sergio G.B.
      20/08/2020
  2. Enrique
    19/08/2020
    • Sergio G.B.
      20/08/2020

Agregar comentario