Slik aktiverer du HTTPS for Varnish Cache ved å bruke Hitch på CentOS-RHEL 8


Varnish Cache mangler innebygd støtte for SSL/TLS og andre protokoller knyttet til port 443. Hvis du bruker Varnish Cache for å øke ytelsen til nettapplikasjonen din, må du installere og konfigurere en annen programvare som kalles en SSL/TLS-termineringsproxy, for å fungere sammen med Varnish Cache for å aktivere HTTPS.

Hitch er en gratis åpen kildekode, libev-basert og skalerbar SSL/TLS-proxy designet for Varnish Cache, som for tiden fungerer på Linux, OpenBSD, FreeBSD og MacOSX. Den avslutter TLS/SSL-tilkoblinger ved å lytte på port 443 (standardporten for HTTPS-tilkoblinger) og videresender den ukrypterte trafikken til Varnish Cache. , bør det fungere med andre backends også.

Den støtter TLS1.2 og TLS1.3 og eldre TLS 1.0/1.1, støtter ALPN ( >Application-Layer Protocol Negotiation) og NPN (Next Protocol Negotiation) for HTTP/2, en PROXY-protokoll for å signalisere klienten IP/port til en backend, UNIX-domenekontaktforbindelser til opprinnelsen, SNI (Server Name Indication), med og uten jokertegnsertifikater. I tillegg fungerer det bra for store installasjoner som krever opptil 15 000 lyttekontakter og 500 000 sertifikater.

Som en fortsettelse av våre to tidligere artikler om installasjon av Varnish Cache for Nginx og Apache HTTP-servere, viser denne veiledningen hvordan du aktiverer HTTPS< for Varnish Cache med Hitch TLS ProxyCentOS/RHEL 8.

Denne veiledningen forutsetter at du har installert Vernish for Nginx eller Apache-nettserver, ellers kan du se:

  • Slik installerer du Varnish Cache 6 for Nginx Web Server på CentOS/RHEL 8
  • Hvordan installere Varnish Cache 6 for Apache Web Server på CentOS/RHEL 8

Trinn 1: Installer Hitch på CentOS/RHEL 8

1. Hitch-pakken er tilgjengelig i EPEL (Extra Packages for Enterprise Linux)-depotet. For å installere den må du først aktivere EPEL på systemet ditt og deretter installere pakken. Hvis du ikke har installert OpenSSL-pakken, installer den også.

dnf install epel-release
dnf install hitch openssl

2. Når pakkeinstallasjonen er fullført, må du konfigurere Varnish Cache for å fungere Hitch. Du må også konfigurere Hitch for å bruke SSL/TLS-sertifikatene og lakk som en backend. Hovedkonfigurasjonsfilen til Hitch ligger på /etc/hitch/hitch.conf, som er forklart nedenfor.

Trinn 2: Konfigurering av lakkbuffer for Hitch

3. Deretter aktiverer du Farnish for å lytte til en ekstra port (8443 i vårt tilfelle) ved å bruke PROXY-protokollen støtte, for kommunikasjon med Hitch.

Så åpne Varnish systemd-tjenestefilen for redigering.

systemctl edit --full varnish

Se etter linjen ExecStart og legg til et ekstra -a-flagg med verdien 127.0.0.1:8443,proxy. Å bruke en verdi på 127.0.0.1:8443 betyr at Varnish bare aksepterer den interne tilkoblingen (fra prosesser som kjører på samme server, dvs. kobling i dette tilfellet), men ikke eksterne tilkoblinger.

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

Lagre filen og start deretter Varnish-tjenesten på nytt for å bruke de siste endringene.

systemctl restart varnish

Trinn 3: Skaffe SSL/TLS-sertifikater

4. I denne delen vil vi forklare hvordan du oppretter SSL/TLS-sertifikatbunten som skal brukes under Hitch. For denne veiledningen vil vi forklare de forskjellige alternativene for hvordan du bruker et selvsignert sertifikat, kommersielt sertifikat eller et fra La oss kryptere.

For å lage et selvsignert sertifikat (som du bare bør bruke i et lokalt testmiljø), kan du bruke OpenSSL-verktøyet.

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

Lag deretter en bunt av sertifikatet og nøkkelen som følger.

cat tecmint.crt tecmint.key >tecmint.pem

Merk: For produksjonsbruk kan du enten kjøpe et sertifikat fra en kommersiell sertifikatmyndighet (CA) eller hent et gratis, automatisert og fullt anerkjent sertifikat fra La oss kryptere. Lag deretter en PEM-bunt.

Hvis du kjøpte et sertifikat fra en kommersiell CA, må du slå sammen den private nøkkelen, sertifikatet og CA-pakken som vist.

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

For Let's Encrypt vil sertifikatet, den private nøkkelen og hele kjeden bli lagret under /etc/letsencrypt/live/example.com/, så lag pakken som vist .

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

