Nginx Reverse Proxy mit HTTPS über LetSencrypt

Nginx Reverse Proxy mit HTTPS über LetSencrypt
Dies ist ein Follow-up in meinem vorherigen Beitrag, in dem wir einen einfachen Reverse-Proxy-Server mit NGINX einrichten. In diesem Beitrag werden wir die Verbindung zwischen Client und dem Reverse -Proxy -Server über kostenlose TLS (a) sichern.k.ein SSL) Zertifikat von letsencrypt. Ich ermutige Sie, den oben genannten Posten auf Reverse Proxy für die Grundlagen zu überprüfen.

Voraussetzungen

  1. Ein Server mit statischer öffentlicher IP. Hier läuft Nginx.
  2. Backend -Server mit der beabsichtigten Website, die über HTTP ausgeführt wird
  3. Ein registrierter Domain -Name. Ich werde Ranvirslog verwenden.com als mein primärer Domain -Name und die beiden Websites sind bei FQDNS - WW1.Ranvirslog.com und ww2ranvirslog.com

Aufstellen

Die IP -Adressen haben sich also seit dem letzten Mal geändert, da ich dieses Setup wieder mache. Hier sind die neuen IPs und Hostnamen.

VM/Hostname Öffentliche IP Private IP Rolle/Funktion
ReverseProxy 68.183.214.151 10.135.127.136 TLS -Terminierungspunkt und Reverse -Proxy -Server
Web1 N / A 10.135.126.102 Hosting WW1.Ranvirslog.com

Website über Port 80 HTTP

Web2 N / A 10.135.126.187 Hosting

WW2.Ranvirslog.com

Website über Port 80 HTTP

Die DNS -Datensätze werden als solche eingerichtet. Dies ist zufällig die IP -Adresse unseres Nginx Reverse Proxy:

Ein Rekord Wert
WW1.Ranvirslog.com 68.183.214.151
WW2.Ranvirslog.com 68.183.214.151

Damit unsere umgekehrten DNS über unverschlüsselte HTTP funktionieren, haben wir zwei Dateien in /etc /conf erstellt.D/ Namen WW1.conf und ww2.Bekennt jeweils mit der folgenden Konfiguration:

/etc/conf.d/ww1.Conf

Server
Hören Sie 80;
Hören Sie [::]: 80;
Server_Name WW1.Ranvirslog.com;
Standort /
proxy_pass http: // 10.135.126.102/;
Proxy_Bufferen;
proxy_set_header x-real-ip $ remote_addr;

/etc/conf.d/ww2.Conf

Server
Hören Sie 80;
Hören Sie [::]: 80;
Server_Name WW2.Ranvirslog.com;
Standort /
proxy_pass http: // 10.135.126.187/;
Proxy_Bufferen;
proxy_set_header x-real-ip $ remote_addr;

Das Betriebssystem, das wir verwenden, ist Ubuntu 18.04 LTS und wir haben ENTFERNT Die Datei/etc/nginx/sites-fähig/Standard, so.

Zielsetzung

Mit den umgekehrten DNS (und den Backend -Websites), die bereits in Betrieb genommen werden.Ranvirslog.com und ww2.Ranvirslog.com) auf unserem Nginx Reverse Proxy.

Der Verkehr zwischen einem Kunden und dem Reverse -Proxy wird verschlüsselt, aber der Verkehr zwischen dem Reverse Proxy und den Backend -Servern ist nicht verschlüsselt. Dies ist jedoch immer noch eine unendlich sicherere Option als überhaupt keine HTTPs zu haben. Für Fälle, in denen sich der Reverse -Proxy und die verschiedenen Webserver auf demselben Host befinden, sagen Sie, wenn Sie Docker -Container verwenden, um alle auf demselben VPS zu hosten, ist sogar dieser unverschlüsselte Verkehr auf einem einzelnen Host enthalten.

Installieren von CertBot

