Comment sécuriser Nginx avec Let’s Encrypt sur FreeBSD

introduction

Let’s Encrypt est une autorité de certification qui fournit un moyen simple d’obtenir et d’installer des certificats TLS / SSL gratuits, permettant ainsi l’utilisation du protocole HTTPS chiffré sur les serveurs Web. Il simplifie le processus en fournissant un logiciel client, Certbot, qui automatise la plupart des étapes.

Dans ce tutoriel, nous allons vous montrer comment utiliser Certbot pour obtenir un certificat SSL gratuit et l’utiliser sur un serveur FreeBSD exécutant Nginx. Nous vous montrerons également comment renouveler automatiquement votre certificat SSL.

Nous utiliserons le fichier de configuration Nginx par défaut dans ce didacticiel au lieu d’un fichier de bloc serveur distinct. https://www.digitalocean.com/community/tutorials/technical-recommendations-and-best-practices-for-digitalocean-s-tutorials#web-servers[Nous vous recommandons généralement de créer de nouveaux fichiers de blocage de serveurs Nginx pour chaque domaine car cela aide à éviter certaines erreurs courantes et maintient les fichiers par défaut comme configuration de secours comme prévu.

Conditions préalables

Pour compléter ce tutoriel, vous aurez besoin de:

  • Un serveur FreeBSD. Si vous débutez avec FreeBSD 11, vous pouvez suivre his guide pour vous aider. Commencer.

  • Nginx installé et configuré sur votre serveur. Pour savoir comment configurer cela, consultez notre guide à l’adresse Comment installer Nginx sur FreeBSD 11.2.

  • Un nom de domaine enregistré que vous possédez et contrôlez. Si vous ne possédez pas déjà un nom de domaine enregistré, vous pouvez en enregistrer un auprès d’un des nombreux bureaux d’enregistrement de noms de domaine (par exemple, Namecheap, GoDaddy, etc.).

  • Un DNS * Un enregistrement * qui pointe votre domaine vers l’adresse IP publique de votre serveur. Vous pouvez suivre cien tutoriel sur les noms d’hôtes pour savoir comment les ajouter. Cela est nécessaire en raison de la façon dont Let’s Encrypt a confirmé que vous êtes propriétaire du domaine pour lequel il a émis un certificat. Par exemple, si vous souhaitez obtenir un certificat pour + example.com +, ce domaine doit être résolu sur votre serveur pour que le processus de validation fonctionne. Notre configuration utilisera + example.com + et + www.example.com + comme noms de domaine, donc * les deux enregistrements DNS sont requis *.

Une fois ces conditions préalables remplies, passons à l’installation de Certbot, le logiciel client Let’s Encrypt.

Étape 1 - Installation de Certbot

La première étape pour utiliser Let’s Encrypt pour obtenir un certificat SSL consiste à installer le logiciel client + certbot + sur votre serveur. La dernière version de Certbot peut être installée à partir des sources à l’aide du ports system de FreeBSD.

Pour commencer, récupérez un instantané compressé de l’arbre des ports:

sudo portsnap fetch

Cette commande peut prendre quelques minutes pour se terminer. Quand il a fini, extrayez l’instantané:

sudo portsnap extract

Cela peut prendre un certain temps pour que cette commande se termine également. Une fois que cela est fait, accédez au répertoire + py-certbot + dans l’arborescence des ports:

cd /usr/ports/security/py-certbot

Puis utilisez la commande + make + avec les privilèges + sudo + pour télécharger et compiler le code source de Certbot:

sudo make install clean

Ensuite, accédez au répertoire + py-certbot-nginx dans l’arborescence des ports:

cd /usr/ports/security/py-certbot-nginx

Exécutez à nouveau la commande + make + à partir de ce répertoire. Ceci installera le plugin + nginx + pour Certbot que nous utiliserons pour obtenir les certificats SSL:

sudo make install clean

Lors de l’installation de ce plugin, vous verrez apparaître deux fenêtres de dialogue bleu ressemblant à ceci:

