Recherche de site Web

Comment installer ModSecurity pour Nginx sur Debian/Ubuntu


Chaque développeur souhaite déployer des applications Web sécurisées et à l’abri des menaces. Dans la plupart des cas, c’est plus facile à dire qu’à faire. La fréquence des sites Web piratés ne cesse d’augmenter à mesure que les pirates informatiques continuent d’exploiter tous les vecteurs d’attaque à leur disposition.

La sécurité des applications Web peut constituer un défi de taille, en particulier avec la prévalence d'outils malveillants tels que les rootkits, les scanners, les robots et autres logiciels malveillants. Même si une violation peut sembler une question de savoir quand, voire si, il est prudent de mettre en œuvre des mesures de sécurité décentes pour protéger vos applications Web.

L'un des outils pouvant fournir un niveau de sécurité décent contre les attaques s'appelle ModSecurity. Il s'agit d'un Web Application Firewall (WAF) gratuit et open source qui protège vos applications Web contre une vaste gamme d'attaques de couche 7 telles que les scripts intersites (XSS), injection SQL, détournement de session et bien d'autres encore.

Dans ce guide, nous allons vous montrer comment installer et configurer ModSecurity pour fonctionner avec Nginx sur les distributions Linux basées sur Debian telles que Ubuntu.

Étape 1 : Installer les dépendances

Pour commencer l'installation, un certain nombre de dépendances logicielles sont requises pour que l'installation réussisse. Mais d’abord, mettez à jour les listes de packages et actualisez les référentiels comme suit.

sudo apt update

Ensuite, installez les dépendances comme suit.

sudo apt install make gcc build-essential autoconf automake libtool libfuzzy-dev ssdeep gettext pkg-config libcurl4-openssl-dev liblua5.3-dev libpcre3 libpcre3-dev libxml2 libxml2-dev libyajl-dev doxygen libcurl4 libgeoip-dev libssl-dev zlib1g-dev libxslt-dev liblmdb-dev libpcre++-dev libgd-dev

Étape 2 : Installer la dernière version de Nginx


La prochaine étape consistera à installer le navigateur Web Nginx. Pour installer la dernière version, nous allons l'installer à partir du PPA w ondrej/nginx-mainline qui est actuellement maintenu par un développeur Debian depuis 2000.

Pour ajouter le PPA à votre système Ubuntu local, exécutez la commande :

sudo add-apt-repository ppa:ondrej/nginx-mainline -y

Ensuite, mettez à jour les listes de packages et installez la dernière version de Nginx comme suit

sudo apt update
sudo apt install nginx-core nginx-common nginx nginx-full

En règle générale, seul le référentiel par défaut est activé. Il est prudent d'activer le référentiel de code source afin de pouvoir télécharger ultérieurement le code source Nginx à l'étape suivante.

Pour y parvenir, modifiez le fichier du référentiel Nginx.

sudo vim /etc/apt/sources.list.d/ondrej-ubuntu-nginx-mainline-*.list

Localisez et décommentez cette ligne pour activer le référentiel de code source :

deb-src http://ppa.launchpad.net/ondrej/nginx-mainline/ubuntu/ focal main

Le fichier devrait maintenant apparaître comme indiqué.

Enregistrez les modifications et quittez.

Mettez ensuite à jour l’index du package.

sudo apt update

Étape 3 : Téléchargez le package source Nginx

Pour compiler le module dynamique ModSecurity, nous devons télécharger le package de code source Nginx. Pour ce faire, nous allons d'abord créer un répertoire Nginx dans le chemin /usr/local/src/ pour accueillir le fichier du package de code source Nginx.

sudo mkdir -p /usr/local/src/nginx 

Ensuite, attribuez les autorisations de répertoire comme indiqué. Assurez-vous de remplacer le nom d'utilisateur par votre nom d'utilisateur sudo réel.

sudo chown username:username -R /usr/local/src/

Ensuite, accédez au répertoire source Nginx :

cd /usr/local/src/nginx 

Continuez et téléchargez les packages de fichiers sources Nginx :

sudo apt source nginx

Vous rencontrerez très probablement l’erreur suivante :

W: Download is performed unsandboxed as root as file 'nginx_1.19.5.orig.tar.gz' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

