ModSécurité est un pare-feu d'application Web (WAF) open source pour Apache Nginx et le serveur Web IIS. Ce pare-feu de couche application est développé par SpiderLabs de Trustwave et publié sous licence Apache 2.0. ModSecurity protège les sites Web contre les pirates en utilisant un ensemble de règles d'expression régulière pour filtrer les exploits connus, il permet la surveillance du trafic HTTP, la journalisation, l'analyse en temps réel et la détection des attaques. Il existe plus de 16 000 règles disponibles pour détecter les attaques telles que l'injection SQL, le script intersite (XSS), l'inclusion de fichiers locaux, l'inclusion de fichiers distants et des règles spécifiques à l'application pour de nombreuses applications Web telles que Wordpress, Joomla, Drupal, etc.
Dans ce tutoriel, je vais vous montrer comment installer mod_security pour le serveur Web rapide Nginx. Je vais configurer ModSecurity en tant que module autonome, puis créer Nginx à partir de la source pour inclure ModSecurity.
Prérequis
- Un serveur Ubuntu 15.04, j'utiliserai ici l'IP 192.168.1.106.
- Privilèges racine
Ce que nous allons faire dans ce didacticiel :
- Mettre à jour le système et le référentiel Ubuntu 15.04.
- Installez les dépendances requises pour créer Nginx et ModSecurity.
- Téléchargez ModSecurity et Nginx.
- Installez ModSecurity et Nginx.
- Configurer Nginx.
- Configurer ModSecurity.
- Configurer l'ensemble de règles de base OWASP (CRS).
- Test.
Toutes les commandes ci-dessous doivent être exécutées en tant que root. Exécuter :
sudo -i
pour devenir utilisateur root sur votre serveur.
1. Mettre à jour le système et le référentiel
Avant de commencer à installer toutes les dépendances, veuillez mettre à jour votre système :
apt-get update
apt-get upgrade
2. Installez les dépendances de compilation
Installez tous les packages requis pour compiler Nginx et ModSecurity avec la commande apt ci-dessous :
apt-get install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev
3. Télécharger ModSecurity et Nginx
Allez dans le répertoire "/usr/src/" , puis clonez le dépôt ModSecurity depuis Github :
cd /usr/src/
git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity
Téléchargez Nginx avec la commande wget, j'utiliserai ici la version stable 1.8 de Nginx. Si vous souhaitez utiliser une autre version, rendez-vous sur la page de téléchargement de Nginx pour obtenir une liste de toutes les versions disponibles.
wget http://nginx.org/download/nginx-1.8.0.tar.gz
4. Installez ModSecurity et Nginx
Il est maintenant temps d'installer ModSecurity, veuillez vous rendre dans le répertoire /usr/src/modsecurity :
cd /usr/src/modsecurity/
Et compilez ModSecurity en tant que module autonome sur votre serveur, afin que nous puissions l'inclure dans Nginx :
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make
Allez maintenant dans le répertoire nginx, compilez Nginx et incluez le module ModSecurity :
cd ../nginx-1.8.0
./configure \
--user=www-data \
--group=www-data \
--with-debug \
--with-ipv6 \
--with-http_ssl_module \
--add-module=/usr/src/modsecurity/nginx/modsecurity
La commande configure expliquée :
Nginx fonctionnera sous l'utilisateur et le groupe "www-data" , et nous activons le debug, ipv6 et ssl modules. Et enfin, nous incluons le module ModSecurity dans Nginx.
Installez maintenant Nginx :
make
make install
Lorsque la commande make install est terminée, vous pouvez voir que Nginx est installé dans le "/usr/local/nginx" répertoire :
cd /usr/local/nginx/
ll
drwxr-xr-x 2 root root 4096 Oct 3 07:21 conf/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 html/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 logs/
drwxr-xr-x 2 root root 4096 Oct 3 07:21 sbin/
5. Configurer Nginx
Modifiez le fichier de configuration nginx avec vi/vim et configurez nginx pour qu'il s'exécute sous l'utilisateur "www-data" .
cd /usr/local/nginx/
vi conf/nginx.conf
Sur la première ligne, décommentez la ligne "user" et changez l'utilisateur en www-data :
user www-data;
Sauvegardez et quittez.
Créez un lien symbolique pour le binaire nginx afin que nous puissions utiliser la commande "nginx" par directement.
ln -s /usr/local/nginx/sbin/nginx /bin/nginx
Ensuite, nous allons créer un script systemd pour Nginx qui est utilisé pour démarrer/arrêter le démon Nginx. Veuillez vous rendre dans le répertoire "/lib/systemd/system/" et créez un nouveau fichier "nginx.service" avec vi :
cd /lib/systemd/system/
vi nginx.service
Collez le script ci-dessous :
[Service] Type=forking ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload KillStop=/usr/local/nginx/sbin/nginx -s stop KillMode=process Restart=on-failure RestartSec=42s PrivateTmp=true LimitNOFILE=200000 [Install] WantedBy=multi-user.target
Sauvegardez et quittez.
Rechargez maintenant le démon systemd pour que systemd charge notre nouveau fichier de service Nginx.
systemctl daemon-reload
Testez la configuration de nginx et démarrez nginx avec la commande systemctl :
nginx -t
systemctl start nginx
6. Configurer ModSecurity
Copiez le fichier de configuration ModSecurity dans le répertoire nginx et nommez-le "modsecurity.conf" :
cp /usr/src/modsecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /usr/src/modsecurity/unicode.mapping /usr/local/nginx/conf/
Ouvrez le fichier modsecurity.conf avec l'éditeur vi :
cd /usr/Local/nginx/conf/
vi modsecurity.conf
A la ligne 7, changez "DetectionOnly" à "sur" .
SecRuleEngine On
À la ligne 38, augmentez la valeur de "SecRequestBodyLimit " à "100000000".
SecRequestBodyLimit 100000000
À la ligne 192, modifiez la valeur de "SecAuditLogType " à "simultané " et commentez la ligne SecAuditLog et décommentez la ligne 196.
SecAuditLogType Concurrent
#SecAuditLog /var/log/modsec_audit.log
# Specify the path for concurrent audit logging.
SecAuditLogStorageDir /opt/modsecurity/var/audit/
Sauvegardez et quittez.
Créez maintenant un nouveau répertoire pour le journal d'audit ModSecurity et changez le propriétaire en www-data.
mkdir -p /opt/modsecurity/var/audit/
chown -R www-data:www-data /opt/modsecurity/var/audit/
7. Configurer l'ensemble de règles de base OWASP (CRS)
Téléchargez l'ensemble de règles de base OWASP à partir de github.
cd /usr/src/
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
Allez dans le répertoire "owasp-modsecurity-crs " et copiez le répertoire "base_rules" dans le répertoire nginx.
cd owasp-modsecurity-crs
cp -R base_rules/ /usr/Local/nginx/conf/
Modifiez modsecurity.conf et ajoutez OWASP CRS.
cd /usr/Local/nginx/conf/
vi modsecurity.conf
Veuillez aller à la fin du fichier et ajouter la configuration suivante :
#DefaultAction SecDefaultAction "log,deny,phase:1" #If you want to load single rule /usr/loca/nginx/conf #Include base_rules/modsecurity_crs_41_sql_injection_attacks.conf #Load all Rule Include base_rules/*.conf #Disable rule by ID from error message (for my wordpress) SecRuleRemoveById 981172 981173 960032 960034 960017 960010 950117 981004 960015
Sauvegardez et quittez.
Comme dernière étape, ajoutez le fichier modsecurity.conf à la configuration Nginx en éditant le "nginx.conf " fichier.
vi conf/nginx.conf
Ajoutez le modsecurity.conf :
[.....]
#Enable ModSecurity ModSecurityEnabled on; ModSecurityConfig modsecurity.conf; root html; index index.php index.html index.htm;
[.....]
Enregistrez et quittez.
Redémarrez Nginx pour appliquer les modifications de configuration :
systemctl restart nginx
8. Test
J'ai un site WordPress fonctionnant sur Nginx et ModSecurity, il fonctionne bien. Pour les tests, je vais installer un nouveau plug-in vulnérable pour XSS et l'injection SQL.
Voici les résultats :
XSS interdit
https://www.exploit-db.com/exploits/37107/
Accès navigateur :
Journal du serveur :
Injection SQL interdite
https://www.exploit-db.com/exploits/37560/
Accès navigateur :
Journal du serveur :
Nginx et ModSecurity avec succès.
Conclusion
ModSecurity est un WAF (Web Application Firewall) open source développé par SpiderLabs de Trustwave pour sécuriser vos applications web. Il existe plus de 16 000 règles disponibles pour détecter les attaques telles que l'injection SQL, XSS, LFI, RFI, etc. ModSecurity est facile à installer et disponible sous forme de module pour Apache, Nginx et IIS pour Windows.
Référence
- https://www.modsecurity.org/documentation.html
- https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project
- https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual