GNU/Linux >> Tutoriels Linux >  >> Linux

Comment renforcer et sécuriser le serveur Web NGINX sous Linux

Nginx est sans doute l'un des serveurs Web gratuits et open source les plus utilisés pour l'hébergement de sites Web à fort trafic. Il est bien connu pour sa stabilité, ses performances exceptionnelles, sa faible consommation de ressources et sa configuration allégée. Certains des sites populaires alimentés par Nginx incluent WordPress.com, GitHub, Netflix, Airbnb, Hulu, Eventbrite, Pinterest et SoundCloud pour n'en citer que quelques-uns.

Bien que puissantes et stables, les configurations par défaut ne sont pas sécurisées et des ajustements supplémentaires sont nécessaires pour renforcer le serveur Web et lui donner la sécurité indispensable pour prévenir les attaques et les violations.

Dans cet article, nous abordons certaines des étapes que vous pouvez suivre pour renforcer et sécuriser votre serveur Web Nginx et en tirer le meilleur parti.

1) Implémenter un certificat SSL

L'une des étapes préliminaires et cruciales du renforcement de votre serveur Web Nginx consiste à le sécuriser à l'aide d'un certificat SSL. Le certificat SSL est un certificat numérique cryptographique qui crypte le trafic entre votre serveur Web et les navigateurs Web des visiteurs de votre site. Cela oblige également votre site à utiliser le protocole HTTPS sécurisé et à abandonner HTTP qui envoie le trafic en texte brut. Ce faisant, la communication dans les deux sens est sécurisée et protégée des pirates qui pourraient essayer d'écouter et de voler des informations confidentielles telles que les noms d'utilisateur, les mots de passe et les informations de carte de crédit.

Vous pouvez profiter du certificat SSL gratuit Let's Encrypt, facile à installer et à configurer et valable 90 jours. Une fois que vous l'avez installé, vous pouvez vérifier la force du cryptage SSL en testant votre domaine sur SSL Labs . Les résultats sont affichés ci-dessous.

Comme vous pouvez le voir, le domaine que nous utilisons a obtenu une note B, en raison d'un faible support de protocole surligné en jaune. Nous devons encore faire quelques ajustements pour le faire passer au grade A. Voyons comment nous pouvons améliorer la prise en charge du protocole à l'étape suivante.

2) Désactiver les protocoles SSL/TLS faibles

Comme vous l'avez vu dans les résultats, la mise en œuvre de SSL n'implique pas nécessairement que votre site est entièrement sécurisé. Les versions obsolètes telles que TLS 1.0, TLS 1.1 et SSL 3 sont considérées comme des vulnérabilités faibles et présentes que les pirates peuvent exploiter et éventuellement compromettre votre serveur Web. Ces protocoles sont sujets à des vulnérabilités telles que POODLE, BEAST et CRIME.

En fait, les navigateurs Web les plus populaires et les plus utilisés ont annoncé la fin de la prise en charge de TLS 1.0 et TLS 1.1 dans les délais indiqués.

  • Nom du navigateur           Date
  • Google Chrome           janvier 2020
  • Mozilla Firefox             mars 2020
  • Safari/Webkit               Mars 2020
  • Microsoft Edge             juin 2020

Avec ces informations à portée de main, il serait prudent de se conformer aux derniers protocoles de sécurité, et au moment de la rédaction de cet article, le dernier protocole est TLS 1.2 avec TLS 1.3 attendu plus tard en 2020.

Pour mettre en œuvre TLS 1.2 et TLS 1.3, nous allons modifier deux fichiers :

  • /etc/nginx/nginx.conf  –  Il s'agit du fichier de configuration principal de nginx
  • /etc/nginx/sites-available/example.com (ou /default)

Si vous utilisez Let's Encrypt SSL, assurez-vous de modifier les fichiers suivants

  • /etc/nginx/nginx.conf
  •  /etc/letsencrypt/options-ssl-nginx.conf

Utilisez les étapes suivantes pour désactiver les protocoles SSL/TLS faibles

Étape 1) Modifiez le fichier nginx.conf

Tout d'abord, assurez-vous d'effectuer une sauvegarde du fichier /etc/nginx/nginx.conf avant d'apporter des modifications. Ouvrez ensuite le fichier à l'aide de l'éditeur de texte de votre choix

$ sudo vi /etc/nginx/nginx.conf

Localisez la ligne suivante

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE

Pour désactiver les protocoles faibles, supprimez simplement les protocoles TLSv1 et TLSv1.1 et ajoutez TLSv1.2 et TLSv1.3 à la fin.

ssl_protocols TLSv1.2  TLSv1.3 ; # Dropping SSLv3, ref: POODLE

Cela devrait apparaître comme suit à la ligne 36

Enregistrez et quittez le fichier de configuration.

Étape 2) Modifier le fichier de blocage du serveur Nginx

Des protocoles obsolètes peuvent encore se trouver dans vos fichiers de configuration de bloc de serveur Nginx respectifs. Les fichiers de configuration du bloc sont contenus dans le répertoire /etc/nginx/sites-available/.

Par conséquent, continuez et modifiez votre fichier de configuration de bloc

$ sudo vi /etc/nginx/sites-available/example.com
OR
$ sudo vi /etc/nginx/sites-available/default

Comme précédemment, faites défiler et localisez la ligne suivante

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Encore une fois, supprimez les protocoles TLSv1 et TLSv1.1 et ajoutez le TLSv1.3 à la fin.

REMARQUE : Si vous utilisez Let's Encrypt SSL, modifiez le fichier SSL :

$ sudo vi /etc/letsencrypt/options-ssl-nginx.conf

Pour que les modifications persistent, redémarrez le serveur Web Nginx

$ sudo systemctl restart nginx

Rendez-vous maintenant au test SSL Labs et testez à nouveau votre domaine. Cette fois, vous devriez obtenir une note A comme indiqué.

3)  Empêcher la divulgation d'informations

Une partie du renforcement de votre serveur consiste à limiter autant que possible la divulgation d'informations sur votre serveur Web. Des informations peuvent être divulguées via des en-têtes HTTP ou des rapports d'erreurs. Certaines de ces informations incluent la version de Nginx que vous utilisez, et vous ne voudriez vraiment pas la divulguer aux pirates.

Par défaut, Nginx affiche les informations d'en-tête HTTP lorsque vous exécutez la commande :

$ curl -I http://localhost

À partir de la sortie sur la deuxième ligne, vous pouvez voir que la version de Nginx et le système d'exploitation sur lequel il s'exécute ont été divulgués

Serveur :nginx/1.14.0 (Ubuntu)

La version serait également affichée sur un navigateur Web si une page d'erreur telle qu'une page d'erreur 404 s'affiche comme indiqué.

Pour éviter cette fuite d'informations, modifiez le nginx.conf fichier et sous la section http {, décommentez la ligne suivante

server_tokens off;

Enregistrez les modifications et quittez. Redémarrez ensuite le serveur Web pour que les modifications soient prises en compte.

$ sudo systemctl restart nginx

Rechargez maintenant la page d'erreur et notez la différence. La version et le système d'exploitation que Nginx exécute ont été omis.

Une autre façon de vérifier la quantité d'informations qui fuient de votre serveur Web consiste à visiter le Site de signature du serveur. et vérifiez votre domaine. Si tout va bien, vous obtiendrez la sortie suivante.

4) Débarrassez-vous des méthodes HTTP indésirables

Une autre bonne pratique consiste à désactiver les protocoles indésirables qui ne seront pas implémentés par le serveur Web. La ligne ci-dessous permettra l'implémentation des méthodes GET, POST et HEAD et exclura toutes les autres méthodes, y compris TRACE et DELETE. Ajoutez la ligne suivante dans votre fichier de bloc de serveur.

location / {
limit_except GET HEAD POST { deny all; }
}

5) Désactiver les suites de chiffrement faibles

Outre la mise en œuvre de SSL, fixez-vous pour objectif de désactiver les chiffrements faibles et non sécurisés, y compris les chiffrements RC4. Ceux-ci sont fournis par défaut uniquement à des fins de compatibilité descendante avec les versions précédentes de Nginx et il n'y a aucune bonne raison de les avoir car ils constituent des vulnérabilités potentielles pouvant être exploitées. Par conséquent, dans votre fichier ssl.conf, remplacez les chiffrements par la suite de chiffrement suivante.

'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

6) Supprimez tous les modules inutiles

Pour minimiser davantage le paysage des menaces, il est conseillé de supprimer tous les modules inutiles des paramètres de serveur par défaut. Les meilleures pratiques exigent que vous gardiez un profil allégé et que vous n'activiez que les modules qui sont utilisés pour diffuser du contenu à partir du serveur Web. Soyez prudent, cependant, de ne pas désinstaller ou supprimer les modules dont vous pourriez avoir besoin. Nous vous recommandons d'effectuer des tests dans un environnement d'assurance qualité ou de test avant de décider quels modules doivent être désactivés et lesquels sont nécessaires pour votre serveur Web.

