Inicio arrow Artículos arrow Seguridad arrow Bloquear ataques DoS con mod_evasive
Menú Principal
Lo más leído
Consigue Firefox
Usuarios
957 registrados
1 hoy
1 esta semana
58 este mes
Último: czar...
Formulario de acceso



... Regenerar clave
... Registro
Bloquear ataques DoS con mod_evasive Imprimir E-Mail
viernes, 06 de octubre de 2006

Una ataque de Denegación de Servicio, por su concepción, es dificil de parar si su único objetivo es colapsar el sistema durante cierto tiempo. Sin embargo, cuando estos ataques van dirigidos contra servidores instalados en la máquina, podemos utilizar herramientas de lo más variadas para intentar paliar sus efectos. Una de esas herramientas, destinada a proteger al servidor Apache de ataques DoS, es el módulo mod_evasive.

mod_evasive es un módulo de seguridad programado para cargarse con el servidor Apache y 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, programas personalizados, enrutadores, ...).


Funcionamiento

mod_evasive basa su funcionamiento 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 por 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.


Instalación

Podemos descargar la última versión de mod_evasive en la dirección http://www.zdziarski.com/projects/mod_evasive. La instalación y posterior activación se ha de realizar mediante los scripts apxs de Apache y, a priori, no debería ser demasiado complicado. Observemos a continuación un detalle del proceso de instalación:

[root@annie ~]# cd /usr/local/src/
[root@annie src]# wget http://www.zdziarski.com/... /mod_evasive_1.10.1.tar.gz

00:02:58 (48.74 KB/s) - `mod_evasive_1.10.1.tar.gz' saved [20454/20454]

[root@annie src]# tar -zxf mod_evasive_1.10.1.tar.gz
[root@annie src]# cd mod_evasive
[root@annie mod_evasive]# apxs -cia mod_evasive20.c

chmod 755 /usr/lib/httpd/modules/mod_evasive20.so
[activating module `evasive20' in /etc/httpd/conf/httpd.conf]

El comando apxs suele venir incluido en el paquete de desarrollo (devel) a partir de la versión 2 del servidor Apache, así que tendremos que instalarla si aún no lo está (por ejemplo, en Fedora Core, dicho paquete se referencia como httpd-devel).

Una vez instalado el programa, habrá que reiniciar Apache para cargar el módulo con su configuración por defecto.


Configuración

El script de instalación ya escribe por sí mismo una línea en el fichero de configuración de Apache (httpd.conf) que se encargará de cargar el módulo la próxima vez que el servidor sea reiniciado. Aún así es recomendable que miremos en dicho fichero la siguiente ocurrencia (la ruta hacia la librería puede variar dependiendo de la distribución):

LoadModule evasive20_module   /usr/lib/httpd/modules/mod_evasive20.so

Esta línea se encarga de lanzar el módulo con los parámetros por defecto. Dichos parámetros son más que suficientes en condiciones "normales", aunque es muy probable que queramos controlar qué es lo que hace el módulo o tal vez necesitemos adaptar algún parámetro a una situación especial. Para ello, añadiremos la siguiente directiva al fichero httpd.conf (se indican los valores por defecto):

<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
</IfModule>

