Proxy inversé nginx avec https via lesencrypt

Proxy inversé nginx avec https via lesencrypt
Ceci est un suivi sur mon post précédent où nous configurons un serveur proxy inverse simple à l'aide de Nginx. Dans cet article, nous fixerons la connexion entre le client et le serveur proxy inversé à l'aide de TLS gratuite (un.k.un certificat SSL) de LetSencrypt. Je vous encourage à consulter le message susmentionné sur le proxy inversé pour les bases.

Conditions préalables

  1. Un serveur avec une adresse IP publique statique. C'est là que Nginx fonctionne.
  2. Serveurs backend avec le site Web prévu sur HTTP
  3. Un nom de domaine enregistré. J'utiliserai Ranvirslog.com comme nom de domaine principal et les deux sites Web sont au FQDNS - WW1.ranvirslog.com et ww2ranvirslog.com

Installation

Les adresses IP ont donc changé depuis la dernière fois, car je recommence cette configuration. Voici les nouveaux ips et noms d'hôtes.

VM / Nom d'hôte IP publique IP privé Rôle / fonction
Reverser 68.183.214.151 dix.135.127.136 Point de terminaison TLS et serveur proxy inversé
web1 N / A dix.135.126.102 Hébergement de la Seconde Guerre mondiale.ranvirslog.com

site Web sur le port 80 http

web2 N / A dix.135.126.187 Hébergement

WW2.ranvirslog.com

site Web sur le port 80 http

Les enregistrements DNS sont configurés comme tels les deux sites Web (différents sous-domaines) pointent vers la même IP publique statique. Il s'agit de l'adresse IP de notre proxy inversé Nginx:

Un enregistrement Valeur
WW1.ranvirslog.com 68.183.214.151
WW2.ranvirslog.com 68.183.214.151

Pour faire fonctionner notre DNS inversé sur HTTP non crypté, nous avons créé deux fichiers en / etc / conf.d / nommé WW1.conf et WW2.Conf chacun avec la configuration suivante:

/ etc / confr.d / ww1.confli

serveur
Écoutez 80;
Écoutez [::]: 80;
server_name ww1.ranvirslog.com;
emplacement /
proxy_pass http: // 10.135.126.102 /;
proxy_buffering off;
proxy_set_header x-real-ip $ Remote_addr;

/ etc / confr.d / ww2.confli

serveur
Écoutez 80;
Écoutez [::]: 80;
server_name ww2.ranvirslog.com;
emplacement /
proxy_pass http: // 10.135.126.187 /;
proxy_buffering off;
proxy_set_header x-real-ip $ Remote_addr;

Le système d'exploitation que nous utilisons est Ubuntu 18.04 LTS et nous avons supprimé Le fichier / etc / nginx / sites compatible / par défaut afin que nginx puisse agir uniquement comme un DNS inversé en utilisant les configurations illustrées ci-dessus.

Objectif

Avec le DNS inversé (et les sites Web backend) déjà opérationnels, notre objectif est d'installer un seul certificat TLS pour les deux FQDN (c'est-à-dire la Seconde Guerre mondiale.ranvirslog.com et ww2.ranvirslog.com) sur notre proxy inversé nginx.

Le trafic entre tout client et le proxy inversé va être crypté, mais le trafic entre le proxy inversé et les serveurs backend n'est pas crypté. Cependant, c'est encore une option infiniment plus sécurisée que de ne pas avoir du tout HTTPS. Pour les cas où le proxy inversé et les différents serveurs Web sont sur le même hôte, disons que si vous utilisez des conteneurs Docker pour héberger tout sur le même VPS, alors même ce trafic non crypté est contenu sur un seul hôte.

Installation de certificat

CERTBOT est un programme client qui s'exécutera sur notre serveur de proxy inversé et négociera un certificat TLS avec Letsencrypt. Il s'avérera à laisser le Cringpt que le serveur a en fait le contrôle des FQDN qu'il prétend avoir le contrôle. Nous ne nous inquiéterons pas de la façon dont CERTBOT le fait.

Traditionnellement, vous pouvez utiliser CERTBOT comme logiciel autonome qui obtiendra simplement les certificats (qui ne sont essentiellement que de longues clés cryptographiques) et l'enregistrer sur le serveur. Mais heureusement, pour la plupart des systèmes d'exploitation, il existe des plugins personnalisés pour Nginx, Apache et d'autres logiciels. Nous allons installer le certificat avec le plugin Nginx. Cela configurera automatiquement Nginx pour utiliser les touches nouvellement obtenues et se débarrasser des règles non sécurisées comme écouter HTTP sur le port 80.

Si vous utilisez des systèmes basés sur Debian, comme dans mon cas, j'utilise Ubuntu 18.04 LTS, alors l'installation est un jeu d'enfant.

$ sudo apt mise à jour
$ sudo apt installer logiciel-properties-commun
$ sudo add-att-repository univers
$ sudo add-att-repository ppa: Certbot / Certbot
$ sudo apt mise à jour
$ sudo apt installer python-certbot-nginx

D'autres systèmes d'exploitation, votre Redhat, Gentoo, Fedora peuvent suivre les instructions officielles comme indiqué ici.

Une fois que vous avez installé CERTBOT avec plugin Nginx Pour votre combinaison d'OS, nous pouvons nous rendre aux affaires.

Obtenir des certificats TLS

Pour obtenir le certificat TLS pour la première fois, exécutez la commande suivante:

$ sudo Certbot --nginx

Cela va traverser une série de questions interactives, comme indiqué ci-dessous:

  1. Entrer votre Email