Certbot ist ein Client -Programm, das auf unserem Reverse -Proxy -Server ausgeführt wird und ein TLS -Zertifikat mit LetSencrypt aushandelt. Es wird LetSencrypt beweisen, dass der Server tatsächlich die Kontrolle über die FQDNs hat, über die er behauptet, die Kontrolle über die Kontrolle zu haben. Wir machen uns keine Sorgen darüber, wie Certbot es macht.

Traditionell können Sie Certbot als eigenständige Software verwenden, die nur die Zertifikate (die im Grunde nur lange kryptografische Schlüssel) erhalten und auf dem Server speichern. Zum Glück gibt es für die meisten Betriebssysteme benutzerdefinierte Plugins für Nginx, Apache und andere Software. Wir werden den Certbot mit Nginx -Plugin installieren. Dadurch konfiguriert NGINX automatisch so.

Wenn Sie Debian -basierte Systeme verwenden, wie in meinem Fall ich Ubuntu 18 benutze.04 LTS, dann ist die Installation eine Brise.

$ sudo APT Update
$ sudo apt installieren Software-Properties-Common
$ sudo add-apt-Repository-Universum
$ sudo add-apt-Repository PPA: certbot/certbot
$ sudo APT Update
$ sudo APT Installieren Sie Python-CertBot-Nginx

Andere Betriebssysteme, Ihr Redhat, Gentoo und Fedora können die hier aufgeführten offiziellen Anweisungen befolgen.

Sobald Sie Certbot installiert haben mit Nginx -Plugin Für Ihre Kombination aus Betriebssystem können wir auf das Geschäft kommen.

TLS -Zertifikate erhalten

Führen Sie den folgenden Befehl aus, um das TLS -Zertifikat zum ersten Mal zu erhalten:

$ sudo certbot -nginx

Dies wird eine Reihe interaktiver Fragen durchlaufen, wie unten gezeigt:

  1. Geben sie ihre E-Mail Adresse ein

Speichern des Debug -Protokolls an /var/log/letSencrypt/letSencrypt.Protokoll
Ausgewählte Plugins: Authenticator Nginx, Installationsprogramm Nginx
Geben Sie eine E -Mail -Adresse ein (verwendet für dringende Erneuerungs- und Sicherheitsbekanntmachungen) (Geben Sie "C" ab, um zu stornieren): [email protected]

  1. Stimmen Sie TOS zu

Bitte lesen Sie die Nutzungsbedingungen unter https: // letSecrypt.org/dokumente/le-sav1.2-November-15.-2017.PDF. Sie müssen zustimmen, um sich beim ACME-Server unter https: // acme-v02 zu registrieren.API.letSencrypt.org/Verzeichnis
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) GREE/(C) ANCel: a

  1. Optionaler Newsletter

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Wären Sie bereit, Ihre E-Mail-Adresse mit der Electronic Frontier Foundation, einem Gründungspartner des LET's Encrypt-Projekts und der gemeinnützigen Organisation, die Certbot zu entwickeln? Wir möchten Ihnen E -Mails über unsere Arbeit senden, um Web, EFF -Nachrichten, Kampagnen und Möglichkeiten zur Unterstützung der digitalen Freiheit zu vergrößen.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y) es/(n) o: y

  1. Anschließend erkennt die Domainnamen auf Ihrem Server. Wenn Sie alle Domänen auswählen möchten, drücken Sie einfach

Für welche Namen möchten Sie HTTPS für aktivieren??
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: WW1.Ranvirslog.com
2: WW2.Ranvirslog.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Wählen Sie die entsprechenden Zahlen aus, die durch Kommas und/oder Leerzeichen getrennt sind, oder lassen Sie Eingabe leer, um alle angegebenen Optionen auszuwählen (Geben Sie 'C' ab, um zu stornieren):

  1. Alles zu tls umleiten. Ich habe die Option 2 ausgewählt, um alles in SSL umzuleiten, aber Ihr Anwendungsfall kann sich unterscheiden. Für neue Backend -Installationen ist es sicher, Option 2 auszuwählen.

Bitte auswählen.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

