Bonjour à tous,

Aujourd’hui on va voir comment configurer le Web Application Firewall ou WAF NAXSI pour NGINX.

La chose importante, c’est que l’on va utiliser une branche de NAXSI qui supporte HTTP2.

On va aussi importer des règles de base pour WordPress et voir comment protéger un site.

 

Installation de NGINX et du WAF NAXSI :

Nous allons utiliser mon script de build pour installer NGINX avec le support de NAXSI : https://github.com/stylersnico/nginx-openssl-chacha-naxsi/ 

On ne va pas revoir en détail comment compiler nginx : https://www.abyssproject.net/2016/11/compiler-nginx-pourquoi-comment/

 

Téléchargez et lancez le script de build :

cd /tmp && wget --no-check-certificate https://raw.githubusercontent.com/stylersnico/nginx-openssl-chacha/master/build.sh && sh build.sh

 

Répondez N à la première question et Y à la deuxième pour installer NAXSI.

 

Ensuite, allez dans le répertoire NGINX et téléchargez les règles pour wordpress :

cd /etc/nginx
 mkdir naxsi
 mv naxsi_core.rules naxsi/
 cd naxsi && wget https://raw.githubusercontent.com/nbs-system/naxsi-rules/master/wordpress.rules

 

Ouvrez votre fichier de configuration avec la commande suivante :

nano /etc/nginx/nginx.conf

 

Et ajoutez la configuration de NAXSI dans la section HTTP :

http {
        #NAXSI
        include /etc/nginx/naxsi/naxsi_core.rules;

 

Mon nginx.conf complet est disponible ici : https://github.com/stylersnico/my-webserver/blob/master/etc/nginx/nginx.conf

 

Maintenant, ouvrez le vhost de votre site wordpress :

nano /etc/nginx/sites-enabled/abyssproject.vhost

 

Et maintenant, éditez votre section location pour ajouter les blocages de base et les règles spécifiques à WordPress :

        location / {
           try_files $uri $uri/ /index.php?$args;
           SecRulesEnabled;
           CheckRule "$SQL >= 8" BLOCK;
           CheckRule "$RFI >= 8" BLOCK;
           CheckRule "$TRAVERSAL >= 4" BLOCK;
           CheckRule "$EVADE >= 4" BLOCK;
           CheckRule "$XSS >= 8" BLOCK;
           DeniedUrl "/gfy.html"; 
           include /etc/nginx/naxsi/wordpress.rules;
        }

 

Créez un message d’erreur sympathique à la racine de votre site pour les gens qui essayerait de trouver des failles dessus et de les exploiter :

echo "Get the fuck out" > /var/www/wordpress/abyssproject.net/gfy.html

 

Validez la configuration avec nginx :

nginx -t

 

Redémarrez votre serveur web :

systemctl restart nginx

 

 

Et tentez de passer une commande louche par l’URL de votre site pour tester,merci à @Djerfy pour le screen  🙂