Búsqueda de sitios web

Proteja Apache contra ataques de fuerza bruta o DDoS utilizando los módulos Mod_Security y Mod_evasive


Para aquellos de ustedes en el negocio del hosting, o si alojan sus propios servidores y los exponen a Internet, proteger sus sistemas contra atacantes debe ser una alta prioridad.

mod_security (motor de prevención y detección de intrusiones de código abierto para aplicaciones web que se integra perfectamente con el servidor web) y mod_evasive son dos herramientas muy importantes que se pueden utilizar para proteger un servidor web. contra ataques de fuerza bruta o (D)DoS.

mod_evasive, como su nombre indica, proporciona capacidades evasivas durante un ataque, actuando como un paraguas que protege a los servidores web de dichas amenazas.

En este artículo, analizaremos cómo instalarlos, configurarlos y ponerlos en funcionamiento junto con Apache en RHEL/CentOS 8 y 7 como así como Fedora. Además, simularemos ataques para comprobar que el servidor reacciona en consecuencia.

Esto supone que tiene un servidor LAMP instalado en su sistema. De lo contrario, consulte este artículo antes de continuar.

  • Cómo instalar el servidor LAMP en CentOS 8
  • Cómo instalar la pila LAMP en RHEL/CentOS 7

También necesitarás configurar iptables como la interfaz de firewall predeterminada en lugar de firewalld si estás ejecutando RHEL/CentOS 8/7 o Fedora. fuerte>. Hacemos esto para utilizar la misma herramienta tanto en RHEL/CentOS 8/7 como en Fedora.

Paso 1: Instalar el firewall de Iptables en RHEL/CentOS 8/7 y Fedora

Para comenzar, detenga y desactive firewalld:

systemctl stop firewalld
systemctl disable firewalld

Luego instale el paquete iptables-services antes de habilitar iptables:

yum update && yum install iptables-services
systemctl enable iptables
systemctl start iptables
systemctl status iptables

Paso 2: Instalar Mod_Security y Mod_evasive

Además de tener una configuración LAMP ya implementada, también deberá habilitar el repositorio EPEL en RHEL/CentOS 8/7 para poder para instalar ambos paquetes. Los usuarios de Fedora no necesitan habilitar ningún repositorio, porque epel ya forma parte del Proyecto Fedora.

yum update && yum install mod_security mod_evasive

--------------- CentOS/RHEL 8 --------------- 
dnf install https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-1.el8.noarch.rpm
dnf --enablerepo=raven-extras install mod_evasive

Cuando se complete la instalación, encontrará los archivos de configuración para ambas herramientas en /etc/httpd/conf.d.

ls -l /etc/httpd/conf.d

Ahora, para integrar estos dos módulos con Apache y hacer que los cargue cuando se inicie, asegúrese de que las siguientes líneas aparezcan en la sección de nivel superior de mod_evasive.conf. y mod_security.conf, respectivamente:

LoadModule evasive20_module modules/mod_evasive24.so
LoadModule security2_module modules/mod_security2.so

Tenga en cuenta que modules/mod_security2.so y modules/mod_evasive24.so son las rutas relativas, desde el directorio /etc/httpd hasta el archivo fuente. del módulo. Puede verificar esto (y cambiarlo, si es necesario) enumerando el contenido del directorio /etc/httpd/modules:

cd /etc/httpd/modules
pwd
ls -l | grep -Ei '(evasive|security)'

Luego reinicie Apache y verifique que cargue mod_evasive y mod_security:

systemctl restart httpd 	

Vuelque una lista de módulos estáticos y compartidos cargados.

httpd -M | grep -Ei '(evasive|security)'				

Paso 3: instalar un conjunto de reglas básicas y configurar Mod_Security

En pocas palabras, un Conjunto de reglas básicas (también conocido como CRS) proporciona al servidor web instrucciones sobre cómo comportarse en determinadas condiciones. La empresa desarrolladora de mod_security proporciona un CRS gratuito llamado OWASP (Open Web Application Security Project) ModSecurity CRS que se puede descargar e instalar de la siguiente manera.

1. Descargue el OWASP CRS a un directorio creado para tal fin.

