GNU/Linux >> Tutoriels Linux >  >> Linux

Comment installer ModSecurity avec Nginx sur Rocky Linux 8

ModSecurity est un pare-feu d'application Web populaire, gratuit et open source utilisé pour protéger les applications Web contre plusieurs types d'attaques, notamment l'injection SQL, les scripts intersites et l'inclusion de fichiers locaux. Il est fréquemment utilisé pour protéger les sites Web, cPanel et autres panneaux de contrôle d'hébergement. Bien que ModSecurity ait été principalement conçu pour le serveur Web Apache, il peut également fonctionner avec le serveur Web Nginx.

Dans cet article, nous allons vous montrer comment installer ModSecurity avec Nginx sur Rocky Linux 8.

Prérequis

  • Un serveur exécutant Rocky Linux 8 sur la plate-forme cloud Atlantic.Net
  • Un mot de passe root configuré sur votre serveur

Étape 1 - Créer un serveur cloud Atlantic.Net

Tout d'abord, connectez-vous à votre serveur Atlantic.Net Cloud. Créez un nouveau serveur en choisissant Rocky Linux 8 comme système d'exploitation avec au moins 2 Go de RAM. Connectez-vous à votre serveur cloud via SSH et connectez-vous à l'aide des informations d'identification mises en évidence en haut de la page.

Une fois connecté à votre serveur, exécutez la commande suivante pour mettre à jour votre système de base avec les derniers packages disponibles.

dnf update -y

Étape 2 - Installer les dépendances requises

Tout d'abord, vous devrez installer toutes les dépendances requises sur votre serveur. Vous pouvez tous les installer avec la commande suivante :

dnf install gcc-c++ flex bison yajl curl-devel curl zlib-devel pcre-devel autoconf automake git curl make libxml2-devel pkgconfig libtool httpd-devel redhat-rpm-config git wget openssl openssl-devel vim
dnf --enablerepo=powertools install doxygen yajl-devel -y

Ensuite, installez les dépôts EPEL et Remi à l'aide de la commande suivante :

dnf install epel-release https://rpms.remirepo.net/enterprise/remi-release-8.rpm -y

Ensuite, installez GeoIP en utilisant la commande suivante :

dnf --enablerepo=remi install GeoIP-devel -y

Étape 3 - Installer ModSecurity

Tout d'abord, téléchargez la dernière version de ModSecurity à l'aide de la commande suivante :

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

Ensuite, changez le répertoire en ModSecurity et installez les autres modules avec la commande suivante :

cd ModSecurity
git submodule init
git submodule update

Ensuite, compilez et installez ModSecurity avec la commande suivante :

./build.sh
./configure
make
make install

Étape 4 - Installer Nginx avec le support LibModsecurity

Afin d'activer la prise en charge de LibModsecurity dans Nginx, vous devrez compiler Nginx avec la prise en charge de LibModsecurity.

Tout d'abord, téléchargez le connecteur ModSecurity-nginx à l'aide de la commande suivante :

cd ../
git clone https://github.com/SpiderLabs/ModSecurity-nginx.git

Ensuite, téléchargez la dernière version stable de Nginx avec la commande suivante :

wget http://nginx.org/download/nginx-1.19.10.tar.gz

Ensuite, extrayez le fichier téléchargé à l'aide de la commande suivante :

tar xzf nginx-1.19.10.tar.gz

Ensuite, créez un utilisateur pour Nginx avec la commande suivante :

useradd -r -M -s /sbin/nologin -d /usr/local/nginx nginx

Ensuite, modifiez le répertoire vers la source Nginx et compilez-le à l'aide de la commande suivante :

cd nginx-1.19.10
./configure --user=nginx --group=nginx --with-pcre-jit --with-debug --with-http_ssl_module --with-http_realip_module --add-module=/root/ModSecurity-nginx

Ensuite, installez-le à l'aide de la commande suivante :

make
make install

Ensuite, copiez l'exemple de fichier de configuration ModSecurity et le fichier de mappage Unicode avec la commande suivante :

cp /root/ModSecurity/modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
cp /root/ModSecurity/unicode.mapping /usr/local/nginx/conf/

Ensuite, sauvegardez le fichier de configuration Nginx :

cp /usr/local/nginx/conf/nginx.conf{,.bak}

Ensuite, modifiez le fichier de configuration Nginx avec la commande suivante :

nano /usr/local/nginx/conf/nginx.conf

Supprimez toutes les lignes et ajoutez les lignes suivantes :

user  nginx;
worker_processes  1;
pid        /run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  nginx.example.com;
        modsecurity  on;
        modsecurity_rules_file  /usr/local/nginx/conf/modsecurity.conf;
        access_log  /var/log/nginx/access_kifarunix-demo.log;
        error_log  /var/log/nginx/error_kifarunix-demo.log;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Enregistrez et fermez le fichier, puis créez un répertoire de journaux Nginx :

mkdir /var/log/nginx

Étape 5 - Créer un fichier de service Systemd pour Nginx

Ensuite, vous devrez créer un fichier de service systemd pour gérer le service Nginx. Vous pouvez le créer à l'aide de la commande suivante :

nano /etc/systemd/system/nginx.service

Ajoutez les lignes suivantes :

