Proteja Apache contra la fuerza bruta o los ataques DDoS utilizando mod_security y módulos mod_evasive

Proteja Apache contra la fuerza bruta o los ataques DDoS utilizando mod_security y módulos mod_evasive

Para aquellos de ustedes en el negocio de alojamiento, o si están alojando sus propios servidores y exponiendo a Internet, asegurar sus sistemas contra los atacantes debe ser una alta prioridad.

mod_securidad (Motor de detección y prevención de intrusos de código abierto para aplicaciones web que se integra perfectamente con el servidor web) y mod_evasivo son dos herramientas muy importantes que se pueden usar para proteger un servidor web contra la fuerza bruta o (d) ataques de DOS.

Artículo relacionado: Cómo instalar la detección de malware de Linux con clamav como motor antivirus

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

Instalar mod_security y mod_evasive para proteger a Apache

En este artículo, discutiremos cómo instalar, configurar 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 reaccione en consecuencia.

Esto supone que tiene un servidor de lámparas instalado en su sistema. Si no, consulte este artículo antes de continuar.

  • Cómo instalar el servidor de lámparas en Centos 8
  • Cómo instalar la pila de lámparas en Rhel/Centos 7

También necesitará configurar iptables Como el front-end de firewall predeterminado en lugar de firewalld si está corriendo RHEL/CENTOS 8/7 o Fedora. Hacemos esto para usar la misma herramienta en ambos Rhel/Centos 8/7 y Fedora.

Paso 1: Instalación del firewall iptable en Rhel/Centos 8/7 y Fedora

Para comenzar, detener y deshabilitar cortafuegos:

# SystemCTL Stop Firewalld # SystemCTL DISPLEY FireWalld 
Deshabilitar el servicio de firewalld

Luego instale el IPTables-Services paquete antes de habilitar iptables:

# Yum Update && Yum instalación iptables-Services # SystemCtl Habilitar # SystemCtl Inicio IPTables # SystemCtl Status iptables 
Instalar iptables firewall

Paso 2: Instalación de mod_security y mod_evasive

Además de tener una configuración de lámpara ya en su lugar, también deberá habilitar el repositorio de 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.dinina.SU/EL8/Base/X86_64/Raven-Release-1.0-1.El8.noarch.rpm # dnf --eableRepo = 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 configuraciones

Ahora, para integrar estos dos módulos con apache Y haga que los cargue cuando comience, asegúrese de que aparezcan las siguientes líneas en la sección de nivel superior de mod_evasivo.confusión y mod_securidad.confusión, respectivamente:

Loadmodule evasive20_module módulos/mod_evasive24.Entonces loadmodule Security2_module módulos/mod_security2.entonces 

Tenga en cuenta que módulos/mod_security2.entonces y módulos/mod_evasive24.entonces son los caminos relativos, de la /etc/httpd directorio al archivo fuente del módulo. Puede verificar esto (y cambiarlo, si es necesario) enumerando el contenido del /etc/httpd/módulos directorio:

# cd/etc/httpd/módulos # pwd # ls -l | grep -ei '(evasivo | seguridad)' 
Verificar mod_security + mod_evasive módulos

Luego reinicie Apache y verifique que se carga mod_evasivo y mod_securidad:

# SystemCTL reiniciar httpd 

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

# httpd -m | grep -ei '(evasivo | seguridad)' 
Verificar mod_security + mod_evasive módulos cargados

Paso 3: Instalación de un conjunto de reglas centrales y configurando mod_security

En pocas palabras, un Conjunto de reglas centrales (también conocido como CRS) proporciona al servidor web instrucciones sobre cómo comportarse bajo ciertas condiciones. La firma de desarrolladores de mod_securidad proporciona un gratis CRS llamado Owasp (Open Web Application Security Project) ModSecurity CRS que se puede descargar e instalar de la siguiente manera.

1. Descargar el OWASP CRS a un directorio creado para ese propósito.

# mkdir/etc/httpd/crs-tecmint # cd/etc/httpd/crs-tecmint # wget -c https: // github.com/spiderlabs/owasp-modsecurity-corcs/Archive/v3.2.0.alquitrán.gz -o maestro 
Descargar reglas MOD_Security Core

2. Desgaste el CRS archivo y cambiar el nombre del directorio para uno de 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 las reglas (Owasp-Modsecurity-CRS/ModSecurity_CRS_10_Setup.confusión.ejemplo) en otro archivo sin el .ejemplo extensión:

# CD OWASP-MODSECURITY-CRS/ # CP CRS-SETUP.confusión.Ejemplo de CRS-setup.confusión 

