Saltar a contenido

seguridad: Conector ModSecurity v3 para Nginx

Instalación

CentOS/RHEL/RockyLinux/etc. y Amazon Linux son compatibles y requieren una suscripción.

Fedora Linux es compatible de forma gratuita y no requiere una suscripción.

Guías de instalación y configuración completas específicas del SO disponibles:

Otros sistemas operativos compatibles

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-security

Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:

load_module modules/ngx_http_modsecurity_module.so;

Este documento describe nginx-module-security v1.0.4 lanzado el 21 de mayo de 2025.


El conector ModSecurity-nginx es el punto de conexión entre nginx y libmodsecurity (ModSecurity v3). Dicho de otra manera, este proyecto proporciona un canal de comunicación entre nginx y libmodsecurity. Este conector es necesario para usar LibModSecurity con nginx.

El conector ModSecurity-nginx toma la forma de un módulo de nginx. El módulo simplemente sirve como una capa de comunicación entre nginx y ModSecurity.

Ten en cuenta que este proyecto depende de libmodsecurity en lugar de ModSecurity (versión 2.9 o inferior).

¿Cuál es la diferencia entre este proyecto y el antiguo complemento ModSecurity para nginx?

La versión antigua utiliza ModSecurity de forma independiente, que es un envoltorio para los internos de Apache para vincular ModSecurity a nginx. Esta versión actual está más cerca de nginx, consumiendo la nueva libmodsecurity que ya no depende de Apache. Como resultado, esta versión actual tiene menos dependencias, menos errores y es más rápida. Además, también se proporciona alguna nueva funcionalidad, como la posibilidad de usar una configuración de reglas global con personalizaciones por directorio/ubicación (por ejemplo, SecRuleRemoveById).

Uso

ModSecurity para nginx extiende tus directivas de configuración de nginx. Agrega cuatro nuevas directivas y son:

modsecurity

sintaxis: modsecurity on | off

contexto: http, server, location

predeterminado: off

Activa o desactiva la funcionalidad de ModSecurity. Ten en cuenta que esta directiva de configuración ya no está relacionada con el estado de SecRule. En cambio, ahora sirve únicamente como una bandera de nginx para habilitar o deshabilitar el módulo.

modsecurity_rules_file

sintaxis: modsecurity_rules_file <ruta al archivo de reglas>

contexto: http, server, location

predeterminado: no

Especifica la ubicación del archivo de configuración de modsecurity, por ejemplo:

server {
    modsecurity on;
    location / {
        root /var/www/html;
        modsecurity_rules_file /etc/my_modsecurity_rules.conf;
    }
}

modsecurity_rules_remote

sintaxis: modsecurity_rules_remote <clave> <URL a reglas>

contexto: http, server, location

predeterminado: no

Especifica desde dónde (en internet) se descargará un archivo de configuración de modsecurity. También especifica la clave que se utilizará para autenticarse en ese servidor:

server {
    modsecurity on;
    location / {
        root /var/www/html;
        modsecurity_rules_remote my-server-key https://my-own-server/rules/download;
    }
}

modsecurity_rules

sintaxis: modsecurity_rules <regla de modsecurity>

contexto: http, server, location

predeterminado: no

Permite la inclusión directa de una regla de ModSecurity en la configuración de nginx. El siguiente ejemplo carga reglas desde un archivo e inyecta configuraciones específicas por directorio/alias:

server {
    modsecurity on;
    location / {
        root /var/www/html;
        modsecurity_rules_file /etc/my_modsecurity_rules.conf;
    }
    location /ops {
        root /var/www/html/opts;
        modsecurity_rules '
          SecRuleEngine On
          SecDebugLog /tmp/modsec_debug.log
          SecDebugLogLevel 9
          SecRuleRemoveById 10
        ';
    }
}

modsecurity_transaction_id

sintaxis: modsecurity_transaction_id string

contexto: http, server, location

predeterminado: no

Permite pasar el ID de transacción desde nginx en lugar de generarlo en la biblioteca. Esto puede ser útil para fines de seguimiento, por ejemplo, considera esta configuración:

log_format extended '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" $request_id';

server {
    server_name host1;
    modsecurity on;
    modsecurity_transaction_id "host1-$request_id";
    access_log logs/host1-access.log extended;
    error_log logs/host1-error.log;
    location / {
        ...
    }
}

server {
    server_name host2;
    modsecurity on;
    modsecurity_transaction_id "host2-$request_id";
    access_log logs/host2-access.log extended;
    error_log logs/host2-error.log;
    location / {
        ...
    }
}

Usando una combinación de log_format y modsecurity_transaction_id podrás encontrar correlaciones entre las entradas del registro de acceso y del registro de errores usando el mismo identificador único.

La cadena puede contener variables.

GitHub

Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de nginx-module-security.