LinuxParty
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 prevención y detección de intrusiones de código abierto para aplicaciones web que se integra a la perfección con el servidor web) y mod_evasive son dos herramientas muy importantes que se pueden usar para proteger un servidor web contra ataques de fuerza bruta o (D)DoS.
Artículo relacionado: Instalar Linux Malware Detect (LMD) en RHEL, CentOS y Fedora
En este artículo, analizaremos cómo instalarlos, configurarlos y ponerlos en práctica junto con Apache en RHEL / CentOS, así como en Fedora. Además, simularemos ataques para comprobar que el servidor reacciona en consecuencia.
También deberá configurar iptables como la interfaz de firewall predeterminada en lugar de firewalld si está ejecutando RHEL/CentOS 8/7 o Fedora. Hacemos esto para usar la misma herramienta tanto en RHEL / CentOS como en Fedora.
Configurar un Firewall básico en Linux con Iptables.
mod_evasive , como sugiere su nombre, proporciona capacidades evasivas mientras está bajo ataque, actuando como un paraguas que protege a los servidores web de tales amenazas.
Tener instalado el módulo "mod_evasive", puede producir algunos errores de instalación o actualización de servidores, téngalo en cuenta.
Paso 1: Instalación del firewall de Iptables en RHEL/CentOS 8/7 y Fedora
Para comenzar, detenga y deshabilite firewalld :
# systemctl stop firewalld # systemctl disable firewalld
Desactivar el servicio de cortafuegos
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 el cortafuegos de Iptables
Paso 2: Instalar Mod_Security y Mod_evasive
Además de tener una configuración LAMP ya instalada, 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
Configuraciones; mod_security + mod_evasive
Ahora, para integrar estos dos módulos con Apache y que los cargue cuando se inicia, 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 los módulos/mod_security2.so y los módulos/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)'
Verificar módulos mod_security + mod_evasive
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)'
Compruebe los módulos mod_security + mod_evasive cargados
Paso 3: Instalación de un conjunto de reglas básicas y configuración de 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 bajo ciertas condiciones. La firma 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. Descargar 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
Descargar las reglas básicas de mod_security
2. Descomprimir el archivo CRS y cambiar el nombre del directorio por 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 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 eligió desempaquetar el tarball en otro directorio, deberá editar las rutas siguiendo las directivas de inclusión:
<IfModule security2_module> Include crs-tecmint/owasp-modsecurity-crs/crs-setup.conf Include crs-tecmint/owasp-modsecurity-crs/rules/*.conf </IfModule>
Finalmente, se recomienda 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 . Si lo hace, permitirá una actualización más fácil de los CRS a medida que se lanzan 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 de mod_security .
Paso 4: Configuración de 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 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):
<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 que esté siendo 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 en todo el sitio durante el intervalo DOSSiteInterval.
- DOSBlockingPeriod: si un visitante supera los límites establecidos por DOSSPageCount o DOSSiteCount, su dirección IP de origen se incluirá en la lista negra durante el período de tiempo de DOSBlockingPeriod. Durante DOSBlockingPeriod, cualquier solicitud que provenga 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.
Solo una pequeña advertencia : si estos valores no se configuran correctamente, corre el riesgo de terminar bloqueando a los visitantes legítimos.
También puede considerar otras directivas útiles:
DOSEmailNotificar
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 SELinux permiso para enviar correos electrónicos si SELinux está configurado para aplicar. Puedes hacerlo ejecutando
# setsebool -P httpd_can_sendmail 1
Luego, agregue esta directiva en el archivo mod_evasive.conf con el resto de las otras directivas:
DOSEmailNotify Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
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 incluya en la lista negra.
DOSSistemaComando
Esto necesita un comando de sistema válido como argumento,
DOSSystemCommand </command>
Esta directiva especifica un comando que se ejecutará cada vez que una dirección IP se incluya 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 a nivel de firewall
Cuando una dirección IP se incluye en la lista negra, debemos bloquear futuras conexiones que provengan de ella. 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" # mod_directorio de bloqueo evasivo MOD_EVASIVE_LOGDIR=/var/log/mod_evasive # Agregue la siguiente regla de firewall (bloquee todo el tráfico proveniente de $IP) $IPTABLES -I INPUT -s $IP -j DROP # Eliminar el archivo de bloqueo para futuras comprobaciones rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"
Nuestra directiva DOSSystemCommand debería decir lo siguiente:
DOSSystemCommand "/usr/local/bin/ban_ip.sh %s"
En la línea de arriba, %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 otorgue 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/ban_ip.sh Defaults:apache !requiretty
Agregar usuario de 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 tty , debemos comentar la línea que se destaca en la siguiente imagen:
#Defaults requiretty
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. Simplemente 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á alojado dentro de su propia red.
Si desea hacer lo mismo con un VPS alojado por otra persona, debe advertir adecuadamente a su proveedor de alojamiento o pedir permiso para que tal flujo de tráfico pase por 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 de la vida real. Para simular esto, 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 la dirección IP del host
Reproduzca el video a continuación y siga los pasos descritos en el orden indicado para simular un ataque DoS simple:
Luego, la IP infractora está bloqueada por iptables:
IP del atacante bloqueada
Conclusión
Con mod_security y mod_evasive habilitados, el ataque simulado hace que la CPU y la RAM experimenten un pico de uso temporal durante solo un par de segundos antes de que las direcciones IP de origen sean incluidas en la lista negra y bloqueadas 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 planea usar (o ha usado en el pasado) estas herramientas. Siempre esperamos saber de usted, así que no dude en dejar sus comentarios y preguntas, si las hubiera, utilizando el formulario a continuación.
-
Seguridad
- Drones, vigilancia y reconocimiento facial: una startup llamada 'Sauron' presenta un sistema de seguridad para el hogar de estilo militar
- Conexión Segura NFS en Linux, Tunelizar NFS sobre SSH y Configuración de NFS sobre SSH para Mayor Seguridad
- ¿Olvidó su contraseña? Cinco razones por las que necesita un administrador de contraseñas
- Cómo limitar las conexiones SSH (puerto TCP 22) con ufw en Ubuntu Linux
- Utilizar ssh sin contraseña con ssh-keygen y ssh-copy-id
- Millones de teléfonos móviles podrían ser vulnerables a la vigilancia del gobierno chino
- Cómo limitar las conexiones SSH a la red local en Linux
- Los televisores inteligentes son como un «caballo de Troya digital» en los hogares
- Snort para Windows, detección de Intrusos y seguridad.
- Detección de Intrusiones con las herramientas: BASE y Snort.
- El Sistema de Detección de Intrusos: Snort. ( Windows y Linux )
- Configuración con Ejemplos de Snort para Windows, detección de intrusiones
- ¿El gobierno de EE. UU. ignoró la oportunidad de hacer que TikTok fuera más seguro?
- ¿Qué es SSH y cómo se utiliza? Los conceptos básicos de Secure Shell que necesitas saber
- Asegurar memcached del servidor, para evitar amplificar ataques DDoS