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

Para aquellos de ustedes en el negocio de hospedaje, o si están hospedando sus propios servidores y exponiéndolos a Internet, proteger sus sistemas contra atacantes debe ser una alta prioridad.

mod_security (motor de detección y prevenció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 la fuerza bruta o (D) Ataques DoS.

Artículo relacionado. Cómo instalar Linux Malware Detect con ClamAV como motor antivirus

mod_evasive , como su nombre indica, proporciona evasivas capacidades mientras está bajo ataque, actuando como un paraguas que protege a los servidores web de tales amenazas.

 Instalar Mod_Security Mod_Evasive en CentOS Instale Mod_Security y Mod_Evasive para proteger Apache

En este artículo, discutiremos cómo instalarlos, configurarlos y ponerlos en juego junto con Apache en RHEL. CentOS 8. y 7. así como Fedora. Además, simularemos ataques para verificar 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

freestar.config.enabled_slots.push

También deberá configurar iptables. como el frente de firewall predeterminado-end en lugar de firewalld si está ejecutando RHEL/CentOS 8/7. o Fedora. Hacemos esto para usar la misma herramienta tanto en RHEL. CentOS 8. 7. y Fedora.

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

Para comenzar, detenga y deshabilite firewalld :

# systemctl detener firewalld # systemctl deshabilitar firewalld  Deshabilitar el servicio Firewalld en CentOS 7 Deshabilitar el servicio 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  Instalar Iptables Firewall en CentOs 7 Instalar Iptables Firewall

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 instalar ambos paquetes. Los usuarios de Fedora no necesitan habilitar ningún repositorio, porque epel ya es 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  mod_security + mod_evasive C onfigurations mod_security + mod_evasive Configurations

Ahora, para integrar estos dos módulos con Apache y hacer que los cargue cuando se inicie, asegúrese de las siguientes líneas aparecen 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 /etc/httpd directorio al 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 ‘(evasivo | seguridad)’  Verificar mod_security + mod_evasive Modules Verificar mod_security + mod_evasive Módulos

Luego reiniciar Apache y verifique que cargue mod_evasive y mod_security :

# systemctl restart httpd

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

# httpd-M | grep-Ei ‘(evasive | security)’  Verificar mod_security + mod_evasive Módulos cargados

Verificar mod_security + mod_evasive Módulos cargados

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 el servidor web con instrucciones sobre cómo comportarse en determinadas condiciones. La empresa desarrolladora de mod_security proporciona un CRS gratuito llamado OWASP (Proyecto de seguridad de aplicaciones web abiertas) ModSecurity CRS que se puede descargar e instalar de la siguiente manera.

1.. Descargue 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  Descargar mod_security Core Rules Descargue las reglas básicas de mod_security

2.. Descomprima el archivo CRS y cambie el nombre del directorio para su 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 la configuración principal del servidor web archivo /etc/httpd/conf/httpd.conf archivo. Si elige descomprimir el tarball en otro directorio, deberá editar las rutas siguiendo las directivas de inclusión:

Incluya crs-tecmint/owasp-modsecurity-crs/crs-setup.conf Incluya crs-tecmint/owasp-modsecurity-crs/rules/*.conf

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

SecRuleEngine en SecRequestBodyAccess en SecResponseBodyAccess en SecResponseBodyMimeType texto/texto sin formato/texto html/aplicación xml/octet-tSecmpDataDir

Puede consultar el repositorio ModSecurity GitHub de SpiderLabs para obtener una guía explicativa completa de las directivas de configuración de 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 mod_evasive predeterminado El archivo .conf tiene las siguientes directivas habilitadas (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):

DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10

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 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 La dirección IP de origen se incluirá 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 requeridos del tráfico.

Solo una pequeña advertencia. si estos valores no se configuran correctamente, corre el riesgo de terminar bloqueando visitantes legítimos.

También puede considerar otras directivas útiles:

DOSEmailNotify

Si tiene un servidor de correo en funcionamiento, puede enviar mensajes de advertencia a través de Apache. Tenga en cuenta que deberá otorgar al usuario de Apache el permiso SELinux para enviar correos electrónicos si SELinux está configurado para hacer cumplir. Puede 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 protected]

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 se ponga en la lista negra.

DOSSystemCommand

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

DOSSystemCommand

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

Escriba un script de shell que maneje la lista negra de IP en el nivel del firewall

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

#!/bin/sh # IP que será bloqueada, detectada por mod_evasive IP = $ 1 # Ruta completa a iptables IPTABLES = “/sbin/iptables” # directorio de bloqueo mod_evasive MOD_EVASIVE_LOGDIR =/var/log/mod_evasive # Agrega la siguiente regla de firewall (bloquea todo el tráfico proveniente de $ IP) $ IPTABLES-I INPUT-s $ IP-j DROP # Elimina el archivo de bloqueo para futuras comprobaciones rm-f “$ MOD_EVASIVE_LOGDIR”/dos-“$ IP ”

Nuestra directiva DOSSystemCommand debería leerse de la siguiente manera:

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

En la línea de arriba, % s representa la IP ofensiva detectada por mod_evasive .

Agregue el usuario de Apache al archivo sudoers

Tenga en cuenta que todo esto simplemente no funciona a menos que le dé permisos al usuario apache para ejecutar nuestro script (¡y solo ese script!) sin una terminal y contraseña. Como de costumbre, puede 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 Valores predeterminados: apache! requiretty  Agregar usuario de Apache a Sudoers

Agregar usuario de Apache a Sudoers

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

#Defaults requiretty

 Deshabilitar tty para Sudo

Deshabilitar tty para Sudo

Finalmente, reinicie el servidor web:

# systemctl restart httpd

Paso 4: Simular un ataque DDoS en Apache

Hay varias herramientas que puede usar para simular un ataque externo en su servidor. Puede buscar en Google “ herramientas para simular ataques ddos ​​” para encontrar varios de ellos.

Tenga en cuenta que usted, y solo usted, será responsable de los resultados de su simulación. . Ni siquiera piense en lanzar un ataque simulado en un servidor que no está alojando dentro de su propia red.

Si desea hacer lo mismo con un VPS alojado por otra persona, debe hacerlo advierta adecuadamente a su proveedor de alojamiento o solicite permiso para que tal flujo de tráfico pase a través de sus redes. Tecmint.com no es, de ninguna manera, responsable de sus actos.

Además, lanzar un ataque DoS simulado desde un solo host no representa un ataque en la vida real. Para simularlo, necesitaría 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 ]:

 Confirmar Host IPAddress Confirm Host IPAddress

Reproduzca el video a continuación y siga los pasos descritos en el orden indicado para simular una Ataque DoS:

Luego, iptables bloquea la IP ofensiva:

 IP del atacante bloqueado IP del atacante bloqueado

Conclusión

Con mod_security y mod_evasive habilitado, el ataque simulado hace que la CPU y la RAM experimenten con un pico de uso temporal durante solo un par de segundos antes de que se activen las direcciones IP de origen. incluido en la lista negra y bloqueado por el firewall. Sin estas herramientas, la simulación seguramente derribará el servidor muy rápido y lo dejará inutilizable durante la duración del ataque.

Nos encantaría saber si está planeando usar (o ha usado en el pasado) estas herramientas. Siempre esperamos tener noticias tuyas, así que no dudes en dejar tus comentarios y preguntas, si las hay, utilizando el formulario a continuación.

Enlaces de referencia

https://www .modsecurity.org/