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.
- Utilisez 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.
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.
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
- 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.
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.