Si deseas prevenir un ataque de Denegación de servicio (DoS) cuyo objetivo es colapsar el servidor durante un periodo de tiempo para que este no esté en funcionamiento, ahora bien, si nuestro servidor es Apache podemos contar con el módulo llamado mod_evasive.
El módulo de seguridad para Apache, mod_evasive cuyo propósito no es otro que el de prevenir o anular ataques de Denegación de Servicio o de fuerza bruta basados en peticiones masivas al servidor de páginas web (HTTP DoS). A través del módulo tendremos la posibilidad de redirigir el tráfico malicioso hacia otra aplicación de control que terminará de filtrar las peticiones (firewalls, scripts personalizados, …).
El funcionamiento de mod_evasive se basa en la prevención de ataques mediante la comparación de la IP solicitante con una tabla dinámica que registra las páginas accedidas a nuestro servidor que provienen de dicha IP y la frecuencia de accesos. En el preciso instante en que una máquina solicita una dirección del servidor Apache, mod_evasive filtrará cualquier dirección IP que cumpla con los siguientes requisitos:
* La IP está en la lista de direcciones a filtrar.
* La IP cliente ha solicitado la misma dirección más veces que la cantidad máxima especificada en el fichero de configuración.
* El número de peticiones de la IP cliente excede del máximo permitido en un intervalo de tiempo predeterminado en la configuración.
Si una IP resulta filtrada por cumplir con alguna de las condiciones anteriores, recibirá un código 403 (Forbidden) en respuesta a su petición y le será denegado el acceso durante un periodo de tiempo configurable.
Ahora viene la parte interesante que es la instalación y configuración, antes de empezar debemos de contar con las herramientas necesarias para compilar programas en Linux y en especial para Apache, en este caso estamos usando una versión estilo apt (Debian, Ubuntu…)
apt-get install apache2-prefork-dev gcc
Despues procedemos a descargar el codigo fuente que encontramos en la página oficial del proyecto mod_evasive: http://www.zdziarski.com/projects/mod_evasive (al momento de escribir esta nota la versión es la 1.10.1)
Ahora procedemos a descargar y descompactar el codigo, de preferencia en la carpeta temporal /temp
wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
tar xvzf mod_evasive_1.10.1.tar.gz
cd mod_evasive
/usr/bin/apxs2 -i -c mod_evasive20.c
Ahora vamos a crear el archivo de configuración de Apache2 dentro de la carpeta mods-enabled
nano /etc/apache2/mods-available/evasive.load
Y dentro del archivo ponemos la siguiente linea, que es donde esta nuestro modulo compilado (mod_evasive20.so)
LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so
Despues sigue ligar la carpeta mods-available con los mods-enabled
ln -s /etc/apache2/mods-available/evasive.load /etc/apache2/mods-enabled/evasive.load
Y listo, solo falta configurar los parametros, tomando en cuenta la siguiente descripción:
* DOSHashTableSize
* DOSPageCount
* DOSSiteCount
* DOSPageInterval
* DOSSiteInterval
* DOSBlockingPeriod
* DOSEmailNotify
* DOSSystemCommand
DOSSystemCommand “/sbin/iptables -I INPUT -p tcp –dport 80 -s %s -j DROP”
O bien!! bloquear todooo el acceso al servidor, esto esta mejor.
DOSSystemCommand “sudo -u root /sbin/iptables -A INPUT -s %s -j DROP”
* DOSLogDir
* DOSWhitelist
DOSWhitelist 66.249.65.*
DOSWhitelist 66.249.66.*
Y bien, ya que conocen que significa cada parametro, aquí esta una configuración opcional que se debe de guardar en el archivo /etc/apache2/conf.d/evasive
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
#DOSEmailNotify cliente@servidor.com
#DOSSystemCommand «/sbin/iptables -I INPUT -p tcp –dport 80 -s %s -j DROP»
DOSSystemCommand «echo %s >> /tmp/mod_doesevasive.log»
#GoogleBot
DOSWhitelist 66.249.65.*
DOSWhitelist 66.249.66.*
Y para probar si realmente funciona todo, en la carpeta donde descompactamos el tar.gz viene un archivo llamado test.pl, solo es cosa de ejecutarlo con:
perl test.pl
Y despues de ciertas peticiones vamos a ver el famoso error HTTP/1.1 403 Forbidden y listo!!, eso significa que todo funciona a la perfección, ahora ya tenemos un Apache un poco mas protegido!..