Instructions d'installation de NGINX ModSecurity



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.7

Ensuite, 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 On
Ensuite, 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 

Source: https://habr.com/ru/post/fr437032/


All Articles