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

ab - apache Benchmark

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

Fuente: http://vlan7.blogspot.com/