Website-Suche

So aktivieren Sie HTTPS für den Varnish-Cache mithilfe von Hitch auf CentOS-RHEL 8


Varnish Cache bietet keine native Unterstützung für SSL/TLS und andere Protokolle, die mit Port 443 verbunden sind. Wenn Sie Varnish Cache verwenden, um die Leistung Ihrer Webanwendung zu steigern, müssen Sie eine andere Software installieren und konfigurieren, die als SSL/TLS-Terminierungsproxy bezeichnet wird, um neben Varnish Cache HTTPS zu aktivieren.

The Hitch ist ein kostenloser, libev-basierter und skalierbarer Open-Source-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 auf Port 443 (dem Standardport für HTTPS-Verbindungen) lauscht und den unverschlüsselten Datenverkehr an Varnish Cache weiterleitet, sollte aber auch mit anderen Backends funktionieren.

Es unterstützt TLS1.2 und TLS1.3 sowie ältere TLS 1.0/1.1, unterstützt ALPN (Application-Layer Protocol Negotiation) und NPN (Next Protocol Negotiation) für HTTP/2, ein PROXY-Protokoll zur Signalisierung von Client-IP/Port an ein 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 Abhörsockets 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 Sie HTTPS für Varnish Cache mit Hitch TLS Proxy unter CentOS/RHEL 8 aktivieren.

Diese Anleitung geht davon aus, dass Sie den Webserver Varnish für Nginx oder Apache installiert haben, andernfalls siehe:

  • So installieren Sie Varnish Cache 6 für Nginx-Webserver 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 zuerst EPEL auf Ihrem System und installieren Sie dann 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 Hitch funktioniert. Sie müssen Hitch auch so konfigurieren, dass Ihre SSL/TLS-Zertifikate und Varnish als Backend verwendet werden. Die Hauptkonfigurationsdatei von Hitch befindet sich unter /etc/hitch/hitch.conf, die weiter unten erläutert wird.

Schritt 2: Konfigurieren des Varnish Cache für Hitch

3. Aktivieren Sie als Nächstes Varnish, um einen zusätzlichen Port (in unserem Fall 8443) unter Verwendung der PROXY-Protokollunterstützung für die Kommunikation mit Hitch zu überwachen.

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

# systemctl edit --full varnish

Suchen Sie nach der Zeile ExecStart, und fügen Sie ein zusätzliches -a-Flag mit dem Wert 127.0.0.1:8443,proxy hinzu. Die Verwendung eines Wertes 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: Abrufen von SSL/TLS-Zertifikaten

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

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 Bundle aus Zertifikat und Schlüssel.

# cat tecmint.crt tecmint.key >tecmint.pem

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

Wenn Sie ein Zertifikat von einer kommerziellen Zertifizierungsstelle erworben haben, müssen Sie den privaten Schlüssel, das Zertifikat und das Zertifizierungsstellenpaket 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 gesamte Kette unter /etc/letsencrypt/live/example.com/ gespeichert, erstellen Sie also 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 Kupplung

5. Konfigurieren Sie als Nächstes Varnish als Backend für Hitch und geben Sie die SSL/TLS-Zertifikatsdateien an, die für HTTPS verwendet werden sollen. Öffnen Sie sie in der Hitch-Hauptkonfigurationsdatei zur Bearbeitung.

# vi /etc/hitch/hitch.conf

Der Frontend-Abschnitt definiert die IP-Adressen und den Port, auf den Hitch lauscht. Die Standardkonfiguration besteht darin, alle IPv4- und IPv6-Schnittstellen zu überwachen, die an den Server angeschlossen sind, auf Port 443 zu laufen und eingehende HTTPS-Anfragen zu verarbeiten und an Varnish zu übergeben.

