Aller au contenu

sécurité: Connecteur ModSecurity v3 pour Nginx

Installation

CentOS/RHEL/RockyLinux/etc. et Amazon Linux sont pris en charge et nécessitent un abonnement.

Fedora Linux est pris en charge gratuitement et ne nécessite pas d'abonnement.

Guides d'installation et de configuration complets spécifiques au système d'exploitation disponibles :

Autres systèmes d'exploitation pris en charge

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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_modsecurity_module.so;

Ce document décrit nginx-module-security v1.0.4 publié le 21 mai 2025.


Le connecteur ModSecurity-nginx est le point de connexion entre nginx et libmodsecurity (ModSecurity v3). En d'autres termes, ce projet fournit un canal de communication entre nginx et libmodsecurity. Ce connecteur est requis pour utiliser LibModSecurity avec nginx.

Le connecteur ModSecurity-nginx prend la forme d'un module nginx. Le module sert simplement de couche de communication entre nginx et ModSecurity.

Notez que ce projet dépend de libmodsecurity plutôt que de ModSecurity (version 2.9 ou inférieure).

Quelle est la différence entre ce projet et l'ancien module ModSecurity pour nginx ?

L'ancienne version utilise ModSecurity en mode autonome, qui est un wrapper pour les internes d'Apache afin de lier ModSecurity à nginx. Cette version actuelle est plus proche de nginx, consommant la nouvelle libmodsecurity qui n'est plus dépendante d'Apache. En conséquence, cette version actuelle a moins de dépendances, moins de bogues et est plus rapide. De plus, certaines nouvelles fonctionnalités sont également fournies - telles que la possibilité d'utiliser une configuration de règles globales avec des personnalisations par répertoire/emplacement (par exemple, SecRuleRemoveById).

Utilisation

ModSecurity pour nginx étend vos directives de configuration nginx. Il ajoute quatre nouvelles directives et elles sont :

modsecurity

syntaxe : modsecurity on | off

contexte : http, server, location

par défaut : off

Active ou désactive la fonctionnalité ModSecurity. Notez que cette directive de configuration n'est plus liée à l'état de SecRule. Au lieu de cela, elle sert désormais uniquement de drapeau nginx pour activer ou désactiver le module.

modsecurity_rules_file

syntaxe : modsecurity_rules_file <chemin vers le fichier de règles>

contexte : http, server, location

par défaut : non

Spécifie l'emplacement du fichier de configuration modsecurity, par exemple :

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

modsecurity_rules_remote

syntaxe : modsecurity_rules_remote <clé> <URL vers les règles>

contexte : http, server, location

par défaut : non

Spécifie d'où (sur Internet) un fichier de configuration modsecurity sera téléchargé. Il spécifie également la clé qui sera utilisée pour s'authentifier auprès de ce serveur :

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

modsecurity_rules

syntaxe : modsecurity_rules <règle modsecurity>

contexte : http, server, location

par défaut : non

Permet l'inclusion directe d'une règle ModSecurity dans la configuration nginx. L'exemple suivant charge des règles à partir d'un fichier et injecte des configurations spécifiques par répertoire/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

syntaxe : modsecurity_transaction_id string

contexte : http, server, location

par défaut : non

Permet de passer l'ID de transaction de nginx au lieu de le générer dans la bibliothèque. Cela peut être utile à des fins de traçage, par exemple, considérez cette configuration :

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 / {
        ...
    }
}

En utilisant une combinaison de log_format et modsecurity_transaction_id, vous serez en mesure de trouver des corrélations entre les entrées des journaux d'accès et des journaux d'erreurs en utilisant le même identifiant unique.

La chaîne peut contenir des variables.

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-security.