Volver a la página principal
viernes 8 noviembre 2024
54

Cómo configurar ModSecurity en Nginx para WAF

ModSecurity es un módulo de firewall de aplicaciones web (WAF) ampliamente utilizado que ayuda a proteger aplicaciones y servidores web de diversas amenazas y ataques como inyecciones SQL, cross-site scripting (XSS), entre otros. Integrarlo con Nginx permite filtrar y monitorear las solicitudes HTTP, brindando una capa adicional de seguridad para aplicaciones web.

¿Qué es ModSecurity en Nginx?

ModSecurity actúa como un Web Application Firewall (WAF) que intercepta y analiza el tráfico HTTP antes de que llegue a la aplicación. Se configura en Nginx para aplicar reglas de seguridad que detectan y bloquean actividades sospechosas o maliciosas. Se puede utilizar con el conjunto de reglas de la OWASP ModSecurity Core Rule Set (CRS), que cubre las amenazas web más comunes.

Instalación de ModSecurity en Nginx

Para usar ModSecurity en Nginx, necesitas instalar el módulo ModSecurity. Aquí se detallan los pasos básicos para su instalación en sistemas basados en Ubuntu, aunque el proceso es similar en otras distribuciones.

1. Instalar dependencias:

sudo apt update
   sudo apt install libmodsecurity-dev libpcre3 libpcre3-dev libxml2 libxml2-dev \
                    libyajl-dev pkg-config doxygen build-essential git

2. Clonar y compilar ModSecurity:

git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity
   cd ModSecurity
   ./build.sh
   ./configure
   make
   sudo make install

3. Clonar y compilar el conector de Nginx para ModSecurity:

git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git

4. Compilar Nginx con el módulo ModSecurity (asegúrate de descargar la versión de Nginx correspondiente):

./configure --with-compat --add-dynamic-module=../ModSecurity-nginx
   make modules
   sudo cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules

5. Habilitar ModSecurity en Nginx: Modifica el archivo nginx.conf para cargar el módulo ModSecurity.

load_module modules/ngx_http_modsecurity_module.so;

Configuración básica de ModSecurity en Nginx

Una vez que ModSecurity está instalado, se configura en el archivo de configuración de Nginx para proteger las solicitudes entrantes mediante reglas.

1. Habilitar ModSecurity en un servidor

Edita el bloque de configuración del servidor o ubicación en nginx.conf para activar ModSecurity.

http {
    modsecurity on;
    modsecurity_rules_file /etc/nginx/modsec/main.conf;

    server {
        listen 80;
        server_name ejemplo.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

En este ejemplo:

  • modsecurity on; habilita ModSecurity.
  • modsecurity_rules_file especifica el archivo principal de reglas de ModSecurity.

2. Configuración de ModSecurity con OWASP Core Rule Set (CRS)

El OWASP Core Rule Set (CRS) es un conjunto de reglas recomendadas para ModSecurity. Puedes instalarlo y configurarlo de la siguiente manera:

1. Descargar el OWASP CRS:

git clone https://github.com/coreruleset/coreruleset.git /etc/nginx/modsec-crs
   cd /etc/nginx/modsec-crs
   cp crs-setup.conf.example crs-setup.conf

2. Configurar el archivo principal de reglas de ModSecurity:

Edita el archivo /etc/nginx/modsec/main.conf para incluir las reglas básicas y el conjunto de reglas CRS.

SecRuleEngine On
   Include /etc/nginx/modsec-crs/crs-setup.conf
   Include /etc/nginx/modsec-crs/rules/*.conf

3. Habilitar ModSecurity en el servidor Nginx: Asegúrate de que main.conf esté definido como modsecurity_rules_file en el archivo de configuración de Nginx.

Parámetros clave de configuración de ModSecurity en Nginx

Directiva Descripción
SecRuleEngine Activa (On), desactiva (Off) o solo monitorea (DetectionOnly) las reglas de ModSecurity.
SecRequestBodyAccess Permite inspeccionar el cuerpo de la solicitud (útil para analizar peticiones POST).
SecResponseBodyAccess Permite inspeccionar el cuerpo de la respuesta.
SecAuditLog Especifica el archivo de registro de auditoría para almacenar detalles de las solicitudes analizadas.
SecDebugLog Archivo donde se almacenan los logs de depuración de ModSecurity.
SecRule Define una regla de seguridad específica dentro del archivo de configuración de ModSecurity.

Ejemplos adicionales de configuración de ModSecurity en Nginx

1. Modo de solo detección: Configura ModSecurity para registrar amenazas sin bloquearlas, útil en entornos de pruebas.

SecRuleEngine DetectionOnly

2. Habilitar logs de auditoría:

SecAuditEngine On
   SecAuditLog /var/log/nginx/modsec_audit.log

3. Regla personalizada para bloquear acceso a una ruta específica:

Esta regla bloquea las solicitudes a /admin desde IPs no permitidas.

SecRule REQUEST_URI "@beginsWith /admin" "id:12345,phase:1,deny,log,msg:'Acceso no autorizado a /admin'"

4. Ajustar niveles de severidad para amenazas específicas:

Puedes cambiar la severidad de amenazas específicas para que se registren como advertencias en lugar de errores críticos.

SecDefaultAction "phase:2,log,auditlog,pass"
   SecRule ARGS "@contains ataque" "id:12346,phase:2,log,deny,severity:2,msg:'Intento de ataque detectado'"

Consideraciones de seguridad y rendimiento

  • Modo DetectionOnly en producción inicial: Es recomendable activar ModSecurity en modo DetectionOnly al principio, para evitar bloqueos inesperados mientras se ajustan las reglas.
  • Ajuste de reglas CRS: El conjunto de reglas CRS puede ser estricto; personaliza o desactiva reglas según las necesidades de tu aplicación para evitar falsos positivos.
  • Monitorización de logs: Los logs de auditoría y depuración de ModSecurity ayudan a identificar patrones de ataque y ajustar las reglas.

Referencias

Para más detalles sobre la configuración y uso de ModSecurity con Nginx, consulta la documentación oficial de ModSecurity y la documentación del OWASP Core Rule Set.

Etiquetas:
nginx
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer