Instalar y configurar mod_evasive con iptables

Instalar y configurar mod_evasive con iptables es fundamental y debería ser un requisito obligatorio a la hora de poner en servicio un nuevo servidor. Aparte de las muchas virtudes que nos ofrece, es necesario para protegernos de ataques DOS y DDOS.

En este articulo vemos como configurarlo y que envíe las ip’s atacantes a iptables, que por cierto es una duda que surgió a un usuario en Forosdelweb. En el ejemplo usaremos Debian como distro base.

 

Instalar y configurar

Instalamos mod_evasive:

Configuramos apache con mod_evasive:

Agregamos la configuración del módulo en un fichero nuevo dedicado, por tener un orden. En este caso usaremos “mod-evasive.conf “. La configuración por defecto es:

El nombre exacto del modulo puede variar dependiendo de tu distribución linux.

La configuración del modulo, dependerá de tus necesidades y servidor o vps. Te pongo la explicación y utilidad de cada orden.

  • 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:

  • 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, (no uses las ip del ejemplo que son las del rastreador de Google):

Una vez configurado, lo activamos.

 

Configurar mod_evasive con iptables

Iptables solo es ejecutado por el usuario root, es una medida que se toma por si se produce un desbordamiento, no se quede una sesión de un usuario con permisos colgada. Por tanto, como es imposible que mod_evasive bloquee ip’s en iptables, lo que haremos será engañarlo… y como?

Le enviaremos un mensaje a root, en el cual le decimos que tiene que bloquear una IP.

Dependiendo de como configuramos anteriormente mod_evasive en Apache, abrimos uno u otro archivo:

  • apache2.conf
  • mod-evasive.conf

Y agregamos…

Ahora en:

Crearemos un script que actualiza un registro de ip’s, que realizan demasiadas peticiones (dos, ddos). Copia y pega.

Guarda y cierra, nos creara un fichero log en formato texto.

 

Ya llego la hora deque trabaje el root, que sera el encargado de revisar este fichero y si observa algún cambio actuara inmediatamente.

Usaremos incron, en el cual crearemos una regla que supervisara el fichero. Es fácil, mira…

Ya solo nos queda crear el archivo baneador de ip’s:

Recuerda que es posible que debas modificar tu puerto http 80 por otro.

Reinicia el sistema.

 

Ejemplo

Para probar si funciona correctamente, puedes ejecutar el script perl que viene incluido en mod_evasive.

Como ves se ejecuto correctamente, funciona.

 

Instalar y configurar mod_evasive con iptables
4.4 (88.57%) 7 Votos

Agregar comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.