Mod_evasive es un módulo para Apache que ayuda a prevenir ataques de denegación de servicio (DoS) y de fuerza bruta al detectar y bloquear múltiples solicitudes desde la misma dirección IP en un corto período de tiempo. Esta guía detalla cómo instalar, configurar y utilizar Mod_evasive en tu servidor Apache, incluyendo la configuración para hacer "whitelisting" de direcciones IP.
Paso 1: Instalación de Mod_evasive
En Ubuntu/Debian
Primero, actualiza el sistema y luego instala el módulo:
sudo apt-get update
sudo apt-get install libapache2-mod-evasive
En CentOS/RHEL
Habilita el repositorio EPEL e instala Mod_evasive:
sudo yum install epel-release
sudo yum install mod_evasive
Paso 2: Configuración de Mod_evasive
Crear el Archivo de Configuración
Crea o edita el archivo de configuración para Mod_evasive.
En Ubuntu/Debian
sudo nano /etc/apache2/mods-available/evasive.conf
En CentOS/RHEL
sudo nano /etc/httpd/conf.d/mod_evasive.conf
Configuración Básica
Añade las siguientes líneas al archivo de configuración para establecer los parámetros de Mod_evasive:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify you@example.com
DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
DOSLogDir "/var/log/mod_evasive"
DOSWhitelist 127.0.0.1
DOSWhitelist 192.168.1.*
</IfModule>
Descripción de los Parámetros
- DOSHashTableSize: Tamaño de la tabla hash utilizada por Mod_evasive. Un tamaño mayor puede mejorar el rendimiento.
- DOSPageCount: Número máximo de solicitudes permitidas a la misma página en el intervalo definido por
DOSPageInterval
. - DOSSiteCount: Número máximo de solicitudes permitidas al mismo sitio en el intervalo definido por
DOSSiteInterval
. - DOSPageInterval y DOSSiteInterval: Intervalo de tiempo en segundos para
DOSPageCount
yDOSSiteCount
, respectivamente. - DOSBlockingPeriod: Tiempo en segundos que una dirección IP será bloqueada si excede los límites.
- DOSEmailNotify: Dirección de correo electrónico donde se enviarán notificaciones de ataques.
- DOSSystemCommand: Comando del sistema que se ejecutará cuando se detecte un ataque.
- DOSLogDir: Directorio donde se guardarán los registros de Mod_evasive.
- DOSWhitelist: Direcciones IP que se deben excluir del bloqueo. Puedes especificar múltiples direcciones IP o rangos de IP.
Paso 3: Creación del Directorio de Registro
Asegúrate de crear el directorio de registro especificado en DOSLogDir
y asignar los permisos adecuados:
sudo mkdir /var/log/mod_evasive
sudo chown -R www-data:www-data /var/log/mod_evasive
Paso 4: Habilitar el Módulo y Reiniciar Apache
En Ubuntu/Debian
Habilita el módulo Mod_evasive y reinicia Apache:
sudo a2enmod evasive
sudo systemctl restart apache2
En CentOS/RHEL
Reinicia el servicio Apache para aplicar los cambios:
sudo systemctl restart httpd
Paso 5: Verificación de Funcionamiento
Para verificar que Mod_evasive está funcionando correctamente, puedes realizar una prueba con un script en Perl que simula múltiples solicitudes:
Crear el Script de Prueba
Crea un archivo llamado test_evasive.pl
con el siguiente contenido:
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
for (my $i=0; $i<100; $i++) {
my $response = $ua->get('http://tu-servidor-url');
print $response->status_line . "\n";
}
Ejecutar el Script de Prueba
Haz el archivo ejecutable y ejecútalo:
chmod +x test_evasive.pl
./test_evasive.pl
Si Mod_evasive está configurado correctamente, debería bloquear las solicitudes repetitivas y verás respuestas de error HTTP 403 Forbidden.
Conclusión
Mod_evasive es una herramienta eficaz para mitigar ataques DoS y de fuerza bruta en servidores Apache. Con la configuración adecuada, incluyendo la lista blanca de direcciones IP, puedes proteger tu servidor contra tráfico malicioso y asegurar que direcciones IP confiables no sean bloqueadas, mejorando así la seguridad y estabilidad de tus servicios web.