Asegura tu servidor apache contra ataques DoS y DDoS.

Share on facebook
Share on twitter
Share on linkedin

En la actualidad, es necesario para las empresas de software, estar preparadas contra las amenazas que pueden realizar interrupciones en el servicio, generando penalizaciones y pérdidas para la empresa por las afectaciones a sus clientes.

Uno de los ataques más populares es el de denegación de servicio, en el cual se realizan peticiones de manera masiva a un recurso de un servidor web para saturar el servidor o el ancho de banda, ocasionando  la inaccesibilidad del servicio.

Formalmente un ataque de denegación de servicio es una amenaza a un sistema de computadoras o red que causa que un servicio o recurso sea inaccesible a los usuarios legítimos. Este tipo de ataques provoca que el servidor se quede sin ciclos de procesamiento, memoria o ancho de banda, lo que hace que el sitio web se bloquee.

Existen dos técnicas en estos tipos de ataques: la denegación de servicio (DoS por sus siglas en inglés) y la denegación de servicio distribuido (DDoS por sus siglas en inglés), la diferencia entre ambas es el numero de servidores o IP’s que realizan el ataque.

Mod_evasive es un modulo de apache que mantiene una tabla dinámica con las páginas solicitadas por las distintas IP’s que realizan peticiones a tu servidor web, y permite ejecutar acciones cuando una misma IP solicita el mismo recurso más de n veces en cierto numero de segundos. La acción por default que ejecuta el mod_evasive es, una vez superado el numero máximo de requests por segundo permitidos, bloquea durante una cantidad de tiempo (segundos) a la IP del cliente devolviendo un error 403 (Forbidden) a la petición HTTP.

Prerrequisitos:

  • Ubuntu 16.04 o mayor
  • Servidor Web Apache 2.4
  • Cuenta con privilegios sudo

Instalar mod_evasive en apache

Paso 1: Actualizar la lista de paquetes

sudo apt-get update

Paso 2: Instalar paquetes necesarios

sudo apt-get install apache2-utils

Paso 3: Instalar mod_evasive

sudo apt-get install libapache2-mod-evasive

Podemos comprobar si está habilitado el módulo con el siguiente comando

apachectl -M | grep evasive

Si todo esta bien, debemos obtener este mensaje

 evasive20_module (shared)

Paso 4: Configurar el modulo mod_evasive

Abra con su editor de preferencia el archivo de configuración

sudo nano /etc/apache2/mods-enabled/evasive.conf

Vera un archivo como éste

DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify mail@yourdomain.com
DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"
DOSLogDir "/var/log/apache2/"

Vamos a desglosar cada opción

DOSHashTableSize: Tamaño de la tabla hash utilizada para el seguimiento de la actividad de cada dirección IP. Aumentar el tamaño de la tabla mejora la velocidad a costa de recursos del servidor (memoria RAM).

DOSPageCount: Indica el numero de solicitudes para una página individual que activa la lista negra. El valor predeterminado es 2.

DOSSiteCount: Numero de solicitudes para el mismo sitio por la misma dirección IP. El valor Predeterminado es 50.

DOSPageInterval: Numero de segundos para DOSPageCount. Por defecto, esto se establece en 1 segundo. Eso significa que si no lo cambia, solicitar 2 páginas en 1 segundo pondrá temporalmente en una lista negra una dirección IP.

DOSSiteInterval: Especifica el numero de segundos para DOSSiteCount. Por defecto, esto se establece en 1 segundo. Eso significa que si una sola dirección IP solicita 50 recursos en el mismo sitio web en un solo segundo, se incluirá temporalmente en la lista negra.

DOSBlockingPeriod: Establece la cantidad de tiempo(segundos) que una IP permanecerá en la lista negra. El valor predeterminado es de 10 segundos.

DOSEmailNotify: Email al que enviara la alerta con la IP bloqueada.

DOSSystemCommand: Permite especificar un comando del sistema que se ejecutará cuando se agregue una dirección IP a la lista negra. Se puede usar esto para iniciar un comando y agregar una dirección IP a un firewall o filtro IP.

DOSLogDir: De forma predeterminada, está configurado para escribir registros en /var/log/mod_evasive. Estos registros se pueden revisar más tarde para evaluar el comportamiento del cliente.

Se puede crear un nuevo directorio para guardar estos logs; asegurándose de cambiar el propietario a Apache y luego actualizar la ubicación en la entrada DOSLogDir.

sudo mkdir /var/log/apache/mod_evasive
sudo chown –R apache:apache /var/log/apache/mod_evasive
sudo nano /etc/apache2/mods-enabled/evasive.conf
DOSLogDir "/var/log/apache/mod_evasive"

Solo nos queda reiniciar nuestro servidor apache para cargar las nuevas configuraciones.

sudo systemctl restart apache2

De igual manera podemos probar nuestra configuración con el test incluido en el propio modulo mod_evasive.

perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl

Si todo ha ido bien deberíamos tener una salida como ésta:

HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden

Si por alguna razón el script devuelve errores con status 400 Bad Request, se realizan las siguientes instrucciones:

sudo nano /usr/share/doc/libapache2-mod-evasive/examples/test.pl

Se localiza la siguiente línea:

print $SOCKET "GET /?$_ HTTP/1.0\n\n";

Y se cambia por lo siguiente:

print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1\r\n\r\n";

Se guarda y cierra el archivo, para proceder a ejecutar de nuevo el script.

Esta es una guía básica para la instalación de mod_evasive en tu servidor web Apache. El módulo mod_evasive es una excelente utilidad para detectar y bloquear direcciones IP que se utilizan en un ataque de denegación de servicio. Lo hace colocando direcciones IP sospechosas en una lista negra temporal y manteniéndolas allí si continúan su comportamiento.

Es muy importante tener en cuenta los valores que configuramos para evitar falsos positivos, sobre todo en proyectos como WordPress es muy común bloquear usuarios legítimos por una configuración agresiva.

Si deseas más información sobre este modulo te invito a visitar la documentación oficial.

Share on facebook
Share on twitter
Share on linkedin

No hay comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¡Conozcámonos mejor!

Te haremos llegar las novedades de SoldAI, ofertas exclusivas, notificaciones, y mucho más.

¡Deja tu correo, tenemos mucho que contarte!