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

Deja una respuesta

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