y decir apache para usar 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.confusión archivo. Si elige desempacar el tarball en otro directorio, deberá editar las rutas siguiendo las directivas de inclusión:

 Incluya CRS-TecMint/Owasp-Modsecurity-CRS/CRS-Setup.Conf incluye CRS-TecMint/Owasp-Modsecurity-CRS/Reglas/*.confusión  

Finalmente, se recomienda que creemos nuestro propio archivo de configuración dentro del /etc/httpd/modsecuridad.d Directorio donde colocaremos nuestras directivas personalizadas (lo nombraremos tecmenta.confusión en el siguiente ejemplo) en lugar de modificar el CRS archivos directamente. Hacerlo permitirá una mejora más fácil del CRSS a medida que se lanzan nuevas versiones.

 Secruleengine en SecrequestBodyAccess en SecRessePonseBodyAccess en SecResponseBodyMiMeType Texto/Texto plano/texto HTML/Aplicación XML/Secdatadir/TMP de Octet  

Puede consultar el repositorio de GitHub de SpiderLabs 'para una guía explicativa completa de mod_securidad directivo de configuración.

Paso 4: Configuración de mod_evasive

mod_evasivo está configurado utilizando directivas en /etc/httpd/conf.d/mod_evasive.confusión. Dado que no hay reglas para actualizar durante una actualización de paquete, no necesitamos un archivo separado para agregar directivas personalizadas, en lugar de mod_securidad.

El valor por defecto mod_evasivo.confusión El archivo tiene las siguientes directivas habilitadas (tenga en cuenta que este archivo se comenta fuertemente, 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 Dossite Interval 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 en una dirección por-IP. El aumento de 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 está demasiado alto.
  • Dospagencia: Número legítimo de solicitudes idénticas a un URI específico (por ejemplo, cualquier archivo que sea atendido por Apache) que puede ser realizado por un visitante a través del intervalo de Intervalos Dospageros.
  • Cuenta de dossitistas: Similar a DospageCount, pero se refiere a cuántas solicitudes generales se pueden hacer a todo el sitio a través del intervalo de intervalo de dossite.
  • Periodía: 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 bloqueo dos veces. Durante DosBlockingperiod, cualquier solicitud proveniente de esa dirección IP encontrará un error prohibido 403.

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

Solo una pequeña advertencia: Si estos valores no se establecen correctamente, corre el riesgo de terminar bloqueando a los visitantes legítimos.

También puede considerar otras directivas útiles:

Dosilnotify

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

# setsebool -p httpd_can_sendmail 1 

A continuación, agregue esta directiva en el mod_evasivo.confusión Archivo con el resto de las otras directivas:

Dosailnotify [correo electrónico protegido] 

Si este valor está configurado 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 lista negra.

Comando de dossystem

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

Comando de dossystem  

Esta directiva especifica un comando que se ejecutará cada vez que una dirección IP se paga 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.

Escribe un script de shell que maneja la lista negra de IP a nivel de firewall

Cuando una dirección IP se presenta en la lista negra, necesitamos bloquear las conexiones futuras que provienen de ella. Usaremos el siguiente script de shell que realiza este trabajo. Crear un directorio nombrado scripts-tecmint (o cualquier nombre de su elección) en /usr/local/bin y un archivo llamado ban_ip.mierda En ese directorio.

#!/bin/sh # ip que se bloqueará, según lo detectado por mod_evasive ip = $ 1 # ruta completa a iptables iptables = "/sbin/iptables" # mod_evasive de bloqueo de bloqueo mod_evasive_logdir =/var/log/mod_evasive # Agregar la siguiente regla de firewall ( Bloquear todo el tráfico que proviene de $ ip) $ iptable -i Entrada -s $ ip -j Drop # Eliminar el archivo de bloqueo para los cheques futuros RM -f "$ mod_evasive_logdir"/dos -"$ ip" 

Nuestro Comando de dossystem La directiva debe leer 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_evasivo.

Agregue el usuario de Apache al archivo de sudoers

Tenga en cuenta que todo esto simplemente no funcionará a menos que dé permisos al usuario apache para ejecutar nuestro script (y ese script solamente!) sin una terminal y contraseña. Como de costumbre, puedes escribir visudo como raíz para acceder al /etc/sudoers Archivo y luego agregue 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 Predeterminados: Apache !requerido 
Agregar usuario Apache a sudoers

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

#Defaults requirectetty 
Deshabilitar tty para sudo

Finalmente, reinicie el servidor web:

# SystemCTL reiniciar httpd 

Paso 4: Simulando un DDoS ataques contra Apache

Hay varias herramientas que puede usar para simular un ataque externo en su servidor. Puedes simplemente 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 que es alojado por otra persona, debe advertir adecuadamente a su proveedor de alojamiento o pedir permiso para que una inundación de tráfico de este tipo pase por sus redes. Tecmenta.comunicarse no es, de ninguna manera, responsable de sus actos!

Además, el lanzamiento de un ataque de DOS simulado de un solo anfitrión no representa un ataque de la vida real. Para simular tal, deberá dirigirse a su servidor desde varios clientes al mismo tiempo.

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

Confirmar ipaddress de host

Por favor, reproduce el video a continuación y siga los pasos descritos en el orden indicado para simular un ataque de DOS simple:

Luego, la IP ofensiva está bloqueada por iptables:

IP de atacante bloqueado

Conclusión

Con mod_securidad y mod_evasivo habilitado, el ataque simulado causa el UPC y RAM para experimentar con un pico de uso temporal por solo un par de segundos antes de que las IPS de la fuente estén en la lista negra y bloqueadas por el firewall. Sin estas herramientas, la simulación seguramente derribará el servidor muy rápido y lo hará 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 suyas, así que no dude en dejar sus comentarios y preguntas, si corresponde, utilizando el formulario a continuación.

Enlaces de referencia

https: // www.modificación.org/