image: https: //assets.digitalocean.com/articles/letsencrypt_freebsd/py-nginx.png [Exemple de fenêtre de dialogue py-certbot-nginx]

Cela vous donne la possibilité d’installer la documentation du plugin et de ses dépendances. Pour les besoins de ce tutoriel, vous pouvez simplement appuyer sur + ENTER + pour accepter les options par défaut de ces fenêtres dans lesquelles cette documentation sera installée.

Le client + certbot + Let’s Encrypt est maintenant prêt à être utilisé. Avant d’obtenir vos certificats, il est toutefois important de configurer un pare-feu et d’autoriser le trafic HTTPS à travers celui-ci, si ce n’est déjà fait.

Étape 2 - Configuration d’un pare-feu et autorisation d’accès HTTPS

Si vous avez déjà configuré un pare-feu sur votre serveur, vous devez vous assurer qu’il autorise l’accès HTTPS (via le port + 443 +). Si vous n’avez pas encore configuré de pare-feu, vous pouvez le faire en suivant les instructions décrites dans cette étape.

Ouvrez votre fichier + rc.conf +, qui se trouve dans le répertoire + / etc / +, avec votre éditeur préféré. Ici, nous allons utiliser + ee +:

sudo ee /etc/rc.conf

Ce fichier est utilisé pour informer FreeBSD des services qui doivent être démarrés à chaque démarrage de la machine. En haut du fichier, ajoutez les lignes en surbrillance suivantes:

/etc/rc.conf

. . .
nginx_enable="YES"

Voici ce que chacune de ces directives et leurs paramètres font:

  • + firewall_enable =" YES "+ - Ceci permet au pare-feu de démarrer à chaque démarrage du serveur.

  • + firewall_type =" workstation "+ - FreeBSD fournit plusieurs types de pare-feu par défaut, chacun ayant une configuration légèrement différente. En déclarant le type + workstation +, le pare-feu ne protégera ce serveur qu’à l’aide de règles avec état.

  • + firewall_myservices =" 22 / tcp 80 / tcp 443 / tcp "+ - La directive + firewall_myservices + vous permet de répertorier les ports TCP que vous souhaitez autoriser à travers le pare-feu. Dans cet exemple, nous spécifions les ports + 22 +, '+ 80 + et + 443 + `pour autoriser l’accès SSH, HTTP et HTTPS au serveur, respectivement.

  • + firewall_allowservices =" any "+ - Ceci permet à une machine depuis n’importe quelle adresse IP de communiquer via les ports spécifiés dans la directive + firewall_myservices +.

Après avoir ajouté ces lignes, enregistrez le fichier et fermez l’éditeur en appuyant sur + CTRL + C +, en tapant + exit +, puis en appuyant sur + ENTER +.

Ensuite, démarrez le service de pare-feu + ipfw +. Étant donné que c’est la première fois que vous démarrez le pare-feu sur ce serveur, il est possible que cela provoque le blocage de votre serveur, le rendant inaccessible via SSH. La commande + nohup + suivante - qui signifie «pas de blocage» - lancera le pare-feu tout en empêchant le blocage et redirigera également la sortie standard et l’erreur vers un fichier journal temporaire:

sudo nohup service ipfw start >/tmp/ipfw.log 2>&1

Si vous utilisez + csh + ou + tcsh +, cette redirection entraînera une redirection de sortie + ambiguë. + Dans votre sortie. Dans ce cas, exécutez ce qui suit pour démarrer + ipfw +:

sudo nohup service ipfw start >&/tmp/ipfw.log

À l’avenir, vous pourrez gérer le pare-feu + ipfw + comme tout autre service. Par exemple, pour arrêter, démarrer puis redémarrer le service, vous devez exécuter les commandes suivantes:

sudo service ipfw stop
sudo service ipfw start
sudo service ipfw restart

Avec un pare-feu configuré, vous êtes maintenant prêt à exécuter Certbot et à récupérer vos certificats.

Étape 3 - Obtention d’un certificat SSL

