Zoeken op website

HTTPS inschakelen voor Varnish Cache met Hitch op CentOS-RHEL 8


Varnish Cache heeft geen native ondersteuning voor SSL/TLS en andere protocollen die zijn gekoppeld aan poort 443. Als u Varnish Cache gebruikt om de prestaties van uw webapplicatie te verbeteren, moet u een ander stukje software installeren en configureren, een zogenaamde SSL/TLS beëindigingsproxy, om samen te werken met Verniscache om HTTPS in te schakelen.

De Hitch is een gratis open source, op libev gebaseerde en schaalbare SSL/TLS-proxy ontworpen voor Varnish Cache, die momenteel werkt op Linux, OpenBSD, FreeBSD en MacOSX. Het beëindigt TLS/SSL-verbindingen door te luisteren op poort 443 (de standaardpoort voor HTTPS-verbindingen) en stuurt het niet-versleutelde verkeer door naar Varnish Cache. , zou het ook met andere backends moeten werken.

Het ondersteunt TLS1.2 en TLS1.3 en oudere TLS 1.0/1.1, ondersteunt ALPN (Application-Layer Protocol Negotiation) en NPN (Next Protocol Negotiation) voor HTTP/2, een PROXY-protocol om de client te signaleren IP/poort naar een backend, UNIX-domeinsocketverbindingen naar de oorsprong, SNI (Server Name Indication), met en zonder wildcard-certificaten. Bovendien werkt het goed voor grote installaties waarvoor tot 15.000 luisteraansluitingen en 500.000 certificaten nodig zijn.

Als vervolg op onze twee eerdere artikelen over het installeren van Varnish Cache voor Nginx en Apache HTTP-servers, laat deze handleiding zien hoe je HTTPS< inschakelt voor Varnish Cache met behulp van Hitch TLS Proxy op CentOS/RHEL 8.

In deze handleiding wordt ervan uitgegaan dat u Varnish voor de Nginx- of Apache-webserver hebt geïnstalleerd. Zie anders:

  • Hoe Varnish Cache 6 voor Nginx Web Server op CentOS/RHEL 8 te installeren
  • Hoe Varnish Cache 6 voor Apache Web Server op CentOS/RHEL 8 te installeren

Stap 1: Installeer Hitch op CentOS/RHEL 8

1. Het Hitch-pakket wordt geleverd in de EPEL-opslagplaats (Extra Packages for Enterprise Linux). Om het te installeren, schakelt u eerst EPEL in op uw systeem en installeert u daarna het pakket. Als u het OpenSSL pakket niet heeft geïnstalleerd, installeer dit dan ook.

dnf install epel-release
dnf install hitch openssl

2. Wanneer de installatie van het pakket is voltooid, moet u Varnish Cache configureren om Hitch te laten werken. U moet Hitch ook configureren om uw SSL/TLS-certificaten en Varnish als backend te gebruiken. Het hoofdconfiguratiebestand van Hitch bevindt zich op /etc/hitch/hitch.conf, wat hieronder wordt uitgelegd.

Stap 2: Varnish Cache voor Hitch configureren

3. Schakel vervolgens Varnish in om naar een extra poort te luisteren (8443 in ons geval) met behulp van het PROXY protocol ondersteuning, voor communicatie met Hitch.

Open dus het Varnish systemd servicebestand om het te bewerken.

systemctl edit --full varnish

Zoek naar de regel ExecStart en voeg een extra vlag -a toe met de waarde 127.0.0.1:8443,proxy. Het gebruik van een waarde van 127.0.0.1:8443 betekent dat Varnish alleen de interne verbinding accepteert (van processen die op dezelfde server draaien, in dit geval dus een hapering), maar geen externe verbindingen.

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

Sla het bestand op en start de Varnish-service opnieuw om de laatste wijzigingen toe te passen.

systemctl restart varnish

Stap 3: SSL/TLS-certificaten verkrijgen

4. In dit gedeelte leggen we uit hoe u de SSL/TLS-certificaatbundel kunt maken die u kunt gebruiken onder Hitch. Voor deze handleiding leggen we de verschillende opties uit voor het gebruik van een zelfondertekend certificaat, een commercieel certificaat of een certificaat van Let's Encrypt.

Om een zelfondertekend certificaat aan te maken (dat u alleen in een lokale testomgeving mag gebruiken), kunt u de tool OpenSSL gebruiken.

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

Maak vervolgens als volgt een bundel van het certificaat en de sleutel.

cat tecmint.crt tecmint.key >tecmint.pem

Opmerking: voor productiegebruik kunt u een certificaat kopen bij een commerciële Certificaatautoriteit (CA) of ontvang een gratis, geautomatiseerd en volledig erkend certificaat van Let's Encrypt. Maak dan een PEM-bundel aan.

Als u een certificaat van een commerciële CA heeft gekocht, moet u de privésleutel, het certificaat en de CA-bundel samenvoegen, zoals weergegeven.

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

Voor Let's Encrypt worden het certificaat, de privésleutel en de volledige keten opgeslagen onder /etc/letsencrypt/live/example.com/, dus maak de bundel zoals weergegeven .

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

Stap 4: Hitch configureren en starten