1: Keine Weiterleitung - Nehmen Sie keine weiteren Änderungen an der Webserver -Konfiguration vor.
2: Weiterleiten - Stellen Sie alle Anfragen um, um den HTTPS -Zugriff zu sichern. Wählen Sie dies für neue Websites oder wenn Sie sicher sind, dass Ihre Website auf HTTPS funktioniert. Sie können diese Änderung rückgängig machen, indem Sie die Konfiguration Ihres Webservers bearbeiten.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Wählen Sie die entsprechende Nummer [1-2] und dann [ENTER] (Drücken Sie 'C', um zu stornieren): 2

Wenn alles gut lief, zeigt es Ihnen diese Nachricht, nur für Ihre Domainnamen.

Glückwunsch! Sie haben erfolgreich https: // ww1 aktiviert.Ranvirslog.com und https: // ww2.Ranvirslog.com Sie können die FQDNs besuchen und feststellen.

Schauen Sie sich die Konfigurationsdateien an

Wenn Sie die zuvor erstellten Konfigurationsdateien anzeigen, nämlich /etc /conf.d/ww1.conf und /etc /conf.d/ww2.Conf, Sie werden feststellen, dass alle Regeln „Hören 80“ verschwunden sind und einige neue Zeilen hinzugefügt wurden, dass die Kommunikation verschlüsselt werden muss, und der Ort der Zertifikate und Schlüssel zur Durchführung der genannten Verschlüsselung.

Ich empfehle dringend, die Konfigurationsdateien durchzusehen, da Sie dies auch beibringen können, wie Sie Zertifikate ordnungsgemäß installieren und Konfigurationsdateien schreiben.

Erneuerung der Zertifizierung

Typische LetSencrypt -Zertifikate sind 90 Tage gültig, und bevor sie ablaufen, müssen Sie sie erneuern. Sie können Certbot verwenden, um die Erneuerung zuerst zu trocken, indem Sie den Befehl ausführen:

$ sudo certbot renew-trockenrund

Wenn der Vorgang erfolgreich ist, sehen Sie die folgende Nachricht:

Herzlichen Glückwunsch, alle Erneuerungen waren erfolgreich. Die folgenden Zertifikate wurden erneuert:

/etc/letSencrypt/live/ww1.Ranvirslog.com/fullchain.PEM (Erfolg)
** Dry Run: Simulation 'certbot renew' in der Nähe von Cert -Ablauf
** (Die obigen Testzertifikate wurden nicht gespeichert.)

Jetzt können Sie einen Cron -Job hinzufügen, der jede Woche oder so versuchen wird. Certbot wird die Zertifikate nicht erneuern, es sei denn, sie sind wirklich dafür fällig, sodass Sie sich keine Sorgen machen müssen. Der Befehl zur tatsächlichen Erneuerung lautet:

$ certbot renew

Fügen Sie es in den Cron -Job von Root hinzu, indem Sie:

$ sudo crontab -e

Wählen Sie in der folgenden Eingabeaufforderung Ihren bevorzugten Editor aus (wählen Sie Nano, wenn Sie sich nicht sicher sind) und fügen Sie die folgenden Zeilen am Ende der jetzt geöffneten Datei hinzu:


# Sie können beispielsweise eine Sicherung aller Ihrer Benutzerkonten ausführen
# bei 5 a.m jede Woche mit:
# 0 5 * * 1 tar -Zcf/var/backups/home.tgz /home /
#
# Weitere Informationen finden Sie in den manuellen Seiten von Crontab (5) und Cron (8)
#
# M H Dom Mon Dow -Befehl
* 2 * * 2 certbot erneuern

Dadurch wird der Befehl certbot ren sich zu jeder zufälligen Minute um 2 Uhr morgens, am zweiten Tag jeder Woche.

Abschluss

Wenn Sie in TLS -Zertifikaten neu sind, kann das Experimentieren mit Dingen wie HSTs riskant sein. Da diese Änderungen irreversibel sind. Wenn Sie jedoch das Kaninchenloch der Sicherheit durchgehen möchten, kann ich den Blog von Troy Hunt wärmstens empfehlen, der eine der wichtigsten Inspirationen für diese Beschreibung ist.