Ändern Sie den standardmäßigen Backend-Proxy-Port von 6086 in 8443 (der Port, der zum Weiterleiten von Anfragen an Varnish verwendet wird) in der Hitch-Konfigurationsdatei mit dem Backend-Parameter. 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 Kupplungsdienst und aktivieren Sie ihn so, dass er beim Systemstart automatisch gestartet wird. Beachten Sie, dass der Schalter --now, wenn er mit enable verwendet wird, auch einen systemd-Dienst startet und dann den Status wie folgt überprüft, um zu sehen, ob er aktiv ist und ausgeführt wird.

# systemctl enable --now hitch
systemctl status hitch

7. Bevor Sie mit dem Testen fortfahren, ob Ihre Website/Anwendung jetzt auf HTTPS ausgeführt wird, müssen Sie dem HTTPS-Dienstport 443 in der Firewall erlauben, dass Anforderungen, 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-Beendigung 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-Adresse Ihrer Domain oder Ihres Servers, um über HTTPS zu navigieren.

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

Nachdem die Indexseite Ihrer Webanwendung geladen wurde, überprüfen Sie die HTTP-Header, um zu bestätigen, dass der Inhalt über den Varnish Cache bereitgestellt wird.

Klicken Sie dazu mit der rechten Maustaste auf die geladene Webseite, und wählen Sie in der Liste der Optionen die Option Untersuchen aus, um die Entwicklertools zu öffnen. Klicken Sie dann auf die Registerkarte Netzwerk, laden Sie die Seite neu und wählen Sie dann eine Anforderung 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 auszuführen, müssen Sie den gesamten HTTP-Datenverkehr auf HTTPS umleiten. Sie können dies tun, indem Sie die folgende Konfiguration in Ihrer Kupplungskonfigurationsdatei hinzufügen.

# vi /etc/hitch/hitch.conf 

Fügen Sie zuerst die Zeile import std; direkt unter vlc 4.0; hinzu und suchen Sie dann nach dem vlc_recv-Subprogramm, das das erste VCL-Subprogramm ist, das unmittelbar ausgeführt wird, nachdem Varnish Cache die Client-Anfrage in ihre grundlegende Datenstruktur geparst hat. Hier können wir die Anforderungsheader ändern und einen Synth ausführen, um Client-Anfragen umzuleiten.

Ändern Sie es so, dass es wie folgt 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 Listening-Port 443 von Hitch aus der Variablen server.ip zu sehen. Die Zeile std.port(server.ip) gibt also die Portnummer zurück, auf der die Client-Verbindung empfangen wurde.

Wenn der Port für HTTPS nicht 443 ist (wie von (std.port(server.ip) != 443) überprüft), setzt das Unterprogramm den HTTP-Location-Header der Anfrage (set req.http.location) auf eine sichere Anfrage ("https://" + req.http.host + req.url) und fordert den Webbrowser einfach auf, eine HTTPS-Version der Webseite zu laden (z. B. URL-Umleitung).

Der Location-Header wird an das vcl_synth-Subprogramm (das mit return(synth(301))) aufgerufen wird) mit dem HTTP-Statuscode 301 (Moved permanently) gesendet.

10. Fügen Sie als Nächstes das folgende vcl_synth Subprogramm hinzu (einer der vielen Anwendungsfälle ist das Umleiten 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 wird überprüft, ob der Antwortstatus 301 ist, der HTTP Location-Header in der Antwort auf den HTTP Location-Header in der Anforderung festgelegt wird, bei dem es sich tatsächlich um eine Weiterleitung zu HTTPS handelt, und führt eine Zustellungsaktion aus.

Die Übermittlungsaktion erstellt eine Antwort mit der Antwort aus dem Back-End, speichert die Antwort im Cache und sendet sie an den Client.

Speichern Sie die Datei, und schließen Sie sie.

11. Übernehmen Sie erneut die neuen Änderungen in der Varnish-Konfiguration, 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/

Im Browser ist die Antwort ebenfalls die gleiche wie im folgenden Screenshot gezeigt.

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

Verwandte Artikel: