Website-Suche

So aktivieren Sie HTTPS für Varnish Cache mit Hitch unter CentOS-RHEL 8


Varnish Cache bietet keine native Unterstützung für SSL/TLS und andere mit Port 443 verbundene Protokolle. Wenn Sie Varnish Cache verwenden, um die Leistung Ihrer Webanwendung zu steigern, müssen Sie eine weitere Software namens SSL/TLS-Terminations-Proxy installieren und konfigurieren, um mit Varnish Cache, um HTTPS zu aktivieren.

Der Hitch ist ein kostenloser Open-Source-, Libev-basierter und skalierbarer SSL/TLS-Proxy, der für Varnish Cache entwickelt wurde und derzeit unter Linux, OpenBSD, FreeBSD und MacOSX funktioniert. Es beendet TLS/SSL-Verbindungen, indem es Port 443 (den Standardport für HTTPS-Verbindungen) überwacht und den unverschlüsselten Datenverkehr jedoch an Varnish Cache weiterleitet , es sollte auch mit anderen Backends funktionieren.

Es unterstützt TLS1.2 und TLS1.3 sowie ältere Versionen von TLS 1.0/1.1 und unterstützt ALPN (Application-Layer Protocol Negotiation) und NPN (Next Protocol Negotiation) für HTTP/2, ein PROXY-Protokoll zur Signalisierung des Clients IP/Port zu einem Backend, UNIX-Domain-Socket-Verbindungen zum Ursprung, SNI (Server Name Indication), mit und ohne Wildcard-Zertifikate. Darüber hinaus eignet es sich gut für große Installationen, die bis zu 15.000 Listening-Sockets und 500.000 Zertifikate erfordern.

Als Fortsetzung unserer beiden vorherigen Artikel über die Installation von Varnish Cache für Nginx- und Apache-HTTP-Server zeigt diese Anleitung, wie man HTTPS< aktiviert für Varnish Cache mit Hitch TLS Proxy unter CentOS/RHEL 8.

In dieser Anleitung wird davon ausgegangen, dass Sie Varnish für den Nginx- oder Apache-Webserver installiert haben. Andernfalls siehe:

  • So installieren Sie Varnish Cache 6 für Nginx Web Server unter CentOS/RHEL 8
  • So installieren Sie Varnish Cache 6 für Apache Web Server unter CentOS/RHEL 8

Schritt 1: Installieren Sie Hitch unter CentOS/RHEL 8

1. Das Hitch-Paket wird im EPEL-Repository (Extra Packages for Enterprise Linux) bereitgestellt. Um es zu installieren, aktivieren Sie zunächst EPEL auf Ihrem System und installieren Sie anschließend das Paket. Wenn Sie das OpenSSL-Paket nicht installiert haben, installieren Sie es ebenfalls.

dnf install epel-release
dnf install hitch openssl

2. Wenn die Paketinstallation abgeschlossen ist, müssen Sie Varnish Cache so konfigurieren, dass es mit Hitch funktioniert. Sie müssen Hitch auch für die Verwendung Ihrer SSL/TLS-Zertifikate und Varnish als Backend konfigurieren. Die Hauptkonfigurationsdatei von Hitch befindet sich unter /etc/hitch/hitch.conf, was im Folgenden erläutert wird.

Schritt 2: Varnish Cache für Hitch konfigurieren

3. Aktivieren Sie als Nächstes Varnish, um mithilfe des PROXY-Protokolls einen zusätzlichen Port (in unserem Fall 8443) abzuhören Unterstützung für die Kommunikation mit Hitch.

Öffnen Sie also die Varnish-Dienstdatei systemd zur Bearbeitung.

systemctl edit --full varnish

Suchen Sie nach der Zeile ExecStart und fügen Sie ein zusätzliches Flag -a mit dem Wert 127.0.0.1:8443,proxy hinzu. Die Verwendung eines Werts von 127.0.0.1:8443 bedeutet, dass Varnish nur die interne Verbindung akzeptiert (von Prozessen, die auf demselben Server laufen, d. h. in diesem Fall Hitch), aber keine externen Verbindungen.

ExecStart=/usr/sbin/varnishd -a :80 -a 127.0.0.1:8443,proxy -f /etc/varnish/default.vcl -s malloc,256m 

Speichern Sie die Datei und starten Sie dann den Varnish-Dienst neu, um die neuesten Änderungen zu übernehmen.

