Mettre en place un serveur Web (35/28) : Nginx : Se protéger des attaques Flood
Table des matières:
- Conditions préalables
- Installation de Certbot
- Génération du groupe Dh (Diffie-Hellman)
- Obtention d'un certificat SSL Let's Encrypt
- Renouvellement automatique du certificat SSL Let's Encrypt
- Conclusion
Let's Encrypt est une autorité de certification ouverte, automatisée et gratuite développée par Internet Security Research Group (ISRG) qui fournit des certificats SSL gratuits.
Les certificats émis par Let's Encrypt sont approuvés par tous les principaux navigateurs et valides pendant 90 jours à compter de la date d'émission.
Ce tutoriel montre comment installer un certificat SSL Let's Encrypt gratuit sur Debian 10, Buster exécutant Nginx en tant que serveur Web. Nous montrerons également comment configurer Nginx pour utiliser le certificat SSL et activer HTTP / 2.
Conditions préalables
Assurez-vous que les conditions préalables suivantes sont remplies avant de poursuivre avec le guide:
- Connecté en tant qu'utilisateur root ou utilisateur avec les privilèges sudo. Le domaine pour lequel vous souhaitez obtenir le certificat SSL doit pointer vers l'adresse IP de votre serveur public. Nous utiliserons
example.com
.Nginx installé.
Installation de Certbot
Nous utiliserons l'outil certbot pour obtenir et renouveler les certificats.
Certbot est un outil complet et facile à utiliser qui automatise les tâches d'obtention et de renouvellement des certificats SSL Let's Encrypt et la configuration des serveurs Web pour utiliser les certificats.
Le paquet certbot est inclus dans les référentiels Debian par défaut. Exécutez les commandes suivantes pour installer certbot:
sudo apt update
sudo apt install certbot
Génération du groupe Dh (Diffie-Hellman)
L'échange de clés Diffie – Hellman (DH) est une méthode d'échange sécurisé de clés cryptographiques sur un canal de communication non sécurisé.
Nous allons générer un nouvel ensemble de paramètres DH à 2048 bits pour renforcer la sécurité:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Vous pouvez également modifier la taille jusqu'à 4096 bits, mais la génération peut prendre plus de 30 minutes en fonction de l'entropie du système.
Obtention d'un certificat SSL Let's Encrypt
Pour obtenir un certificat SSL pour le domaine, nous allons utiliser le plugin Webroot. Il fonctionne en créant un fichier temporaire pour valider le domaine demandé dans le
${webroot-path}/.well-known/acme-challenge
. Le serveur Let's Encrypt envoie des requêtes HTTP au fichier temporaire pour valider que le domaine demandé est résolu sur le serveur sur lequel s'exécute certbot.
Nous allons mapper toutes les requêtes HTTP pour
.well-known/acme-challenge
dans un seul répertoire,
/var/lib/letsencrypt
.
Exécutez les commandes suivantes pour créer le répertoire et le rendre accessible en écriture pour le serveur Nginx:
mkdir -p /var/lib/letsencrypt/.well-known
chgrp www-data /var/lib/letsencrypt
chmod g+s /var/lib/letsencrypt
Pour éviter la duplication de code, nous créerons deux extraits qui seront inclus dans tous les fichiers de blocage du serveur Nginx.
Ouvrez votre éditeur de texte et créez le premier extrait,
letsencrypt.conf
:
sudo nano /etc/nginx/snippets/letsencrypt.conf
/etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }
Le deuxième extrait
ssl.conf
inclut les déchiqueteurs recommandés par Mozilla, active l'agrafage OCSP, la sécurité de transport stricte HTTP (HSTS) et applique peu d'en-têtes HTTP axés sur la sécurité.
sudo nano /etc/nginx/snippets/ssl.conf
/etc/nginx/snippets/ssl.conf
ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=63072000" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;
Une fois cela fait, ouvrez le fichier de blocage du serveur de domaine et incluez l'extrait
letsencrypt.conf
comme indiqué ci-dessous:
sudo nano /etc/nginx/sites-available/example.com
/etc/nginx/sites-available/example.com
server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }
Créez un lien symbolique vers l'annuaire
sites-enabled
avec les
sites-enabled
pour activer le bloc de serveur de domaine:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Redémarrez le service Nginx pour que les modifications prennent effet:
sudo systemctl restart nginx
Vous êtes maintenant prêt à obtenir les fichiers de certificat SSL en exécutant la commande suivante:
sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
Si le certificat SSL est obtenu avec succès, le message suivant sera imprimé sur votre terminal:
IMPORTANT NOTES: IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-02-22. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:
Modifiez le bloc du serveur de domaine et incluez les fichiers de certificat SSL comme suit:
sudo nano /etc/nginx/sites-available/example.com
/etc/nginx/sites-available/example.com
server { listen 80; server_name www.example.com example.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; #… other code }
La configuration ci-dessus indique à Nginx de rediriger de HTTP vers HTTPS et de www vers une version non www.
Redémarrez ou rechargez le service Nginx pour que les modifications prennent effet:
sudo systemctl restart nginx
Ouvrez votre site Web à l'aide de
https://
et vous remarquerez une icône de verrouillage verte.
Renouvellement automatique du certificat SSL Let's Encrypt
Les certificats de Let's Encrypt sont valables 90 jours. Pour renouveler automatiquement les certificats avant leur expiration, le package certbot crée un cronjob qui s'exécute deux fois par jour et renouvelle automatiquement tout certificat 30 jours avant son expiration.
Lors du renouvellement, le service nginx doit être rechargé pour que le serveur charge le certificat. Ajoutez
--renew-hook "systemctl reload nginx"
au fichier
/etc/cron.d/certbot
pour qu'il ressemble à ceci:
sudo nano /etc/cron.d/certbot
/etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"
Testez le processus de renouvellement automatique, en exécutant cette commande:
sudo certbot renew --dry-run
S'il n'y a pas d'erreur, cela signifie que le processus de renouvellement a réussi.
Conclusion
Avoir un certificat SSL est un must de nos jours. Il sécurise votre site Web, augmente la position de classement SERP et vous permet d'activer HTTP / 2 sur votre serveur Web.
Dans ce didacticiel, nous vous avons montré comment générer et renouveler des certificats SSL à l'aide du script certbot. Nous vous avons également montré comment configurer Nginx pour utiliser les certificats.
Pour en savoir plus sur Certbot, consultez la documentation Certbot.
nginx debian chiffrons certbot sslNginx sécurisé avec Let's Encrypt sur Debian 9
Dans ce tutoriel, nous expliquerons comment utiliser l'outil Certbot pour obtenir un certificat SSL gratuit pour Nginx sur Debian 9. Nous montrerons également comment configurer Nginx pour utiliser le certificat SSL et activer HTTP / 2.
Nginx sécurisé avec Let's Encrypt sur Ubuntu 18.04
Let's Encrypt est une autorité de certification ouverte et gratuite développée par Internet Security Research Group. Dans ce tutoriel, nous fournirons des instructions étape par étape sur la façon de sécuriser votre Nginx avec Let's Encrypt à l'aide de l'outil certbot sur Ubuntu 18.04
Nginx sécurisé avec Let's Encrypt sur Ubuntu 16.04
Dans ce tutoriel, nous fournirons des instructions étape par étape sur la façon de sécuriser votre Nginx avec Let's Encrypt à l'aide de l'outil certbot sur Ubuntu 16.04