Ce n’est rien pour vous énerver. Alors, ignorez simplement l’erreur.

Vous pouvez jeter un œil au fichier source à l’aide de la commande ls.

ls -l

Assurez-vous que la version du code source coïncide avec la version de Nginx installée.

nginx -v

Étape 4 : Installez la bibliothèque Libmodsecurity3

Libmodesecurity est une bibliothèque Modsecurity qui gère le filtrage HTTP pour vos applications. Il existe deux manières de l'installer. Vous pouvez utiliser le gestionnaire de paquets apt comme indiqué

sudo apt install libmodsecurity3

L'autre approche consiste à l'installer à partir d'une source qui est préférable car elle vous fournit la dernière version. Pour démarrer l'installation de Libmodsecurity à partir de la source, clonez le dépôt git comme indiqué :

git clone --depth 1 -b v3/master --single-branch https://github.com/SpiderLabs/ModSecurity /usr/local/src/ModSecurity/

Accédez au répertoire cloné :

cd /usr/local/src/ModSecurity/

Assurez-vous d'installer les sous-modules

sudo git submodule init
sudo git submodule update

Ensuite, créez l'environnement à l'aide des commandes ci-dessous.

sudo ./build.sh 
sudo ./configure

Encore une fois, ignorez l'erreur affichée ci-dessous.

fatal: No names found, cannot describe anything.

Compilez ensuite le code source et installez d'autres utilitaires à l'aide de la commande make suivante. Cela prend environ 25 minutes et demande un peu de patience.

sudo make -j4

Une fois terminé, installez les bibliothèques.

sudo make install

Étape 5 : Téléchargez et compilez le connecteur Nginx ModSecurity v3

L'étape suivante consiste à télécharger et compiler le connecteur ModSecurity Nginx. Le connecteur, comme son nom l'indique, relie la bibliothèque Libmodsecurity au serveur Web Nginx. Pour télécharger le connecteur Modsecurity, clonez-le depuis le référentiel GitHub comme suit.

git clone --depth 1 https://github.com/SpiderLabs/ModSecurity-nginx.git /usr/local/src/ModSecurity-nginx/

Accédez au répertoire cloné.

cd /usr/local/src/nginx/nginx-1.21.3/

Procéder et installer les dépendances de build

sudo apt build-dep nginx
sudo apt install uuid-dev

Ensuite, compilez le module ModSecurity Nginx Connector avec l'indicateur --with-compat. L'option --with-compat rend le module ModSecurity Nginx Connector compatible binaire avec la bibliothèque Nginx actuelle.

sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/ModSecurity-nginx

Une fois cela fait, créez le module ModSecurity Nginx Connector à l’aide de la commande make.

sudo make modules

Le module est enregistré sous objs/ngx_http_modsecurity_module.so. Vous devez copier ce module dans le répertoire /usr/share/nginx/modules/ comme suit.

sudo cp objs/ngx_http_modsecurity_module.so /usr/share/nginx/modules/

Étape 6 : Charger le module de connecteur ModSecurity Nginx

Pour charger le module de connecteur Nginx, accédez d'abord au fichier de configuration principal de Nginx.

sudo vim /etc/nginx/nginx.conf

Ajoutez la ligne suivante juste en dessous des premières lignes

load_module modules/ngx_http_modsecurity_module.so;

De plus, ajoutez les lignes suivantes dans la section http {...}. Cela active ModSecurity pour tous les hôtes virtuels Nginx.

modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;

Enregistrez les modifications et quittez le fichier.

Ensuite, créez le répertoire /etc/nginx/modsec/ qui stockera la configuration ModSecurity.

sudo mkdir /etc/nginx/modsec/

Ensuite, copiez le fichier de configuration ModSecurity comme suit.

sudo cp /usr/local/src/ModSecurity/modsecurity.conf-recommended /etc/nginx/modsec/modsecurity.conf

Ouvrez ensuite le fichier de configuration.

sudo vim /etc/nginx/modsec/modsecurity.conf

Localisez la ligne commençant par la directive SecRuleEngine.

SecRuleEngine DetectionOnly

