Mettre en place un serveur Web (35/28) : Nginx : Se protéger des attaques Flood
Table des matières:
- Conditions préalables
- Installer Certbot
- Générer un groupe Strong 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 et gratuite développée par Internet Security Research Group (ISRG). Aujourd'hui, presque tous les navigateurs font confiance aux certificats émis par Let's Encrypt.
Dans ce didacticiel, 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 CentOS 7.
Conditions préalables
Assurez-vous que vous avez rempli les conditions préalables suivantes avant de poursuivre ce didacticiel:
- Vous avez un nom de domaine pointant vers l'IP de votre serveur public. Dans ce didacticiel, nous utiliserons
example.com
Vous avez activé le référentiel EPEL et installé Nginx en suivant Comment installer Nginx sur CentOS 7.
Installer Certbot
Certbot est un outil facile à utiliser qui peut automatiser les tâches d'obtention et de renouvellement des certificats SSL Let's Encrypt et la configuration des serveurs Web.
Pour installer le package certbot depuis l'exécution du référentiel EPEL:
Générer un groupe Strong 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é.
Générez un nouvel ensemble de paramètres DH à 2048 bits en tapant la commande suivante:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Si vous le souhaitez, vous pouvez modifier la taille jusqu'à 4096 bits, mais dans ce cas, la génération peut prendre plus de 30 minutes selon l'entropie du système.
Obtention d'un certificat SSL Let's Encrypt
Pour obtenir un certificat SSL pour notre domaine, nous allons utiliser le plugin Webroot qui 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.
Pour le rendre plus simple, nous allons mapper toutes les requêtes HTTP pour
.well-known/acme-challenge
dans un répertoire unique,
/var/lib/letsencrypt
.
Les commandes suivantes créeront le répertoire et le rendront accessible en écriture pour le serveur Nginx.
sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp nginx /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
Pour éviter la duplication de code, créez les deux extraits suivants que nous allons inclure dans tous nos fichiers de blocage de serveur Nginx:
sudo mkdir /etc/nginx/snippets
/etc/nginx/snippets/letsencrypt.conf
location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }
/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 TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_prefer_server_ciphers on; 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=15768000; includeSubdomains; preload"; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;
L'extrait ci-dessus 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é.
Une fois les extraits créés, ouvrez le bloc du serveur de domaine et incluez l'extrait
letsencrypt.conf
comme indiqué ci-dessous:
server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }
Rechargez la configuration Nginx pour que les modifications prennent effet:
sudo systemctl reload nginx
Vous pouvez maintenant exécuter Certbot avec le plugin webroot et obtenir les fichiers de certificat SSL pour votre domaine en émettant:
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, certbot imprimera le message suivant:
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 2018-06-11. 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:
Maintenant que vous disposez des fichiers de certificat, vous pouvez modifier votre bloc de serveur de domaine comme suit:
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 }
Avec la configuration ci-dessus, nous forçons HTTPS et redirige la version www vers la version non www.
Enfin, rechargez le service Nginx pour que les modifications prennent effet:
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, nous créerons un cronjob qui s'exécutera deux fois par jour et renouvellera automatiquement tout certificat 30 jours avant son expiration.
Exécutez la commande
crontab
pour créer un nouveau cronjob:
sudo crontab -e
Collez les lignes suivantes:
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"
Enregistrez et fermez le fichier.
Pour tester le processus de renouvellement, vous pouvez utiliser la commande certbot suivie du
--dry-run
:
sudo certbot renew --dry-run
S'il n'y a pas d'erreur, cela signifie que le processus de renouvellement du test a réussi.
Conclusion
Dans ce didacticiel, vous avez utilisé le client Let's Encrypt, certbot pour télécharger des certificats SSL pour votre domaine. Vous avez également créé des extraits de code Nginx pour éviter la duplication de code et configuré Nginx pour utiliser les certificats. À la fin du didacticiel, vous avez configuré un cronjob pour le renouvellement automatique des certificats.
nginx centos chiffrons certbot sslCe message fait partie de la pile Install LEMP sur la série CentOS 7.
Autres articles de cette série:
• Comment installer Nginx sur CentOS 7 • Sécuriser Nginx avec Let's Encrypt sur CentOS 7 • Installer MariaDB sur CentOS 7 • Installer PHP 7 sur CentOS 7 • Comment configurer les blocs serveur Nginx sur CentOS 7Sécurisez Apache avec Let's Encrypt sur Centos 7
Dans ce didacticiel, nous couvrirons les étapes nécessaires pour installer un certificat SSL Let's Encrypt gratuit sur un serveur CentOS 7 exécutant Apache en tant que serveur Web.
Sécurisez Apache avec Let's Encrypt sur Debian 9
Ce tutoriel vous guidera à travers le processus d'obtention d'un Let's Encrypt gratuit à l'aide de l'outil certbot sur Debian 9. Nous montrerons également comment configurer Apache pour utiliser le nouveau certificat SSL et activer HTTP / 2
Sécurisez Nginx avec Let's Encrypt sur Centos 8
Dans ce didacticiel, nous fournirons des instructions étape par étape sur la façon d'installer un certificat SSL Let's Encrypt gratuit sur CentOS 8 exécutant Nginx en tant que serveur Web. Nous montrerons également comment configurer Nginx pour utiliser le certificat SSL et activer HTTP / 2.