[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Enregistrez et fermez le fichier, puis créez un lien symbolique du binaire Nginx à l'aide de la commande suivante :

ln -s /usr/local/nginx/sbin/nginx /usr/sbin/

Ensuite, rechargez le démon systemd pour appliquer les modifications :

systemctl daemon-reload

Ensuite, démarrez le service Nginx et activez-le au redémarrage du système :

systemctl enable --now nginx

Vous pouvez vérifier l'état de Nginx avec la commande suivante :

systemctl status nginx

Vous obtiendrez le résultat suivant :

● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/etc/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2021-11-08 09:59:48 UTC; 5s ago
  Process: 73046 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 73044 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 73043 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 73048 (nginx)
    Tasks: 2 (limit: 11411)
   Memory: 3.2M
   CGroup: /system.slice/nginx.service
           ├─73048 nginx: master process /usr/sbin/nginx
           └─73049 nginx: worker process

Nov 08 09:59:48 rockylinux systemd[1]: Starting The nginx HTTP and reverse proxy server...
Nov 08 09:59:48 rockylinux nginx[73044]: nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
Nov 08 09:59:48 rockylinux nginx[73044]: nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Nov 08 09:59:48 rockylinux systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument
Nov 08 09:59:48 rockylinux systemd[1]: Started The nginx HTTP and reverse proxy server.

Étape 6 - Activer la règle ModSecurity

Vous pouvez l'activer avec la commande suivante :

sed -i 's/SecRuleEngine DetectionOnly/SecRuleEngine On/' /usr/local/nginx/conf/modsecurity.conf

Activez également le journal d'audit avec la commande suivante :

sed -i 's#/var/log/modsec_audit.log#/var/log/nginx/modsec_audit.log#' /usr/local/nginx/conf/modsecurity.conf

Étape 7 - Installer l'ensemble de règles de base OWASP ModSecurity

OWASP fournit des règles génériques de détection d'attaques pour ModSecurity. Vous pouvez le télécharger avec la commande suivante :

git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git /usr/local/nginx/conf/owasp-crs

Ensuite, renommez le fichier de configuration de la règle OWASP à l'aide de la commande suivante :

cp /usr/local/nginx/conf/owasp-crs/crs-setup.conf{.example,}

Définissez ensuite la règle OWASP dans le fichier de configuration de ModSecurity :

echo -e "Include owasp-crs/crs-setup.conf\nInclude owasp-crs/rules/*.conf" >> /usr/local/nginx/conf/modsecurity.conf

Ensuite, redémarrez le service Nginx pour appliquer les modifications :

systemctl restart nginx

Étape 8 - Vérifier ModSecurity

À ce stade, Nginx est installé et configuré avec la prise en charge de ModSecurity. Il est maintenant temps de le tester.

Exécutez l'injection de commande suivante à l'aide de la commande curl :

curl localhost/index.html?exec=/bin/bash

Si tout va bien, vous devriez obtenir l'erreur "403 Forbidden" comme indiqué ci-dessous :

<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.19.10</center>
</body>
</html>

Vous pouvez également consulter le journal ModSecurity pour plus d'informations :

tail -100 /var/log/nginx/modsec_audit.log

Vous devriez voir le résultat suivant :

---imefFQJy---D--

---imefFQJy---E--
<html>\x0d\x0a<head><title>403 Forbidden</title></head>\x0d\x0a<body>\x0d\x0a<center><h1>403 Forbidden</h1></center>\x0d\x0a<hr><center>nginx/1.19.10</center>\x0d\x0a</body>\x0d\x0a</html>\x0d\x0a

---imefFQJy---F--
HTTP/1.1 403
Server: nginx/1.19.10
Date: Mon, 08 Nov 2021 10:00:55 GMT
Content-Length: 154
Content-Type: text/html
Connection: keep-alive

---imefFQJy---H--
ModSecurity: Warning. Matched "Operator `PmFromFile' with parameter `unix-shell.data' against variable `ARGS:exec' (Value: `/bin/bash' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "496"] [id "932160"] [rev ""] [msg "Remote Command Execution: Unix Shell Code Found"] [data "Matched Data: bin/bash found within ARGS:exec: /bin/bash"] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-shell"] [tag "platform-unix"] [tag "attack-rce"] [tag "paranoia-level/1"] [tag "OWASP_CRS"] [tag "OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION"] [tag "WASCTC/WASC-31"] [tag "OWASP_TOP_10/A1"] [tag "PCI/6.5.2"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "1636365655"] [ref "o1,8v21,9t:urlDecodeUni,t:cmdLine,t:normalizePath,t:lowercase"]
ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `5' ) [file "/usr/local/nginx/conf/owasp-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] [line "80"] [id "949110"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Score: 5)"] [data ""] [severity "2"] [ver "OWASP_CRS/3.2.0"] [maturity "0"] [accuracy "0"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "attack-generic"] [hostname "127.0.0.1"] [uri "/index.html"] [unique_id "1636365655"] [ref ""]

Conclusion

Dans le guide ci-dessus, nous avons expliqué comment installer ModSecurity avec Nginx sur Rocky Linux 8. Votre serveur Web Nginx est maintenant sécurisé avec ModSecurity WAF. ModSecurity peut protéger votre serveur d'un large éventail d'attaques. Lancez-vous dès aujourd'hui sur l'hébergement VPS d'Atlantic.Net !


Linux
  1. Comment installer Apache Tomcat 10 avec Nginx sur Rocky Linux 8

  2. Comment installer Varnish 7 pour Nginx sur Rocky Linux 8

  3. Comment installer Gulp.js sur Rocky Linux 8

  4. Comment installer le langage de programmation Rust sur Rocky Linux 8

  5. Comment installer Fail2ban avec Firewalld sur Rocky Linux 8

Comment installer le framework Sails.js avec Nginx sur Rocky Linux 8

Comment installer la dernière ligne principale de Nginx sur Rocky Linux 8

Comment installer phpBB avec LEMP sur Rocky Linux 8

Comment installer l'outil de surveillance Icinga 2 sur Rocky Linux 8

Comment installer Nginx sur Rocky Linux 8

Comment installer Nginx sur Rocky Linux 9