mkdir /etc/httpd/crs-tecmint
cd /etc/httpd/crs-tecmint
wget -c https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz -O master

2. Descomprima el archivo CRS y cambie el nombre del directorio según nuestra conveniencia.

tar xzf master
mv owasp-modsecurity-crs-3.2.0 owasp-modsecurity-crs

3. Ahora es el momento de configurar mod_security. Copie el archivo de muestra con reglas (owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example) en otro archivo sin la extensión .example:

cd owasp-modsecurity-crs/
cp crs-setup.conf.example crs-setup.conf

y dígale a Apache que use este archivo junto con el módulo insertando las siguientes líneas en el archivo de configuración principal del servidor web /etc/httpd/conf/httpd.conf. Si elige descomprimir el archivo tar en otro directorio, deberá editar las rutas siguiendo las directivas Incluir:

<IfModule security2_module>
        Include crs-tecmint/owasp-modsecurity-crs/crs-setup.conf
        Include crs-tecmint/owasp-modsecurity-crs/rules/*.conf
</IfModule>

Finalmente, es recomendable que creemos nuestro propio archivo de configuración dentro del directorio /etc/httpd/modsecurity.d donde colocaremos nuestras directivas personalizadas (lo llamaremos tecmint.conf en el siguiente ejemplo) en lugar de modificar los archivos CRS directamente. Hacerlo permitirá una actualización más sencilla de los CRS a medida que se publiquen nuevas versiones.

<IfModule mod_security2.c>
	SecRuleEngine On
	SecRequestBodyAccess On
	SecResponseBodyAccess On 
	SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream 
	SecDataDir /tmp
</IfModule>

Puede consultar el repositorio ModSecurity GitHub de SpiderLabs para obtener una guía explicativa completa de las directivas de configuración mod_security.

Paso 4: Configurar Mod_Evasive

mod_evasive se configura mediante directivas en /etc/httpd/conf.d/mod_evasive.conf. Dado que no hay reglas para actualizar durante la actualización de un paquete, no necesitamos un archivo separado para agregar directivas personalizadas, a diferencia de mod_security.

El archivo mod_evasive.conf predeterminado tiene habilitadas las siguientes directivas (tenga en cuenta que este archivo está muy comentado, por lo que hemos eliminado los comentarios para resaltar las directivas de configuración a continuación):

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

Explicación de las directivas:

  • DOSHashTableSize: esta directiva especifica el tamaño de la tabla hash que se utiliza para realizar un seguimiento de la actividad por dirección IP. Aumentar este número proporcionará una búsqueda más rápida de los sitios que el cliente ha visitado en el pasado, pero puede afectar el rendimiento general si se establece en un valor demasiado alto.
  • DOSPageCount: número legítimo de solicitudes idénticas a un URI específico (por ejemplo, cualquier archivo servido por Apache) que puede realizar un visitante durante el intervalo DOSPageInterval.
  • DOSSiteCount: similar a DOSPageCount, pero se refiere a cuántas solicitudes generales se pueden realizar a todo el sitio durante el intervalo DOSSiteInterval.
  • DOSBlockingPeriod: si un visitante excede los límites establecidos por DOSSPageCount o DOSSiteCount, su dirección IP de origen estará en la lista negra durante el período de tiempo de DOSBlockingPeriod. Durante DOSBlockingPeriod, cualquier solicitud proveniente de esa dirección IP encontrará un error 403 Prohibido.

Siéntase libre de experimentar con estos valores para que su servidor web pueda manejar la cantidad y el tipo de tráfico requeridos.

Sólo una pequeña advertencia: si estos valores no se establecen correctamente, corre el riesgo de terminar bloqueando a visitantes legítimos.

Quizás también quieras considerar otras directivas útiles:

DOSEcorreoNotificar

Si tiene un servidor de correo en funcionamiento, puede enviar mensajes de advertencia a través de Apache. Tenga en cuenta que deberá otorgar permiso al usuario de Apache SELinux para enviar correos electrónicos si SELinux está configurado para aplicar. Puedes hacerlo ejecutando

setsebool -P httpd_can_sendmail 1

A continuación, agregue esta directiva en el archivo mod_evasive.conf con el resto de las otras directivas:

DOSEmailNotify [email 

Si se establece este valor y su servidor de correo funciona correctamente, se enviará un correo electrónico a la dirección especificada cada vez que una dirección IP entre en la lista negra.

Comando del sistema DOS

Esto necesita un comando del sistema válido como argumento,

DOSSystemCommand </command>

Esta directiva especifica un comando que se ejecutará cada vez que una dirección IP entre en la lista negra. A menudo se usa junto con un script de shell que agrega una regla de firewall para bloquear conexiones adicionales provenientes de esa dirección IP.

Escriba un script de shell que maneje las listas negras de IP en el nivel del firewall

Cuando una dirección IP entra en la lista negra, debemos bloquear futuras conexiones provenientes de ella. Usaremos el siguiente script de shell que realiza este trabajo. Cree un directorio llamado scripts-tecmint (o el nombre que prefiera) en /usr/local/bin y un archivo llamado ban_ip.sh. en ese directorio.

#!/bin/sh
IP that will be blocked, as detected by mod_evasive
IP=$1
Full path to iptables
IPTABLES="/sbin/iptables"
mod_evasive lock directory
MOD_EVASIVE_LOGDIR=/var/log/mod_evasive
Add the following firewall rule (block all traffic coming from $IP)
$IPTABLES -I INPUT -s $IP -j DROP
Remove lock file for future checks
rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"

Nuestra directiva DOSSystemCommand debería leerse como sigue:

DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"

En la línea anterior, %s representa la IP infractora detectada por mod_evasive.

Agregue el usuario de Apache al archivo sudoers

Tenga en cuenta que todo esto simplemente no funcionará a menos que le dé permiso al usuario apache para ejecutar nuestro script (¡y solo ese script!) sin una terminal ni contraseña. Como de costumbre, puede simplemente escribir visudo como root para acceder al archivo /etc/sudoers y luego agregar las siguientes 2 líneas como se muestra en la imagen a continuación:

apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
Defaults:apache !requiretty

IMPORTANTE: Como política de seguridad predeterminada, solo puedes ejecutar sudo en una terminal. Dado que en este caso necesitamos usar sudo sin un tty, tenemos que comentar la línea que está resaltada en la siguiente imagen:

#Defaults requiretty

Finalmente, reinicie el servidor web:

systemctl restart httpd

Paso 4: Simular un ataque DDoS en Apache

Existen varias herramientas que puede utilizar para simular un ataque externo a su servidor. Puedes simplemente buscar en Google “herramientas para simular ataques DDOS” para encontrar varias de ellas.

Tenga en cuenta que usted, y sólo usted, será responsable de los resultados de su simulación. Ni se te ocurra lanzar un ataque simulado a un servidor que no alojas en tu propia red.

Si desea hacer lo mismo con un VPS alojado por otra persona, debe advertir adecuadamente a su proveedor de alojamiento o pedirle permiso para que tal inundación de tráfico pase por sus redes. ¡linux-console.net no es, de ningún modo, responsable de tus actos!

Además, lanzar un ataque DoS simulado desde un solo host no representa un ataque en la vida real. Para simular esto, necesitará apuntar a su servidor desde varios clientes al mismo tiempo.

Nuestro entorno de prueba está compuesto por un servidor CentOS 7 [IP 192.168.0.17] y un host Windows desde el que lanzaremos el ataque [IP 192.168.0.103]:

Reproduzca el vídeo a continuación y siga los pasos descritos en el orden indicado para simular un ataque DoS simple:

Entonces iptables bloquea la IP infractora:

Conclusión

Con mod_security y mod_evasive habilitados, el ataque simulado hace que la CPU y la RAM experimenten con un pico de uso temporal durante sólo un par de segundos antes de que las IP de origen estén en la lista negra y bloqueadas por el firewall. Sin estas herramientas, la simulación seguramente derribará el servidor muy rápidamente y lo dejará inutilizable durante la duración del ataque.

Nos encantaría saber si planea usar (o ha usado en el pasado) estas herramientas. Siempre esperamos tener noticias suyas, así que no dude en dejar sus comentarios y preguntas, si las hubiera, mediante el siguiente formulario.

Enlaces de referencia

https://www.modsecurity.org/