Certbot propose diverses méthodes pour obtenir des certificats SSL via divers plugins. Le plugin + nginx + se chargera de la reconfiguration de Nginx et du rechargement du fichier de configuration:

sudo certbot --nginx -d  -d

Si vous utilisez pour la première fois + certbot + sur ce serveur, le client vous invitera à entrer une adresse électronique et à accepter les conditions de service de Let’s Encrypt. Ensuite, + certbot + communiquera avec le serveur Let’s Encrypt, puis lancera un défi afin de vérifier que vous contrôlez le domaine pour lequel vous demandez un certificat.

Si le défi réussit, Certbot vous demandera comment vous souhaitez configurer vos paramètres HTTPS:

Output. . .
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Sélectionnez votre choix puis appuyez sur + ENTER. Cela mettra à jour la configuration et rechargera Nginx pour récupérer les nouveaux paramètres. + certbot + se terminera par un message vous informant que le processus a abouti et où vos certificats sont stockés:

OutputIMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /usr/local/etc/letsencrypt/live/example.com/fullchain.pem
  Your key file has been saved at:
  /usr/local/etc/letsencrypt/live/example.com/privkey.pem
  Your cert will expire on 2018-09-24. 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"
- Your account credentials have been saved in your Certbot
  configuration directory at /usr/local/etc/letsencrypt. You should
  make a secure backup of this folder now. This configuration
  directory will also contain certificates and private keys obtained
  by Certbot so making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:

  Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
  Donating to EFF:                    https://eff.org/donate-le

Vos certificats sont maintenant téléchargés, installés et configurés. Essayez de recharger votre site Web en utilisant + https: // + et notez l’indicateur de sécurité de votre navigateur. Cela devrait représenter que le site est correctement sécurisé, généralement avec une icône de verrou vert. Si vous testez votre serveur à l’aide du SSL Labs Server Test, il obtiendra une note * A *.

Après avoir confirmé que vous pouvez accéder à votre site via HTTPS, vous pouvez passer à la dernière étape de ce didacticiel, dans laquelle vous confirmerez que vous pouvez renouveler vos certificats, puis configurez un processus pour les renouveler automatiquement.

Étape 4 - Vérification du renouvellement automatique de Certbot

Les certificats de Let Encrypt ne sont valables que quatre-vingt-dix jours. Cela encourage les utilisateurs à automatiser leur processus de renouvellement des certificats. Cette étape explique comment automatiser le renouvellement du certificat en configurant une tâche + cron +. Avant de configurer ce renouvellement automatique, il est toutefois important de vérifier que vous êtes en mesure de renouveler les certificats correctement.

Pour tester le processus de renouvellement, vous pouvez effectuer un essai à blanc avec + certbot +:

sudo certbot renew --dry-run

Si vous ne voyez aucune erreur, vous êtes tous prêts à créer une nouvelle crontab:

sudo crontab -e

Cela ouvrira un nouveau fichier + crontab +. Ajoutez le contenu suivant au nouveau fichier, qui indiquera + cron + pour exécuter la commande + certbot renew + deux fois par jour, à midi et à minuit. + certbot renew + vérifie si les certificats du système sont sur le point d’expirer et tentera de les renouveler si nécessaire:

0 0,12 * * * /usr/local/bin/certbot renew

Notez que comme vous avez précédé la commande + crontab -e + avec + sudo +, cette opération sera exécutée en tant que * root *, ce qui est nécessaire car certbot requiert les privilèges de superutilisateur.

En cas d’échec du processus de renouvellement automatique, Let’s Encrypt enverra un message au courrier électronique que vous avez spécifié pour vous avertir de l’expiration de votre certificat.

Conclusion

Dans ce tutoriel, nous avons installé le client Let’s Encrypt + certbot +, téléchargé les certificats SSL de notre domaine, configuré Nginx pour utiliser ces certificats et configuré le renouvellement automatique du certificat. Si vous avez d’autres questions sur l’utilisation de Certbot, their documentation est un bon point de départ.