7) Empêcher un meilleur débordement

Dans la gestion de la mémoire, un tampon est un emplacement de stockage qui accueille temporairement les données au fur et à mesure qu'elles commencent à être transférées d'un emplacement de mémoire à un autre.

Lorsque le volume de données dépasse la capacité de la mémoire tampon, un débordement de tampon se produit. En d'autres termes, les dépassements de mémoire tampon se produisent lorsqu'un programme écrit plus de données sur un bloc de mémoire qu'il ne peut en contenir ou en gérer.

Un attaquant peut exploiter cette vulnérabilité pour envoyer du code malveillant qui peut compromettre un système. Comme pratique courante, il est recommandé d'apporter quelques modifications au serveur Web pour atténuer ces problèmes. Ajoutez les lignes de code ci-dessous au fichier nginx.conf.

##buffer policy
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
##end buffer policy

8) Empêcher les attaques XSS

Une attaque XSS (cross-site scripting) est une attaque par laquelle un pirate utilise une application Web pour injecter un code malveillant ou un script côté navigateur dans un site de confiance. Lorsqu'un visiteur du site visite le site, le script est téléchargé et peut accéder à diverses ressources du navigateur telles que les cookies et le jeton de session.

L'une des mesures de prévention contre ce type d'attaque consiste à ajouter la ligne ci-dessous dans le fichier ssl.conf.

add_header X-XSS-Protection "1; mode=block";

9) Évitez les attaques de détournement de clic

Pour éviter les attaques de détournement de clic, ajoutez les X-Frame-Options dans l'en-tête HTTP du fichier nginx.conf comme indiqué

add_header X-Frame-Options "SAMEORIGIN";

Une fois cela fait, enregistrez et redémarrez le serveur Web Nginx.

10) Refuser les agents utilisateurs automatisés

Pour protéger votre serveur des bots et autres scripts automatisés qui peuvent être déployés par des attaquants pour récupérer des informations sur votre site, il est prudent de refuser explicitement des agents utilisateurs spécifiques qui peuvent finalement conduire à des attaques par déni de service DOS. Ajoutez la ligne suivante dans le fichier nginx.conf.

if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}

11) Empêcher les liens dynamiques d'images

Le hotlinking est une pratique dans laquelle un utilisateur relie une image à votre site Web au lieu de télécharger directement l'image sur son site. Lorsque cela se produit, votre image apparaît sur leur site et le revers de la médaille est que vous finissez par payer pour une bande passante supplémentaire.

Pour éviter que cela ne se produise, recherchez la directive d'emplacement dans le fichier de configuration Nginx et ajoutez l'extrait suivant

# Stop deep linking or hot linking
location /images/ {
  valid_referers none blocked www.example.com example.com;
   if ($invalid_referer) {
     return   403;
   }
}

Vous pouvez également spécifier les extensions d'image comme indiqué :

valid_referers blocked www.example.com example.com;
if ($invalid_referer) {
    rewrite ^/images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.example.com/banned.jpg last
}

12) Tenez Nginx à jour

Facile non ? La mise à jour de votre serveur Web est l'un des moyens de sécuriser votre serveur. La mise à jour de votre serveur Web applique les correctifs requis qui corrigent les vulnérabilités préexistantes qui peuvent être exploitées par des pirates pour compromettre votre serveur.

C'était un tour d'horizon de certaines des mesures clés que vous pouvez prendre pour renforcer votre serveur Web Nginx et le protéger des techniques d'exploitation courantes. Cela contribuera grandement à protéger les fichiers de votre site Web ainsi que les visiteurs de votre site.

Lire aussi  :Comment configurer NGINX en tant qu'équilibreur de charge TCP/UDP sous Linux


Linux
  1. Qu'est-ce qu'un serveur Web et comment fonctionne un serveur Web ?

  2. Comment installer le serveur Web Nginx sur Linux

  3. Comment réparer la vulnérabilité DROWN dans le serveur Web Apache/NGINX et SMTP ?

  4. Comment installer et sécuriser le serveur PostgreSQL sur RockyLinux 8

  5. Comment installer RabbitMQ Server et Erlang sous Linux

Comment installer Nginx sur un serveur cloud Arch Linux

Comment ajouter la prise en charge de PHP-FPM sur Apache et Nginx Web Server sur Ubuntu 18.04

Comment installer et configurer Caddy Web Server avec PHP sur Rocky Linux 8

Comment installer et configurer le serveur Web Nginx sur Oracle Linux 8

Comment installer et configurer le serveur DNS sous Linux

Comment installer Nginx sur Rocky Linux 9