systemctl restart varnish

Schritt 3: SSL/TLS-Zertifikate erhalten

4. In diesem Abschnitt erklären wir, wie Sie das SSL/TLS-Zertifikatspaket erstellen, das unter Hitch verwendet werden soll. In dieser Anleitung erklären wir die verschiedenen Möglichkeiten, ein selbstsigniertes Zertifikat, ein kommerzielles Zertifikat oder eines von Let’s Encrypt zu verwenden.

Um ein selbstsigniertes Zertifikat zu erstellen (das Sie nur in einer lokalen Testumgebung verwenden sollten), können Sie das OpenSSL-Tool verwenden.

mkdir /etc/ssl/tecmint.lan
cd /etc/ssl/tecmint.lan/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout  tecmint.lan.key -out tecmint.lan.crt

Erstellen Sie dann wie folgt ein Paket aus Zertifikat und Schlüssel.

cat tecmint.crt tecmint.key >tecmint.pem

Hinweis: Für den Produktionsgebrauch können Sie entweder ein Zertifikat von einer kommerziellen Certificate Authority (CA) kaufen oder Holen Sie sich ein kostenloses, automatisiertes und vollständig anerkanntes Zertifikat von Let's Encrypt. Erstellen Sie dann ein PEM-Bundle.

Wenn Sie ein Zertifikat von einer kommerziellen CA gekauft haben, müssen Sie den privaten Schlüssel, das Zertifikat und das CA-Paket wie gezeigt zusammenführen.

cat example.com.key example.com.crt example.com-ca-bundle.crt > /etc/ssl/example.com.pem 

Für Let's Encrypt werden das Zertifikat, der private Schlüssel und die vollständige Kette unter /etc/letsencrypt/live/example.com/ gespeichert, also erstellen Sie das Bundle wie gezeigt .

cat /etc/letsencrypt/live/example.com/fullchain.pem /etc/letsencrypt/live/example.com/privkey.pem >/etc/letsencrypt/live/example.com/example.com_bundle.pem

Schritt 4: Konfigurieren und Starten der Anhängerkupplung

5. Als Nächstes konfigurieren Sie Varnish als Backend für Hitch und geben die zu verwendenden SSL/TLS-Zertifikatdateien an HTTPS, in der Hauptkonfigurationsdatei von Hitch, öffnen Sie es zur Bearbeitung.

vi /etc/hitch/hitch.conf

Der Abschnitt Frontend definiert die IP-Adressen und den Port, den Hitch abhört. Die Standardkonfiguration überwacht alle am Server angeschlossenen IPv4- und IPv6-Schnittstellen, läuft auf Port 443 und verarbeitet eingehende HTTPS-Schnittstellen-Anfragen und übergibt sie an Varnish.

Ändern Sie den Standard-Backend-Proxy-Port von 6086 in 8443 (den Port, der zum Weiterleiten von Anfragen an Varnish verwendet wird) im Hitch-Konfigurationsdatei unter Verwendung des backend-Parameters. Geben Sie außerdem die Zertifikatsdatei mit dem Parameter pem-file an, wie gezeigt.

backend = "[127.0.0.1]:8443"
#pem-dir = "/etc/pki/tls/private"
pem-file = "/etc/ssl/tecmint.lan/tecmint.pem"

Speichern Sie die Datei und schließen Sie sie.

6. Starten Sie nun den hitch-Dienst und aktivieren Sie ihn für den automatischen Start beim Systemstart. Beachten Sie, dass der Schalter --now bei Verwendung mit enable ebenfalls einen systemd-Dienst startet und dann wie folgt den Status überprüft, um zu sehen, ob er aktiv ist und läuft.

systemctl enable --now hitch
systemctl status hitch

7. Bevor Sie testen, ob Ihre Website/Anwendung jetzt auf HTTPS läuft, müssen Sie den HTTPS-Dienstport 443 zulassen die Firewall, damit Anfragen, die für diesen Port auf dem Server bestimmt sind, die Firewall passieren können.

firewall-cmd --zone=public --permanent --add-service=https
firewall-cmd --reload

Schritt 5: Testen der SSL/TLS-Terminierung mit Varnish Cache-Hitch Setup

8. Jetzt ist es an der Zeit, das Varnish Cache-Hitch-Setup zu testen. Öffnen Sie einen Webbrowser und verwenden Sie die IP Ihrer Domain oder Ihres Servers, um über HTTPS zu navigieren.