Sauver le journal de débogage à / var / log / lesencrypt / letsencrypt.enregistrer
Plugins sélectionnés: Authenticatrice Nginx, installateur Nginx
Entrez l'adresse e-mail (utilisée pour les avis de renouvellement et de sécurité urgents) (entrez «C» pour annuler): John @ exmaple.com

  1. Accepter Tos

Veuillez lire les conditions d'utilisation de https: // letSencrypt.org / documents / le-sa-v1.2-novembre-15-2017.pdf. Vous devez être d'accord afin de vous inscrire auprès du serveur ACME sur https: // acme-v02.API.Laissez-le.org / répertoire
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) Gree / (c) ANCEL: A

  1. Newsletter en option

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Seriez-vous prêt à partager votre adresse e-mail avec la Fondation Electronic Frontier, un partenaire fondateur du projet Let's Encrypt et de l'organisation à but non lucratif qui développe CERTBOT? Nous aimerions vous envoyer des e-mails sur notre travail Encryportant le Web, les nouvelles EFF, les campagnes et les moyens de soutenir la liberté numérique.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es / (n) o: y

  1. Il détectera ensuite les noms de domaine de votre serveur, et si vous souhaitez sélectionner tous les domaines, appuyez simplement sur

Quels noms aimeriez-vous activer https pour?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: WW1.ranvirslog.com
2: WW2.ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Sélectionnez les numéros appropriés séparés par des virgules et / ou des espaces, ou laissez l'entrée vide pour sélectionner toutes les options affichées (entrez 'C' pour annuler):

  1. Redirigez tout vers TLS. J'ai choisi l'option 2, pour tout rediriger vers SSL mais votre cas d'utilisation peut différer. Pour les nouvelles installations backend, il est sûr de choisir l'option 2.

Veuillez choisir de rediriger ou non le trafic HTTP vers HTTPS, en supprimant l'accès HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Pas de redirection - ne modifiez pas d'autres modifications à la configuration du serveur Web.
2: Redirection - Faites toutes les demandes de redirection pour sécuriser l'accès HTTPS. Choisissez ceci pour les nouveaux sites, ou si vous êtes convaincu que votre site fonctionne sur HTTPS. Vous pouvez annuler ce changement en modifiant la configuration de votre serveur Web.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Sélectionnez le numéro approprié [1-2] puis [entre] (appuyez sur «C» pour annuler): 2

Si tout s'est bien passé, il vous montrera ce message, juste pour vos noms de domaine à la place.

Toutes nos félicitations! Vous avez réussi à activer https: // ww1.ranvirslog.com et https: // ww2.ranvirslog.com Vous pouvez visiter les FQDN et remarquer que les sites Web ont maintenant le panneau de cadenas suggérant que tout est crypté.

Regardez les fichiers de configuration

Si vous affichez les fichiers de configuration que nous avons créés plus tôt, à savoir / etc / conf.d / ww1.conf et / etc / confoir.d / ww2.Conf, vous remarquerez que toutes les règles «Écouter 80» ont disparu et que quelques nouvelles lignes ont été ajoutées, indiquez que la communication doit être cryptée et l'emplacement des certificats et des clés pour effectuer ledit chiffrement.

Je recommande fortement de rechercher les fichiers de configuration, car cela peut également vous apprendre à installer correctement les certificats et à écrire des fichiers de configuration.

Renouvellement de certification

Les certificats typiques de LETSENCYPT sont valables pendant 90 jours et avant d'expirer, vous devez les renouveler. Vous pouvez utiliser CERTBOT pour d'abord exécuter le renouvellement, en exécutant la commande:

$ sudo Certbot Renew - rythme-run

Si l'opération réussit, vous verrez le message suivant:

Félicitations, tous les renouvellements ont réussi. Les certificats suivants ont été renouvelés:

/ etc / lesencrypt / live / ww1.ranvirslog.com / fullchain.pem (succès)
** Run sèche: simulant 'Certbot Renew' près de l'expiration du certificat
** (les certificats de test ci-dessus n'ont pas été enregistrés.)

Vous pouvez maintenant ajouter un travail cron qui tentera de renouveler chaque semaine environ. Certbot ne renouvellera pas les certificats à moins qu'ils ne soient vraiment dus pour cela, donc vous n'avez pas à vous inquiéter. La commande de renouvellement réel est:

$ certbot renouveler

Ajoutez-le au travail cron de Root en utilisant:

$ sudo crontab -e

Dans l'invite suivante, sélectionnez votre éditeur préféré (choisissez Nano si vous n'êtes pas sûr) et ajoutez les lignes suivantes à la fin du fichier maintenant ouvert:


# Par exemple, vous pouvez exécuter une sauvegarde de tous vos comptes d'utilisateurs
# à 5 A.m chaque semaine avec:
# 0 5 * * 1 Tar -zcf / var / Backups / Home.tgz / home /
#
# Pour plus d'informations, consultez les pages manuelles de Crontab (5) et Cron (8)
#
# m h Dom Mon Dow Commande
* 2 * * 2 CERTBOT RENNEY

Cela exécutera la commande de renouvellement de certificat à 2 heures du matin à n'importe quelle minute aléatoire, le deuxième jour de chaque semaine.

Conclusion

Si vous êtes nouveau sur les certificats TLS, expérimenter des choses comme HSTS peut être risqué. Puisque ces changements sont irréversibles. Cependant, si vous voulez descendre le terrier de la sécurité du lapin, je peux fortement recommander le blog de Troy Hunt qui est l'une des principales inspirations derrière cet article.