Repasemos alguno de los parámetros más importantes que podemos incluir en la directiva:

  • DOSHashTableSize <valor> - Establece el número de nodos a almacenar para cada proceso de peticiones de la tabla hash (contenedor asociativo de recuperación de peticiones por medio de claves que agiliza las respuestas del servidor). Si aplicamos un número alto a este parámetro obtendremos un rendimiento mayor, ya que las iteraciones necesarias para obtener un registro de la tabla son menores. Por contra, y de forma evidente, aumenta el consumo de memoria necesario para el almacenamiento de una tabla mayor. Se hace necesario incrementar este parámetro si el servidor atiende un número abultado de peticiones, aunque puede no servir de nada si la memoria de la máquina es escasa.
  • DOSPageCount <valor> - Indica el valor del umbral para el número de peticiones de una misma página (o URI) dentro del intervalo definido en DOSPageInterval. Cuando el valor del parámetro es excedido, la IP del cliente se añade a la lista de bloqueos.
  • DOSSiteCount <valor> - Cuenta cuántas peticiones de cualquier tipo puede hacer un cliente dentro del intervalo definido en DOSSiteInterval. Si se excede dicho valor, el cliente queda añadido a la lista de bloqueos.
  • DOSPageInterval <valor> - El intervalo, en segundos, para el umbral de petición de páginas.
  • DOSSiteInterval <valor> - El intervalo, en segundos, para el umbral de petición de objetos de cualquier tipo.
  • DOSBlockingPeriod <valor> - Establece el tiempo, en segundos, que un cliente queda bloqueado una vez que ha sido añadido a la lista de bloqueos. Como ya se indicó unas líneas atrás, todo cliente bloqueado recibirá una respuesta del tipo 403 (Forbidden) a cualquier petición que realice durante este periodo.
  • DOSEmailNotify <e-mail> - Un e-mail será enviado a la dirección especificada cuando una dirección IP quede bloqueada. La configuración del proceso de envío se establece en el fichero mod_evasive.c de la forma /bin/mail -t %s, siendo %s el parámetro que queda configurado en este parámetro. Será necesario cambiar el proceso si usamos un método diferente de envío de e-mails y volver a compilar el módulo con apxs (por ejemplo, la opción t ha quedado obsoleta en las últimas versiones del comando).
  • DOSSystemCommand <comando> - El comando reflejado se ejecutará cuando una dirección IP quede bloqueada. Se hace muy útil en llamadas a herramientas de filtrado o firewalls. Usaremos %s para especificar la dirección IP implicada. Por ejemplo, podemos establecer su uso con iptables de la forma siguiente:

DOSSystemCommand “/sbin/iptables –I INPUT –p tcp –dport 80 –s %s –j DROP”

  • DOSLogDir <ruta> - Establece una ruta para el directorio temporal. Por defecto, dicha ruta queda establecida en /tmp, lo cual puede originar algunos agujeros de seguridad si el sistema resulta violado.
  • DOSWhitelist <IP> - La dirección IP indicada como valor del parámetro no será tenida en cuenta por el módulo en ningún caso. Para cada dirección IP a excluir ha de añadirse una nueva línea con el parámetro. Por ejemplo, dejaremos fuera del chequeo del módulo a un posible bot que use los siguientes rangos de direcciones:

DOSWhitelist 66.249.65.*
DOSWhitelist 66.249.66.*

 

Pruebas

El módulo mod_evasive viene acompañado de un script en lenguaje Perl llamado test.pl que nos permitrirá comprobar si el funcionamiento del módulo es todo lo correcto que debiera. El funcionamiento del script es bien sencillo: manda cien peticiones del tipo GET /?<número> HTTP/1.0 seguidas al puerto 80 de la máquina local, que deberán ser bloqueadas por el módulo si éste está bien configurado. La salida presentada al ejecutar el script debería ser algo similar a esto:

[root@annie mod_evasive]# 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
HTTP/1.1 403 Forbidden
[...]

La respuesta 403 Forbidden aparecerá después de unas veinte peticiones y nos indicará que el funcionamiento del módulo es correcto. Si hemos establecido la ejecución de iptables siguiendo el ejemplo del apartado de conficuración, podemos ejecutar el siguiente comando y observar si la dirección IP desde la cual hemos ejecutado el script ha quedado bloqueada:

[root@annie mod_evasive]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP tcp -- <IP test.pl> anywhere tcp dpt:http


Comentario[s]

Sólo los usuarios registrados pueden escribir comentarios.
Por favor, valídate o regístrate.

Powered by AkoComment 2.0!

 
< Anterior   Siguiente >