En paginas con consultas pesadas o en servidores que no soporten una minima carga resulta tremendamente facil provocar que el servidor deje de responder lanzando una simple prueba de carga utilizando el comando
o cualquier otra herramienta decente para generar trafico HTTP.
Hay una tecnica para evitar ataques a nuestro servidor web Apache usando mod_evasive, un módulo de detección y evasion de ataques DoS. Y esta disponible tanto para Apache 1.x como para 2.x.
Se puede descargar desde aquí.
Lo descomprimimos con tar xzf y lo instalamos en nuestro Apache ejecutando:
apxs -c -a -i mod_evasive20.c – para Apache 2.x
apxs -c -a -i mod_evasive.c – para Apache 1.x
Revisamos que en nuestro httpd.conf exista:
LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so
Funciona de la siguiente forma: cada usuario que realiza una peticion a un proceso de Apache se almacena en una tabla en memoria. Si ese usuario excede de un cierto numero de peticiones en el intervalo definido, comienza a rechazar peticiones denegandole el acceso (les devuelve un codigo de error 403).
La configuracion es muy sencilla, y se puede situar tanto en un VirtualHost en particular, para un directorio o para el servidor en general.
DOSHashTableSize 3000 – Le indicamos el tamaño de la tabla donde almacenaremos los datos de los clientes.
DOSPageCount 25 – Indica el maximo numero de peticiones en el intervalo definido despues para una URI en concreto.
DOSSiteCount 100 – Lo mismo, pero para todo el sitio.
DOSPageInterval 7 – El intervalo de medida para una URI en concreto.
DOSSiteInterval 7 – El intervalo de medida para todo el sitio.
DOSBlockingPeriod 90 – El tiempo, en segundos, que va a estar bloqueada esa IP.
DOSWhitelist 127.0.0.1 micasa.com – ciertos dominios o IPs a los que no queremos que se deniegue nunca el servicio.
Hay un par de comandos mas que yo personalmente no activo.
DOSEmailNotify – Manda un mail a una cuenta de correo cada vez que se deniega el servicio a una IP.
DOSSystemCommand – cada vez que deneguemos el acceso a una IP, ejecutara un comando en el sistema, como por ejemplo, añadir una linea a iptables.
Para ver las IPs filtradas:
grep Blacklisting /var/log/messages
Comentarios recientes