Apache y mod_evasive

¿Qué es Mod Evasive?

Vamos a hablar un poco de este famoso módulo de Apache.

Apache Evasive Maneuvers Module
A module for Apache (both 1.3 and 2.0) giving Apache the ability to detect and fend off request-based DoS/DDoS attacks and brute-force attacks conserving your system resources and bandwidth. This tool can be configured to report abusers and even talk to network gear (such as a firewall or ipchains).

Uno de los más famosos mods de toda la comunidad, creado por Zdziarski, este mod_evasive, es usado por cientos de webs.

A estas alturas no sirve de nada presentarlo. Voy a explicar brevemente los pasos para poder utilizarlo en un sistema RedHat, Centos. Tuve la incógnita de como se podía hacer partiendo de una instalación de apache, creada a partir de yum y el repositorio de RedHat. Lo único que necesitamos es instalar el paquete httpd-devel:


# wget mod_evasive
# gunzip mod_evasive_1.10.1.tar.gz
# tar xf mod_evasive_1.10.1.tar

Actualización:

Mod Evasive 1.10.1

Necesitamos el binario apxs, para poder compilar el mod. Instalamos el paquete httpd-devel:

# yum install httpd-devel

El archivo está localizado en:

/usr/sbin/apxs

Ahora, vamos a ver como compilarlo. Léemos directamente del archivo de instalación. Hay 2 archivos diferentes según nuestra versión de Apache, mod_evasive.c para el apache v1.3 y mod_evasive20.c para Apache v2.X. Leemos directamente del “README” del mod:

1. Extract this archive
2. Run $APACHE_ROOT/bin/apxs -i -a -c mod_evasive20.c
3. The module will be built and installed into $APACHE_ROOT/modules, and loaded
4. Restart Apache
No hace falta que lo hagamos, pero como no tenemos el /bin/apxs dentro del $APACHE_ROOT creamos un enlace simbólico y entonces ejecutamos.

# ln -s /usr/sbin /etc/httpd/bin
# /etc/httpd/bin/apxs -i -a -c mod_evasive20.c

El modulo se guardará en $APACHE_ROOT/modules y se modificará automáticamente el httpd.conf para cargar el modulo. Lo siguiente es editar el archivo de configuración de apache para configurar el mod. Incluimos el siguiente trozo de código:

DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10

Este código de configuración es sólo el que viene por defecto. El mod permite incluso interactuar con Iptables para banear ips por firewall. Por ejemplo, podemos configurar rangos de ips “blancas”, seguras, que sabemos que no van a ser focos potenciales de ataques de DDos.

DOSWhiteList 127.0.0.1
DOSWhiteList 195.168.160.*

La lista de ips baneadas, se incluirá en el syslog del sistema, concretamente, en /var/log/messages. Sólo nos queda ya reiniciar apache.

Una vez tengamos todo configurado, podemos utilizar un script en perl para comprobar si mod_evasive hace su trabajo.

# perl test.pl

[...]
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
[...]

Cuando mod_evasive detecta que el umbral de conexiones ha sido rebasado, añadirá la ip a la lista de bloqueados.

IfModule mod_evasive20.c

DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
DOSLogDir "/var/log/httpd/"
DOSEmailNotify email@email.com
DOSSystemCommand "/sbin/iptables -I INPUT -p tcp -dport 80 -s %s -j DROP"

Links

One thought on “Apache y mod_evasive

Leave a Reply

Your email address will not be published. Required fields are marked *