
Cet article fournit des instructions pour l'installation du module Dynamic ModSecurity sur le serveur Web NGINX en tant que pare-feu d'application Web (WAF). NGINX fonctionne en
mode proxy inverse . Le travail a été effectué sur la distribution Linux -
CentOS 7 . Le module est défini comme «dynamique» afin que le service reste flexible dans la configuration. Le
guide d' installation
officiel de NGINX est utilisé.
1. Préinstallation des composants
Pour que le service fonctionne correctement, des bibliothèques supplémentaires doivent être installées pour fonctionner. Des bibliothèques seront nécessaires pour construire un projet à partir du code source. Il est supposé que l'utilisateur dispose d'un système mis à jour (
# yum update ).
yum install install -y apt-utils autoconf automake build-essential git libcurl4-openssl-dev libgeoip-dev liblmdb-dev libpcre++-dev libtool libxml2-dev libyajl-dev pkgconf wget zlib1g-dev
2. Démarrer l'installation du service
Pour qu'il n'y ait aucun problème avec le démarrage du service à l'aide de la commande
service nginx start , une version est installée à partir du référentiel officiel sur GitHub.
Créez le fichier
/etc/yum.repos.d/nginx.repo dans lequel vous souhaitez ajouter la version de distribution. Sans spécifier la version NGINX, la dernière lancée sur le site est remontée.
[nginx-1.13.7] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
Ensuite, installez simplement
yum install nginx
3. Compilation du module

Pour commencer, accédez au répertoire approprié:
cd /home/user/Downloads
Téléchargez le module depuis la branche principale sur GitHub:
git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity.git
Ensuite, allez dans le dossier avec le pare-feu et compilez le code source:
cd ModSecurity git submodule init git submodule update ./build.sh ./configure make make install
4. Installez le connecteur
Afin que l'ensemble du système soit flexible, un connecteur sera installé pour connecter
NGINX et ModSecurity . Cela signifie que le module ne sera pas câblé dans le code du serveur, mais seulement un composant dynamique, ce qui permettra de le supprimer à tout moment, de changer le code, etc.
git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git
5. Reconstruisez le serveur Web
Pour que NGINX fonctionne avec le connecteur auquel le module sera connecté, vous devez reconstruire le serveur. Pour ce faire, découvrez d'abord quelle version de NGINX est installée:
nginx –v
La sortie devrait être quelque chose comme ça (selon la version)
version nginx: nginx / 1.13.7Ensuite, téléchargez la version appropriée sur le site officiel afin qu'il n'y ait aucune erreur lors du démarrage du service et compilez avec un certain paramètre:
cd .. wget http://nginx.org/download/nginx-1.13.7.tar.gz tar zxvf nginx-1.13.7.tar.gz cd nginx-1.13.7 ./configure --with-compat --add-dynamic-module=../ModSecurity-nginx make modules
Ensuite, copiez le fichier du module dans le dossier du service Web:
cp objs/ngx_http_modsecurity_module.so /etc/nginx/modules
Avant le premier bloc dans
/etc/nginx/nginx.conf, ajoutez:
load_module modules/ngx_http_modsecurity_module.so;
6. Fichier de configuration du module
Les développeurs proposent leurs règles de base pour protéger une ressource Web. Il convient de noter que, après les avoir installés, il ne faut pas compter sur un niveau décent, car les créateurs laissent une totale liberté de configuration et d'écriture des règles à l'utilisateur, ce qui les limite à ajouter des règles de base au fichier de configuration standard.
mkdir /etc/nginx/modsec cd /etc/nginx/modsec sudo wget https://raw.githubusercontent.com/SpiderLabs/ModSecurity/v3/master/modsecurity.conf-recommended sudo mv modsecurity.conf-recommended modsecurity.conf
Dans le fichier
modsecurity.conf, remplacez
SecRuleEngine DetectionOnly par
SecRuleEngine OnEnsuite, créez le fichier
/etc/nginx/modsec/main.conf et ajoutez-le:
# Include the recommended configuration Include /etc/nginx/modsec/modsecurity.conf
7. Règles OWASP
Ce n'est un secret pour personne que
OWASP est un chef de file en matière de sécurité Web. Ils ont leur propre set pour ce module qui, comme le projet, est ouvert aux utilisateurs. Par conséquent, installez-le comme un ensemble de règles de base:
cd /usr/local wget https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.0.0.tar.gz tar -xzvf v3.0.0.tar.gz mv owasp-modsecurity-crs-3.0.0 /usr/local cd /usr/local/owasp-modsecurity-crs-3.0.0 cp crs-setup.conf.example crs-setup.conf
Dans
/etc/nginx/modsec/main.conf, ajoutez ce qui suit:
# OWASP CRS v3 rules Include /usr/local/owasp-modsecurity-crs-3.0.0/crs-setup.conf Include /usr/local/owasp-modsecurity-crs-3.0.0/rules/*.conf
8. Achèvement des travaux
Dans le fichier
/etc/nginx/conf.d/proxy.conf ajoutez
server { listen 80; modsecurity on; modsecurity_rules_file /etc/nginx/modsec/main.conf; # If you have proxy location / { proxy_pass http://192.168.xx; } }
9. Bilan de santé
Pour vérifier les composants d'un service Web, démarrez-le et examinez les erreurs. Souvent, vous devrez supprimer la règle qui est chargée de vérifier où un autre module est utilisé (
GeoIP , par exemple). Par conséquent, vous pouvez supprimer cette règle en toute sécurité.
rm /usr/local/owasp-modsecurity-crs-3.0.0/rules/REQUEST-910-IP-REPUTATION.conf
Une erreur liée à
Unicode est également possible. Pour qu'il n'interfère pas avec le service, nous le commentons simplement dans le fichier de configuration (
à la fin ).
#SecUnicodeMapFile unicode.mapping 20127
Utilisez l'utilitaire
curl pour tester le serveur. Il montrera si l'application revient. Si tout est correct, un opt avec un code de
200 OK viendra à vous
curl -I 127.0.0.1
Pour vérifier le fonctionnement des mécanismes de protection, vous pouvez utiliser n'importe quel utilitaire conçu à cet effet. Il est suggéré d'utiliser
nikto comme recommandations:
nikto -host localhost
Pour démarrer le serveur:
service nginx start