Cette ligne demande à ModSecurity de consigner uniquement les transactions HTTP, mais de ne prendre aucune mesure face à une attaque d'application Web. Vous devez modifier cela pour que Modsecurity non seulement détecte mais bloque également les attaques Web.

Remplacez la ligne par la ligne ci-dessous

SecRuleEngine On

Enregistrez les modifications et quittez le fichier.

Ensuite, créez le fichier /etc/nginx/modsec/main.conf.

sudo vim  /etc/nginx/modsec/main.conf

Ajoutez cette ligne pour référencer le fichier de configuration /etc/nginx/modsec/modsecurity.conf.

Include /etc/nginx/modsec/modsecurity.conf

Enregistrez les modifications et quittez le fichier.

De plus, copiez le fichier de mappage Unicode.

sudo cp /usr/local/src/ModSecurity/unicode.mapping /etc/nginx/modsec/

Testez ensuite la configuration de Nginx.

sudo nginx -t

Le test devrait réussir. Sinon, revenez en arrière et vérifiez si toutes les modifications apportées sont correctes.

Puis enfin, redémarrez Nginx pour appliquer toutes les modifications apportées.

sudo systemctl restart nginx

Et vérifiez que Nginx fonctionne comme prévu.

sudo systemctl status nginx

Étape 7 : Téléchargez l’ensemble de règles OWASP

Pour que ModSecurity protège vos applications Web, vous devez spécifier des règles qui vont détecter les activités suspectes et les bloquer. Pour commencer, il est préférable d’installer des ensembles de règles existants qui vous aideront à apprendre les ficelles du métier.

L'OWASP Core Rule Set (CRS) est un ensemble de règles gratuit, open source et géré par la communauté, qui fournit des règles permettant de repousser les vecteurs d'attaque courants tels que l'injection SQL, Scripts intersites (XSS).

Téléchargez l'ensemble de règles de base OWASP depuis Github comme indiqué à l'aide de la commande wget.

wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz

Extrayez le fichier compressé.

tar xvf v3.3.0.tar.gz

Assurez-vous de déplacer le répertoire non compressé vers le chemin /etc/nginx/modsec/.

sudo mv coreruleset-3.3.0/ /etc/nginx/modsec/

Renommez ensuite le fichier crs-setup.conf.example en crs-setup.conf.

sudo mv /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf.example /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf

Encore une fois, revenez au fichier de configuration ModSecurity.

sudo vim /etc/nginx/modsec/main.conf

Et ajoutez les lignes suivantes.

Include /etc/nginx/modsec/coreruleset-3.3.0/crs-setup.conf
Include /etc/nginx/modsec/coreruleset-3.3.0/rules/*.conf

Le fichier devrait maintenant contenir 3 lignes :

Enregistrez le fichier et, encore une fois, redémarrez Nginx.

sudo systemctl restart nginx

Étape 8 : tester ModSecurity

Enfin, nous allons effectuer un test ModSecurity et confirmer qu'il peut détecter et bloquer le trafic HTTP suspect.

Nous allons modifier le fichier de configuration ModSecurity et créer une règle de blocage qui bloquera l'accès à une certaine URL lors de l'accès par un navigateur Web.

sudo vim /etc/nginx/modsec/modsecurity.conf

Ajoutez cette ligne juste en dessous de la directive SecRuleEngine On

SecRule ARGS:testparam "@contains test" "id:254,deny,status:403,msg:'Test Successful'"

Vous pouvez définir les balises 'id' et 'msg' sur vos valeurs préférées.

Enregistrez les modifications et redémarrez Nginx.

sudo systemctl restart nginx

Lancez maintenant votre navigateur et visitez l'URL ci-dessous avec le suffixe ?testparam=test

http://server-ip/?testparam=test

Vous devriez obtenir une erreur 403 « Interdit ». Cela indique que vous essayez d'accéder à une ressource interdite sur le serveur Web.

De plus, vous pouvez consulter les journaux d'erreurs Nginx pour confirmer que le client a été bloqué.

cat /var/log/nginx/error.log | grep "Test Successful"

C'était un aperçu de la façon dont vous pouvez configurer Modsecurity avec Nginx sur Debian et Ubuntu. Nous espérons que cela a été bénéfique.