en Post

Protegiendo tu servidor Apache

El servidor web Apache es uno de los más usados en Internet en nuestros días y también uno de los proyectos Open Source más antiguos, creado en 1995. Actualmente es el responsable por servir el 46.28% de los sitios web activos según netcraft:

Developer March 2017 Percent April 2017 Percent Change
Apache 79,942,445 45.82% 78,489,472 46.28% 0.46
nginx 34,317,972 19.67% 33,176,490 19.56% -0.11
Microsoft 15,611,256 8.95% 14,033,779 8.28% -0.67
Google 11,684,677 6.70% 12,048,089 7.10% 0.41

Es por ello que es contínuo blanco de ataques, algunos son del tipo fuerza bruta como los DDoS, otros más elegantes como slowloris apelan a una vulnerabilidad del protocolo HTTP para crear una denegación de servicio agotando los recursos del servidor. En este pequeño post/tutorial voy a explicarles como instalar tres simples módulos de Apache para protegernos contra este tipo de amenzas.

Protección contra DDoS (Distributed Denial of Service):

Los ataques DDoS generalmente son llevados a cabo por una botnet (conjunto de computadoras infectadas y que son controladas por un cibercriminal) que intenta basado en el gran número de computadoras envueltas en este tipo ataque acabar con los recursos de tu servidor, para que este deje de operar normalmente. Esto muchas veces además de representar una pérdida de servicio y un eventual lucro sesante, dependiendo de que tan vital es tu servidor web para el normal desenvolvimiento de tu empresa, puede además crearte grandes facturas con tu proveedor de hosting si es que éste te factura en base al tráfico, por ejemplo este es el caso de AWS (Amazon Web Services).

Para mitigar este problema existe un módulo de Apache llamado Evasive, para instalarlo asumiendo que uses Debian o Ubuntu, los pasos serían los siguientes (asumiendo que ya estas logueado como usuario root):

# apt-get -y install libapache2-mod-evasive
# mkdir -p /var/log/apache2/evasive
# chown -R www-data:root /var/log/apache2/evasive

Luego de haber instalado Evasive, debemos de configurarlo. Para ello debemos editar el archivo “/etc/apache2/mods-available/mod-evasive.load” con cualquier editor de texto plano (pico, nano, vi, vim, emacs, etc.) y pegar estas líneas en el archivo:


DOSHashTableSize 2048
DOSPageCount 20 # Maximo numero de solicitudes de la misma página.
DOSSiteCount 30 # Número total de solicitudes para cualquier objeto por la misma IP de un cliente.
DOSPageInterval 1.0 # Intervalo para resetear el número de solicitudes de una misma página.
DOSSiteInterval 1.0 # Intervalo para el contador del sitio web.
DOSBlockingPeriod 10.0 # Timpo que el IP del cliente permanecerá bloqueado.
DOSLogDir “/var/log/apache2/evasive/evasive.log”

Si están interesados en saber la unidad de tiempo de los intervalos, son minutos.

Luego de los pasos anteriores debemos reiniciar Apache para que los cambios tengan efecto:

# service apache2 restart

Protección contra Slowloris:

Slowloris es un tipo de ataque de denegación de servicio creado por Robert “RSnake” Hansen que permite a una sóla computadora con un ancho de banda limitado derribar a un servidor web, sin que exista alto tráfico hacia el servidor u otros servicios en el mismo servidor se vean afectados.

La mecánica de Slowloris es la siguiente: mantener abiertas la mayor cantidad de conexiones posibles al servidor web de destino, durante el mayor tiempo posible. La idea es agotar todos los puertos libres que tiene el servidor para responder solicitudes HTTP. Para conseguir el objetivo anterior periódicamente, enviará encabezados HTTP, añadiendo-pero nunca completando-la solicitud, es decir crea muchas conexiones que simulan un intento de conexión desde una red muy lenta. Los servidores atacados intentarán mantener estas conexiones abiertas, llenando su máximo grupo de conexiones simultáneas y finalmente negarán los intentos de conexión adicionales de los clientes reales que desean acceder al website.

Existe una prueba de concepto de Slowloris en Github, no recomiendo que dicha herramienta sea usada contra websites reales ya que finalmente puedes ser identificado y acusado formalmente de un crímen. Estoy indicando dónde está el script de prueba de concepto para que puedas probar si tu website es vulnerable o no.

El módulo Apache que nos permite protegernos contra Slowloris se llama QoS (mod_qos) para ser exactos. Y lo instalamos de la siguiente manera:

# apt-get -y install libapache2-mod-qos

Luego debemos editar el archivo de configuración del mismo “/etc/apache2/mods-available/qos.conf “. El cambio debe ser reemplazar la última línea de dicho archivo de esto:

#QS_SrvMaxConnPerIP                                 50

a esto:

QS_SrvMaxConnPerIP                                 30

Es decir debemos descomentar la última línea y reemplazar 50 con 30.

Luego de eso reiniciamos nuestro servidor Apache y podremos chequear que ahora estamos protegidos contra Slowloris. Un detalle importante es que debemos verficar el acceso a nuestro web desde una IP diferente a la usada para atacar con Slowloris, ya que el módulo QoS impone un máximo de 30 conexiones por IP, con lo que el IP del PC que se está usando para atacar se bloquea a si mismo.

Espero que esta información les haya sido de utilidad, espero sus comentarios.