Trinn 4: Konfigurering og start av feste

5. Deretter konfigurerer du Varnish som en backend for Hitch og spesifiserer SSL/TLS-sertifikatfilene som skal brukes for HTTPS, i Hitch hovedkonfigurasjonsfilen, åpne den for redigering.

vi /etc/hitch/hitch.conf

frontend-delen definerer IP-adressene og port som Hitch vil lytte til. Standardkonfigurasjonen er å lytte på alle IPv4- og IPv6-grensesnitt som er koblet til serveren og kjører på port 443 og håndtere innkommende HTTPS< forespørsler, overlate dem til Lakk.

Endre standard proxy-port for backend fra 6086 til 8443 (porten som brukes til å videresende forespørsler til Larnish) i Hitch-konfigurasjonsfilen ved å bruke backend-parameteren. Spesifiser også sertifikatfilen ved å bruke parameteren pem-file som vist.

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

Lagre filen og lukk den.

6. Start nå hitch-tjenesten og la den starte automatisk ved systemoppstart. Legg merke til at --now-bryteren når den brukes med aktiver, starter en systemd tjeneste også og deretter sjekke status for å se om den er oppe og kjører som følger.

systemctl enable --now hitch
systemctl status hitch

7. Før du fortsetter å teste om nettstedet/applikasjonen din nå kjører på HTTPS, må du tillate HTTPS-tjenesteport 443 i brannmuren for å tillate forespørsler som er bestemt for den porten på serveren, å gå gjennom brannmuren.

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

Trinn 5: Testing av SSL/TLS-terminering med Varnish Cache-Hitch Setup

8. Det er nå på tide å teste Varnish Cache-Hitch-oppsettet. Åpne en nettleser og bruk domenet eller serverens IP for å navigere over HTTPS.

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

Når indekssiden til nettapplikasjonen din er lastet inn, sjekk HTTP-overskriftene for å bekrefte at innholdet blir levert via Varnish Cache.

For å gjøre det, høyreklikk på den lastede nettsiden, velg Inspiser fra listen over alternativer for å åpne utviklerverktøyene. Klikk deretter på Nettverk-fanen, og Last inn på nytt siden, og velg deretter en forespørsel om å se HTTP-hodene, som fremhevet i følgende skjermbilde.

Trinn 6: Omdirigere HTTP til HTTPS i Varnish Cache

9. For å kjøre nettstedet ditt kun på HTTPS, må du omdirigere all HTTP-trafikk til HTTPS. Du kan gjøre dette ved å legge til følgende konfigurasjon i Hitch-konfigurasjonsfilen.

vi /etc/hitch/hitch.conf 

Først legger du til linjen import std; like under vlc 4.0;, og se etter vlc_recv-underrutinen, som er den første VCL-subrutinen som kjøres umiddelbart etter at Varnish Cache har analysert klientforespørselen til dens grunnleggende datastruktur. Det er her vi kan endre forespørselshodene og kjøre en synth for å omdirigere klientforespørsler.

Endre den slik at den ser slik ut.

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

Merk at PROXY-protokollen gjør det mulig for Larnish å se Hitchs lytteport 443 fra server.ip< variabel. Så linjen std.port(server.ip) returnerer portnummeret som klienttilkoblingen ble mottatt på.

Hvis porten ikke er 443 for HTTPS (som sjekket av (std.port(server.ip) != 443)), er subrutinen vil sette forespørselens HTTP Location header (set req.http.location) til en sikker forespørsel ("https://" + req.http.host< + req.url) ber nettleseren om å laste en HTTPS-versjon av nettsiden (dvs. URL-omdirigering).

Plassering-overskriften vil bli sendt til vcl_synth-underrutinen (som kalles ved å bruke return(synth(synth(301))) med en HTTP-statuskode på 301 (Flyttet permanent).

10. Deretter legger du til følgende vcl_synth-subrutine (en av dens mange brukstilfeller er å omdirigere brukere), for å behandle synthen ovenfor.

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

Den sjekker om svarstatusen er 301, HTTP Location header i svaret er satt til HTTP Location header i forespørselen som faktisk er en omdirigering til HTTPS og utfører en leveringshandling.

Leveringshandlingen bygger et svar med svaret fra backend, lagrer svaret i bufferen og sender det til klienten.

Lagre filen og lukk den.

11. Igjen, bruk de nye endringene i lakkkonfigurasjonen ved å starte tjenesten på nytt. Bruk deretter curl-kommandolinjeverktøyet for å bekrefte omdirigering fra HTTP til HTTPS.

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

Fra nettleseren er responsen også den samme som vist på følgende skjermbilde.

Vi håper at alt har fungert bra frem til nå. Hvis ikke, send en kommentar eller spørsmål via tilbakemeldingsskjemaet nedenfor. For avanserte konfigurasjonsalternativer, gå til Varnish Cache-dokumentasjonen og Hitch-dokumentasjonen.