Kako omogućiti HTTPS za predmemoriju lakova pomoću Hitch-a na CentOS-RHEL 8


Varnish Cache nema nativnu podršku za SSL/TLS i druge protokole povezane s portom 443. Ako koristite Varnish Cache za poboljšanje izvedbe svoje web aplikacije, morate instalirati i konfigurirati drugi softver koji se naziva SSL/TLS terminal proxy za rad uz predmemoriju lakova kako bi se omogućio HTTPS.

The Hitch je besplatni otvoreni izvor, libev i skalabilan SSL/TLS proxy dizajniran za Varnish Cache, koji trenutno radi na Linuxu, OpenBSD, FreeBSD i MacOSX. Prekida TLS/SSL veze preslušavanjem na priključku 443 (zadani priključak za HTTPS veze) i prosljeđuje nešifrirani promet u Varnish Cache, međutim, trebao bi raditi i s drugim pozadinskim mrežama.

Podržava TLS1.2 i TLS1.3 i naslijeđeni TLS 1.0/1.1, podržava ALPN (pregovaranje o protokolu sloja aplikacija) i NPN (pregovaranje o sljedećem protokolu) za HTTP/2, protokol PROXY za signaliziranje IP/porta klijenta na pozadinu , UNIX veze utičnice domene s izvorom, SNI (oznaka imena poslužitelja), sa i bez zamjenskih certifikata. Uz to, dobro radi za velike instalacije koje zahtijevaju do 15 000 utičnica za slušanje i 500 000 certifikata.

Kao nastavak naša dva prethodna članka o instaliranju Varnish Cache za Nginx i Apache HTTP poslužitelje, ovaj vodič pokazuje kako omogućiti HTTPS za Varnish Cache koristeći Hitch TLS Proxy na CentOS/RHEL 8.

Ovaj vodič pretpostavlja da ste instalirali Varnish za Nginx ili Apache web poslužitelj, inače pogledajte:

  • Kako instalirati predmemoriju laka 6 za web server Nginx na CentOS/RHEL 8
  • Kako instalirati predmemoriju laka 6 za web poslužitelj Apache na CentOS/RHEL 8

Korak 1: Instalirajte spojnicu na CentOS/RHEL 8

1. Paket Hitch nalazi se u spremištu EPEL (Extra Packages for Enterprise Linux). Da biste ga instalirali, prvo omogućite EPEL na svom sustavu, a zatim instalirajte paket nakon toga. Ako nemate instaliran OpenSSL paket, instalirajte i njega.

# dnf install epel-release
# dnf install hitch openssl

2. Kada je instalacija paketa dovršena, morat ćete konfigurirati predmemoriju lakova da radi Hitch. Također morate konfigurirati Hitch da koristi vaše SSL/TLS certifikate i Varnish kao pozadinu. Glavna konfiguracijska datoteka Hitcha nalazi se na /etc/hitch/hitch.conf, što je objašnjeno u nastavku.

Korak 2: Konfiguriranje predmemorije lakova za Hitch

3. Zatim omogućite Varnishu da presluša dodatni priključak (8443 u našem slučaju) pomoću podrške protokola PROXY za komunikaciju s Hitchom.

Dakle, otvorite datoteku usluge Varnish systemd za uređivanje.

# systemctl edit --full varnish

Potražite redak ExecStart i dodajte dodatnu zastavicu -a s vrijednošću 127.0.0.1:8443,proxy. Korištenje vrijednosti 127.0.0.1:8443 znači da će Varnish prihvatiti samo internu vezu (iz procesa koji se izvode na istom poslužitelju, tj. U ovom slučaju spoj), ali ne i vanjske veze.

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

Spremite datoteku, a zatim ponovo pokrenite uslugu Lak da biste primijenili najnovije promjene.

# systemctl restart varnish

Korak 3: Dobivanje SSL/TLS certifikata

4. U ovom ćemo odjeljku objasniti kako stvoriti snop SSL/TLS certifikata koji će se koristiti pod Hitchom. U ovom ćemo vodiču objasniti različite mogućnosti upotrebe samopotpisanog certifikata, komercijalnog certifikata ili certifikata iz Let’s Encrypt.

Da biste stvorili samopotpisani certifikat (koji biste trebali koristiti samo u lokalnom testnom okruženju), možete koristiti alat OpenSSL.

# 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

Zatim stvorite snop certifikata i ključa kako slijedi.

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

Napomena: Za proizvodnu upotrebu možete kupiti certifikat od komercijalnog tijela za ovjeravanje (CA) ili preuzeti besplatni, automatizirani i potpuno prepoznati certifikat od Let’s Encrypt. Zatim stvorite PEM snop.

Ako ste kupili certifikat od komercijalnog CA-a, morate spojiti privatni ključ, certifikat i CA paket, kao što je prikazano.

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

Za Let’s Encrypt, certifikat, privatni ključ i cijeli lanac bit će pohranjeni na /etc/letsencrypt/live/example.com/, pa stvorite paket kao što je prikazano.

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

Korak 4: Konfiguriranje i pokretanje Hitch-a