5. Configureer vervolgens Varnish als backend voor Hitch en geef de SSL/TLS-certificaatbestanden op die u wilt gebruiken HTTPS: open het hoofdconfiguratiebestand Hitch om het te bewerken.

vi /etc/hitch/hitch.conf

De frontend sectie definieert de IP-adressen en de poort waar Hitch naar zal luisteren. De standaardconfiguratie is om te luisteren naar alle IPv4- en IPv6-interfaces die op de server zijn aangesloten en draait op poort 443 en verwerkt inkomende HTTPS< verzoeken en deze doorgeven aan Varnish.

Wijzig de standaard backend proxypoort van 6086 in 8443 (de poort die wordt gebruikt om verzoeken door te sturen naar Varnish) in de Hitch-configuratiebestand, met behulp van de parameter backend. Geef ook het certificaatbestand op met de parameter pem-file, zoals weergegeven.

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

Sla het bestand op en sluit het.

6. Start nu de hitch-service en schakel deze in om automatisch te starten bij het opstarten van het systeem. Merk op dat de --now-schakelaar, wanneer gebruikt met enable, ook een systemd-service start en vervolgens de status controleert om te zien of deze als volgt actief is.

systemctl enable --now hitch
systemctl status hitch

7. Voordat u gaat testen of uw website/applicatie nu op HTTPS draait, moet u de HTTPS-servicepoort 443 toestaan in de firewall om toe te staan dat verzoeken die bestemd zijn voor die poort op de server, door de firewall gaan.

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

Stap 5: SSL/TLS-beëindiging testen met Varnish Cache-Hitch Setup

8. Het is nu tijd om de Varnish Cache-Hitch-opstelling te testen. Open een webbrowser en gebruik het IP-adres van uw domein of server om via HTTPS te navigeren.

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

Zodra de indexpagina van uw webapplicatie is geladen, controleert u de HTTP-headers om te bevestigen dat de inhoud wordt aangeboden via Varnish Cache.

Om dat te doen, klikt u met de rechtermuisknop op de geladen webpagina en selecteert u Inspecteren in de lijst met opties om de ontwikkelaarstools te openen. Klik vervolgens op het tabblad Netwerk en Laad de pagina opnieuw. Selecteer vervolgens een verzoek om de HTTP-headers te bekijken, zoals gemarkeerd in de volgende schermafbeelding.

Stap 6: HTTP omleiden naar HTTPS in Varnish Cache

9. Als u uw website alleen op HTTPS wilt laten draaien, moet u al het HTTP-verkeer omleiden naar HTTPS. U kunt dit doen door de volgende configuratie toe te voegen aan uw Hitch-configuratiebestand.

vi /etc/hitch/hitch.conf 

Voeg eerst de regel import std; toe net onder vlc 4.0; en zoek vervolgens naar de subroutine vlc_recv, de eerste VCL-subroutine die onmiddellijk wordt uitgevoerd nadat Varnish Cache het klantverzoek heeft geparseerd in de basisgegevensstructuur. Hier kunnen we de verzoekheaders wijzigen en een synth uitvoeren om klantverzoeken om te leiden.

Pas het aan zodat het er zo uitziet.

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

Houd er rekening mee dat het PROXY protocol ervoor zorgt dat Varnish de luisterpoort 443 van Hitch kan zien vanaf de server.ip variabele. Dus de regel std.port(server.ip) retourneert het poortnummer waarop de clientverbinding werd ontvangen.

Als de poort niet 443 is voor HTTPS (zoals gecontroleerd door (std.port(server.ip) != 443)), de subroutine zal de HTTP-locatieheader van het verzoek (set req.http.location) instellen op een beveiligd verzoek (“https://” + req.http.host< + req.url) vraagt u eenvoudigweg aan de webbrowser om een HTTPS-versie van de webpagina te laden (d.w.z. URL-omleiding).

De Location header wordt naar de vcl_synth subroutine gestuurd (die wordt aangeroepen met return(synth(301))) met een HTTP-statuscode van 301 (Permanent verplaatst).

10. Voeg vervolgens de volgende vcl_synth subroutine toe (een van de vele toepassingen is het omleiden van gebruikers) om de bovenstaande synth te verwerken.

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

Er wordt gecontroleerd of de reactiestatus 301 is, de HTTP-locatieheader in het antwoord is ingesteld op de HTTP-locatieheader in het verzoek, wat in feite een omleiding naar HTTPS is en een leveringsactie uitvoert.

De leveringsactie bouwt een antwoord op met het antwoord van de backend, slaat het antwoord op in de cache en stuurt het naar de client.

Sla het bestand op en sluit het.

11. Pas nogmaals de nieuwe wijzigingen in de Varnish-configuratie toe door de service opnieuw te starten. Gebruik vervolgens het opdrachtregelprogramma curl om de omleiding van HTTP naar HTTPS te bevestigen.

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

Vanuit de browser is het antwoord ook hetzelfde als weergegeven in de volgende schermafbeelding.

We hopen dat alles tot nu toe prima heeft gewerkt. Als dit niet het geval is, kunt u een opmerking of vraag achterlaten via het onderstaande feedbackformulier. Voor eventuele geavanceerde configuratieopties gaat u naar de Varnish Cache-documentatie en Hitch-documentatie.