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.
