LinuxParty

NUESTRO SITIO necesita la publicidad para costear hosting y el dominio. Por favor considera deshabilitar tu AdBlock en nuestro sitio. También puedes hacernos una donación entrando en linuxparty.es, en la columna de la derecha.
Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

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.

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías