GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment installer Nginx avec ModSecurity sur Ubuntu 15.04

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

Ubuntu
  1. Comment installer WordPress avec Nginx sur Ubuntu 18.04

  2. Comment installer phpMyAdmin avec Nginx sur Ubuntu 18.04

  3. Comment installer MediaWiki avec Nginx sur Ubuntu 16.04

  4. Comment déployer Modsecurity avec Nginx sur Ubuntu 20.04 LTS

  5. Comment installer PHP 7.4 avec Nginx sur Ubuntu 20.04

Comment installer OSClass avec Nginx sur Ubuntu 20.04

Comment installer WordPress 5.x avec Nginx sur Ubuntu 18.04 / Ubuntu 16.04

Comment installer WordPress avec Nginx sur Ubuntu

Comment installer Nextcloud 13 sur Ubuntu 16.04 avec Nginx

Comment installer WonderCMS sur Ubuntu 20.04 (avec Nginx)

Comment installer Nginx sur Ubuntu 15.04