5. Dalje, konfigurirajte Varnish kao pozadinu za Hitch i navedite datoteke certifikata SSL/TLS koje će se koristiti za HTTPS, u glavnoj konfiguracijskoj datoteci Hitcha, otvorite ga za uređivanje.

# vi /etc/hitch/hitch.conf

Odjeljak sučelja definira IP adrese i port će Hitch preslušati. Zadana konfiguracija je preslušavanje svih IPv4 i IPv6 sučelja pričvršćenih na poslužitelju i izvodi se na priključku 443 i obrađuje dolazne HTTPS zahtjeve, predajući ih Varnishu.

Promijenite zadani ulazni proxy port s 6086 na 8443 (port koji se koristi za prosljeđivanje zahtjeva Varnishu) u konfiguracijskoj datoteci Hitch, koristeći parametar pozadine. Također, navedite datoteku certifikata pomoću parametra pem-datoteke kao što je prikazano.

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

Spremite datoteku i zatvorite je.

6. Sada pokrenite uslugu zakačenja i omogućite joj automatsko pokretanje pri pokretanju sustava. Imajte na umu da prekidač --now kada se koristi s Enable, pokreće i sistemsku uslugu, a zatim provjerava status da li radi i radi li kako slijedi.

# systemctl enable --now hitch
# systemctl status hitch

7. Prije nego što nastavite testirati radi li vaše web mjesto/aplikacija sada na HTTPS-u, morate dopustiti HTTPS-ov servisni priključak 443 u vatrozidu da dopušta zahtjeve namijenjene tom priključku na poslužitelju da prolaze kroz vatrozid.

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

Korak 5: Testiranje prekida SSL/TLS-a pomoću postavljanja predmemorije laka

8. Sada je vrijeme za testiranje postavke Varnish Cache-Hitch. Otvorite web preglednik i koristite IP adrese svoje domene ili poslužitelja za navigaciju preko HTTPS-a.

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

Nakon što se indeksna stranica vaše web aplikacije učita, provjerite HTTP zaglavlja da biste potvrdili da se sadržaj poslužuje putem predmemorije lakova.

Da biste to učinili, kliknite desnu tipku miša na učitanu web stranicu, odaberite Inspect s popisa opcija da biste otvorili alate za programere. Zatim kliknite karticu Mreža i ponovo učitajte stranicu, a zatim odaberite zahtjev za prikaz HTTP zaglavlja, kao što je istaknuto na sljedećem snimku zaslona.

Korak 6: Preusmjeravanje HTTP-a na HTTPS u predmemoriji lakova

9. Da biste svoje web mjesto pokrenuli samo na HTTPS-u, sav HTTP promet morate preusmjeriti na HTTPS. To možete učiniti dodavanjem sljedeće konfiguracije u svoju konfiguracijsku datoteku Hitch.

# vi /etc/hitch/hitch.conf 

Prvo dodajte redak import std; odmah ispod vlc 4.0 ;, zatim potražite vlc_recv potprogram, koji je prvi VCL potprogram izvršen odmah nakon što je Varnish Cache raščlanio zahtjev klijenta u svojoj osnovnoj strukturi podataka. Tu možemo izmijeniti zaglavlja zahtjeva i izvršiti sintetiku za preusmjeravanje zahtjeva klijenta.

Izmijenite ga tako da izgleda ovako.

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

Imajte na umu da protokol PROXY omogućuje Varnishu da vidi Hitchov port za slušanje 443 s varijable server.ip. Tako linija std.port (server.ip) vraća broj porta na koji je primljena klijentska veza.

Ako port nije 443 za HTTPS (kako je potvrdio (std.port (server.ip)! = 443)), potprogram će postaviti zaglavlje HTTP lokacije zahtjeva (postaviti req.http.location) na siguran zahtjev (“ https:/”+ req.http.host + req.url) jednostavno traži od web preglednika da učita HTTPS verziju web stranice (tj. preusmjeravanje URL-a).

Zaglavlje lokacije bit će poslano vcl_synth potprogramu (koji se naziva pomoću return (synth (301))) s HTTP kodom statusa 301 (Premješteno trajno).

10. Dalje, dodajte sljedeću vcl_synth potprogram (jedan od mnogih slučajeva korištenja je preusmjeravanje korisnika) da biste obradili gornji sintetičar.

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

Provjerava je li status odgovora 301, zaglavlje HTTP lokacije u odgovoru postavljeno je na zaglavlje HTTP lokacije u zahtjevu koje je zapravo preusmjeravanje na HTTPS i izvršava radnju isporuke.

Akcija isporuke gradi odgovor s odgovorom iz pozadine, sprema odgovor u predmemoriju i šalje ga klijentu.

Spremite datoteku i zatvorite je.

11. Još jednom, primijenite nove promjene u konfiguraciji laka ponovnim pokretanjem usluge. Zatim upotrijebite alat za naredbene retke curl da biste potvrdili preusmjeravanje s HTTP-a na HTTPS.

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

Odgovor preglednika također je isti kao što je prikazano na sljedećem snimku zaslona.

Nadamo se da je sve dobro funkcioniralo do ovog trenutka. Ako nije, ispustite komentar ili pitanja putem obrasca za povratne informacije u nastavku. Za sve napredne opcije konfiguracije idite na dokumentaciju za Hitch.