• Assurez la sécurité des applications de la bonne manière! Détectez, protégez, surveillez, accélérez et plus encore…
  • Meilleures pratiques de sécurité Nginx.

    Nginx est le serveur Web à la croissance la plus rapide du secteur et occupe actuellement la deuxième place en termes de parts de marché.

    Il a été initialement publié en 2004, et depuis lors, il a acquis une excellente réputation et utilisé dans les millions de sites les plus fréquentés.

    Il y a une raison à cela - Nginx est brûlant vite.

    Dans cet article, je parlerai de certains des guides essentiels pour sécuriser le Nginx pour un environnement de production. Alors commençons.

    SSL/TLS

    Mettre en œuvre le certificat SSL

    La première étape de la sécurité Web consiste à implémenter SSL afin que vous puissiez accéder aux applications Web avec https et ajouter une couche de cryptage dans la communication.

    • Utiliser OpenSSL pour générer un CSR avec 2048 bits et sha-2
    openssl req -nodes -new -sha256 -newkey rsa:2048 -keyout bestflare.key -out bestflare.csr
    • La commande ci-dessus générera directement les fichiers CSR et clés au travail actuel. N'oubliez pas de changer le nom de fichier .csr et .key.

    Faites signer la CSR par une autorité de certification et une fois que vous avez le certificat signé, vous pouvez les implémenter dans Nginx comme ci-dessous.

    • Connectez-vous au serveur Nginx
    • Accédez au dossier conf où vous avez un fichier ssl.conf.

    Remarque: dans l'installation par défaut sous Linux, vous aurez ce fichier sous /etc/nginx/conf.d.

    • Modifiez le fichier et ajoutez ce qui suit, ce qui permettra à Nginx d'écouter sur le port 443
    server {
    listen       443 ssl;
       server_name bestflare.com;
       ssl                 on;
       ssl_certificate     /opt/cert/bestflare.pem;
       ssl_certificate_key /opt/cert/bestflare.key;
       }

    Remarque: n'oubliez pas de modifier le certificat et le chemin du fichier de clé.

    • Enregistrez la configuration et redémarrez le Nginx. Un certificat SSL est implémenté avec succès.

    bestflare-ssl-cert

    Optimisation SSL / TLS

    Avoir SSL ne signifie pas qu'il est entièrement sécurisé et c'est là qu'en tant qu'expert en sécurité Web, vous devez appliquer une configuration pour sécuriser le serveur Web.

    Pour commencer, je recommanderais d'exécuter un Analyse SSL contre le site Web pour trouver le score et la vulnérabilité essentielle.

    ssl-labs-rating-c

    La classification actuelle de SSL Labs est donc "C" et un objectif est de le rendre "A."

    Désactiver les protocoles SSL / TLS faibles

    SSL 3, TLS 1.0 et TLS 1.1 est vulnérable et nous n'autoriserons qu'un protocole TLS 1.2 fort.

    • Modifiez le fichier ssl.conf et ajoutez ci-dessous dans le bloc serveur
    ssl_protocols       TLSv1.2;
    • Enregistrez le fichier ssl.conf et redémarrez le Nginx

    Désactiver les suites de chiffrement faibles

    Des suites de chiffrement faibles peuvent conduire à une vulnérabilité comme un blocage, et c'est pourquoi nous devons autoriser uniquement le chiffrement fort.

    • Ajoutez ce qui suit au bloc serveur dans le fichier ssl.conf
    ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
    • Enregistrez le fichier et redémarrez Nginx

    Installer le certificat de chaîne

    Ne pas avoir de certificat de chaîne affecte également la note globale et cela peut indiquer une erreur lors de la navigation dans un navigateur moderne comme Chrome. Vous devez obtenir un certificat de chaîne auprès de l'autorité. La plupart du temps, vous le trouverez sur leur site Web ou simplement sur Google.

    • Ajoutez le contenu du certificat de chaîne dans le certificat du site Web comme ci-dessous. Dans mon exemple, ce serait /opt/cert/bestflare.pem

    chaîne de certification

    • Enregistrez le fichier et redémarrez le Nginx

    Sécuriser Diffie-Hellman pour TLS

    Diffie-Hellman est moins sûr qu'on ne le croyait. L'une des meilleures pratiques récemment ajoutées à une liste est de sécuriser Diffie-hellman. La génération d'un groupe DH unique et l'ajout de ssl_dhparam dans le fichier ssl.conf le font.

    • Générer un groupe DH unique en utilisant OpenSSL
    openssl dhparam -out dhparams.pem 4096
    • Cela prendra quelques minutes et générera un fichier dhparams.pem sur un répertoire de travail courant
    • Copiez dhparams.pem dans le dossier cert
    • Modifiez ssl.conf et ajoutez les éléments suivants dans le bloc serveur
    ssl_dhparam    /opt/cert/dhparams.pem;
    • Enregistrez le fichier et redémarrez le Nginx

    Cela devrait être suffisant pour l'optimisation SSL / TLS et testons à nouveau l'URL pour voir la note.

    ssllabs-a-rating

    Woo ho! Alors maintenant tu peux voir que c'est "UNE" note par SSLLabs. Bien joué!

    Voici ssl.conf complet

    # HTTPS server configuration
    server {
       listen       443 ssl;
       server_name bestflare.com;
       ssl                 on;
       ssl_certificate     /opt/cert/bestflare.pem;
       ssl_certificate_key /opt/cert/bestflare.key;
       ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
       ssl_prefer_server_ciphers   on;
       ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
       ssl_dhparam     /opt/cert/dhparams.pem;
    }

    Information Leakage

    Dans l'installation par défaut de Nginx, de nombreuses informations sensibles seront révélées, ce qui peut aider les pirates à se préparer à une attaque.

    Si vous travaillez sur un environnement de conformité PCI, cela est considéré comme une vulnérabilité de fuite d'informations et doit corriger l'élément.

    Vous devez utiliser server_tokens off pour désactiver la fuite d'informations. J'ai expliqué cela dans mon article précédent. Supprimer la version de la bannière d'en-tête du serveur dans Nginx

    Web Application Security

    La configuration par défaut de Nginx n'est pas parfaite et peut avoir de nombreuses vulnérabilités, c'est pourquoi nous les durcissons pour la sécuriser.

    Désactiver les méthodes HTTP indésirables

    La plupart du temps, vous n'avez besoin que d'une requête HTTP GET, HEAD & POST dans votre application Web. Autoriser TRACE ou DELETE est risqué car cela peut permettre une attaque de suivi intersite et potentiellement permettre à un pirate de voler les informations du cookie.

    • Modifiez nginx.conf et ajoutez ce qui suit sous le bloc serveur
    if ($request_method !~ ^(GET|HEAD|POST)$ ) 
    {
    return 405; 
    }

    Enregistrez le fichier et redémarrez le Nginx. Cela montrera maintenant 405 Non autorisé si quelqu'un essaie d'utiliser TRACE, DELETE, PUT, OPTIONS.

    Chandans-iMac:~ chandan$ telnet bestflare.com 80
    Trying 128.199.100.162...
    Connected to bestflare.com.
    Escape character is '^]'.
    TRACE / HTTP/1.1
    Host: testing
    HTTP/1.1 405 Not Allowed
    Server: nginx
    Date: Sat, 11 Jul 2015 06:04:34 GMT
    Content-Type: text/html
    Content-Length: 166
    Connection: close

    Attaque de détournement de clic

    Vous pouvez injecter X-FRAME-OPTIONS dans l'en-tête HTTP pour empêcher une attaque de détournement de clic.

    Ceci est réalisé en ajoutant ci-dessous dans le fichier nginx.conf

    add_header X-Frame-Options "SAMEORIGIN";

    Au-dessus de l'en-tête demandera à un navigateur de charger les ressources UNIQUEMENT à partir de la même origine.

    Protection X-XSS

    Injectez un en-tête HTTP avec protection X-XSS pour atténuer les attaques de script intersite.

    • Modifiez le fichier nginx.conf pour ajouter ce qui suit
    add_header X-XSS-Protection "1; mode=block";
    • Enregistrez le fichier de configuration et redémarrez Nginx. Vous pouvez utiliser le Test des en-têtes outil pour vérifier après la mise en œuvre.

    Vous pouvez également être intéressé par l'implémentation des en-têtes sécurisés recommandés par OWASP qui sont expliqués ici.

    Implémenter Mod Security WAF

    Ajoutez une couche de sécurité supplémentaire en implémentant le pare-feu d'application Web ModSecurity avec Ensemble de règles de base OWASP.

    Sinon, si vous envisagez d'utiliser une sécurité basée sur le cloud comme SUCURI devant le serveur Nginx.

    Gardez Nginx à jour

    Enfin, vous devez garder votre Nginx à jour car de nombreuses améliorations de performances, des correctifs de sécurité et de nouvelles fonctionnalités sont ajoutés.

    J'espère que cela vous aidera à sécuriser votre Nginx.

    Ensuite, vous voudrez peut-être apprendre à construire Nginx pour de hautes performances à partir de zéro.