En la entrada de hoy voy a explicar cómo proteger Apache contra ataques DDoS mediante el módulo mod_evasive. Por supuesto, si el ataque es exageradamente grande, nunca podremos parar el mismo desde el servidor, pero para pequeños ataques de saturación, este módulo es muy efectivo.
La instalación del módulo es muy sencilla, primero revisamos que tenemos el repositorio EPEL activo en nuestro servidor CentOS, si no, lo instalamos:
yum install epel-release
Seguidamente, instalamos el módulo:
yum install mod_evasive
Y comprobamos que Apache lo ha cargado:
apachectl -M | grep evasive evasive20_module (shared)
Tras esto, reiniciamos apache.
Ahora, debemos configurar el mismo mediante el fichero de configuración /etc/httpd/conf.d/mod_evasive.conf, las variables más importantes son:
DOSPageCount: Controla el numero de request para la misma pagina (miweb.com/index.php) por intervalo de paginas
DOSSiteCount: Controla el total de peticiones para un mismo objeto (imagenes, css, etc) por intervalo
DOSPageInterval: Intervalo establecido para la carga de páginas en segundos, funciona junto a DOSPageCount, es decir, aquellos que accedan a más de X páginas en X intervalo serán bloqueados
DOSSiteInterval: Intervalo establecido para la carga del sitio, funciona en conjunto a DOSSiteCount, es decir, aquellos que accedan a más de X objetos en X intervalo serán bloqueados.
DOSBlockingPeriod: Duración del bloqueo
DOSEmailNotify: Notificar los bloqueos por correo.
DOSLogDir: Directorio donde guardará los registros de la IP que bloquea.
DOSWhitelist: Si queremos meter en lista blanca, podemos poner una IP o Rango.
En mi caso, la configuración es:
DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 15 DOSSiteInterval 15 DOSBlockingPeriod 600 DOSEmailNotify [email protected] DOSLogDir "/var/log/mod_evasive" DOSWhitelist 127.0.0.1 DOSWhitelist 127.0.0.*
Con esto, se bloqueará durante 10 minutos a aquellas IPs que excedan 2 peticiones de página o 50 de sitio en un periodo de 15 segundos en ambos casos.
Para verificar que funciona, existe un script que podemos probar en:
perl /usr/share/doc/mod_evasive-1.10.1/test.pl
Si recibimos un 403, funciona correctamente.
Por último, en /tmp se guarda un log con cada una de las IPs bloqueadas.
¡Un saludo!
0 comentarios