https://www.example.com
OR
https://SERVER_IP/

Sobald die Indexseite Ihrer Webanwendung geladen ist, überprüfen Sie die HTTP-Header, um zu bestätigen, dass Inhalte über Varnish Cache bereitgestellt werden.

Klicken Sie dazu mit der rechten Maustaste auf die geladene Webseite und wählen Sie Inspizieren aus der Liste der Optionen aus, um die Entwicklertools zu öffnen. Klicken Sie dann auf die Registerkarte Netzwerk, Laden Sie die Seite neu und wählen Sie dann eine Anfrage aus, um die HTTP-Header anzuzeigen, wie im folgenden Screenshot hervorgehoben.

Schritt 6: Umleiten von HTTP zu HTTPS im Varnish Cache

9. Um Ihre Website nur auf HTTPS zu betreiben, müssen Sie den gesamten HTTP-Verkehr auf HTTPS umleiten. Sie können dies tun, indem Sie die folgende Konfiguration in Ihre Hitch-Konfigurationsdatei hinzufügen.

vi /etc/hitch/hitch.conf 

Fügen Sie zunächst die Zeile import std; direkt unter vlc 4.0; hinzu und suchen Sie dann nach der Subroutine vlc_recv, die die erste VCL-Subroutine ist, die sofort ausgeführt wird nachdem Varnish Cache die Client-Anfrage in ihre grundlegende Datenstruktur analysiert hat. Hier können wir die Anforderungsheader ändern und einen Synthesizer ausführen, um Clientanforderungen umzuleiten.

Ändern Sie es so, dass es so aussieht.

sub vcl_recv {
    if (std.port(server.ip) != 443) {
        set req.http.location = "https://" + req.http.host + req.url;
        return(synth(301));
    }
}

Beachten Sie, dass das PROXY-Protokoll es Varnish ermöglicht, den Abhörport Hitch 443 von der server.ip< zu sehen Variable. Die Zeile std.port(server.ip) gibt also die Portnummer zurück, auf der die Client-Verbindung empfangen wurde.

Wenn der Port nicht 443 für HTTPS ist (wie durch (std.port(server.ip) != 443) überprüft), wird die Subroutine setzt den HTTP-Standort-Header der Anfrage (set req.http.location) auf eine sichere Anfrage („https://“ + req.http.host<). + req.url) einfach den Webbrowser auffordern, eine HTTPS-Version der Webseite zu laden (d. h. URL-Umleitung).

Der Header Location wird an die Unterroutine vcl_synth (die mit return(synth(301)) aufgerufen wird) mit dem HTTP-Statuscode gesendet 301 (dauerhaft verschoben).

10. Fügen Sie als Nächstes die folgende vcl_synth-Subroutine hinzu (einer ihrer vielen Anwendungsfälle ist die Umleitung von Benutzern), um den obigen Synthesizer zu verarbeiten.

sub vcl_synth {
        if (resp.status == 301) {
                set resp.http.location = req.http.location;
		  set resp.status = 301;
                return (deliver);
        }
}

Es prüft, ob der Antwortstatus 301 ist, der HTTP-Location-Header in der Antwort wird auf den HTTP-Location-Header in der Anfrage gesetzt, bei dem es sich tatsächlich um eine Umleitung zu HTTPS handelt, und es wird eine Lieferaktion ausgeführt.

Die Deliver-Aktion erstellt eine Antwort mit der Antwort vom Back-End, speichert die Antwort im Cache und sendet sie an den Client.

Speichern Sie die Datei und schließen Sie sie.

11. Wenden Sie die neuen Änderungen in der Varnish-Konfiguration noch einmal an, indem Sie den Dienst neu starten. Verwenden Sie dann das Befehlszeilentool „curl“, um die Umleitung von HTTP zu HTTPS zu bestätigen.

systemctl restart varnish
curl -I http://eaxmple.com/

Auch die Antwort des Browsers ist dieselbe wie im folgenden Screenshot.

Wir hoffen, dass bis hierher alles gut geklappt hat. Wenn nicht, hinterlassen Sie einen Kommentar oder Fragen über das Feedback-Formular unten. Informationen zu erweiterten Konfigurationsoptionen finden Sie in der Varnish Cache-Dokumentation und der Hitch-Dokumentation.