Ricerca nel sito web

Come abilitare HTTPS per Varnish Cache utilizzando Hitch su CentOS-RHEL 8


Varnish Cache non dispone del supporto nativo per SSL/TLS e altri protocolli associati alla porta 443. Se utilizzi Varnish Cache per migliorare le prestazioni della tua applicazione web, devi installare e configurare un altro software chiamato proxy di terminazione SSL/TLS, per lavorare insieme a Varnish Cache >Varnish Cache per abilitare HTTPS.

Hitch è un proxy SSL/TLS scalabile, open source gratuito, basato su libev, progettato per Varnish Cache, che attualmente funziona su Linux, OpenBSD, FreeBSD e MacOSX. Tuttavia, termina le connessioni TLS/SSL restando in ascolto sulla porta 443 (la porta predefinita per le connessioni HTTPS) e inoltra il traffico non crittografato a Varnish Cache , dovrebbe funzionare anche con altri backend.

Supporta TLS1.2 e TLS1.3 e legacy TLS 1.0/1.1, supporta ALPN (Negoziazione del protocollo a livello di applicazione) e NPN (Negoziazione del protocollo successivo) per HTTP/2, un protocollo PROXY per segnalare al client IP/porta a un backend, connessioni socket di dominio UNIX all'origine, SNI (Server Name Indication), con e senza certificati con caratteri jolly. Inoltre, funziona bene per installazioni di grandi dimensioni che richiedono fino a 15.000 prese di ascolto e 500.000 certificati.

Come continuazione dei nostri due articoli precedenti sull'installazione di Varnish Cache per server HTTP Nginx e Apache, questa guida mostra come abilitare HTTPS< per Varnish Cache utilizzando Hitch TLS Proxy su CentOS/RHEL 8.

Questa guida presuppone che tu abbia installato Varnish per server web Nginx o Apache, altrimenti vedi:

  • Come installare Varnish Cache 6 per Nginx Web Server su CentOS/RHEL 8
  • Come installare Varnish Cache 6 per Apache Web Server su CentOS/RHEL 8

Passaggio 1: installa Hitch su CentOS/RHEL 8

1. Il pacchetto Hitch è fornito nel repository EPEL (Extra Packages for Enterprise Linux). Per installarlo, abilita prima EPEL sul tuo sistema e poi installa il pacchetto. Se non hai installato il pacchetto OpenSSL, installalo anche tu.

dnf install epel-release
dnf install hitch openssl

2. Una volta completata l'installazione del pacchetto, dovrai configurare Varnish Cache affinché funzioni Hitch. Devi anche configurare Hitch per utilizzare i tuoi certificati SSL/TLS e Varnish come backend. Il file di configurazione principale di Hitch si trova in /etc/hitch/hitch.conf, come spiegato di seguito.

Passaggio 2: configurazione della cache di Varnish per Hitch

3. Successivamente, abilita Varnish ad ascoltare una porta aggiuntiva (8443 nel nostro caso) utilizzando il protocollo PROXY supporto, per le comunicazioni con Hitch.

Quindi apri il file del servizio systemd di Varnish per la modifica.

systemctl edit --full varnish

Cerca la riga ExecStart e aggiungi un ulteriore flag -a con il valore 127.0.0.1:8443,proxy. Usare un valore di 127.0.0.1:8443 significa che Varnish accetterà solo la connessione interna (da processi in esecuzione sullo stesso server, cioè intoppo in questo caso) ma non connessioni esterne.

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

Salvare il file e quindi riavviare il servizio Varnish per applicare le ultime modifiche.

systemctl restart varnish

Passaggio 3: ottenere i certificati SSL/TLS

4. In questa sezione spiegheremo come creare il pacchetto di certificati SSL/TLS da utilizzare in Hitch. Per questa guida, spiegheremo le diverse opzioni su come utilizzare un certificato autofirmato, un certificato commerciale o uno di Let's Encrypt.

Per creare un certificato autofirmato (che dovresti utilizzare solo in un ambiente di test locale), puoi utilizzare lo strumento 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

Quindi crea un pacchetto del certificato e della chiave come segue.

cat tecmint.crt tecmint.key >tecmint.pem

Nota: per l'utilizzo in produzione, puoi acquistare un certificato da un'autorità di certificazione commerciale (CA) o ottieni un certificato gratuito, automatizzato e pienamente riconosciuto da Let's Encrypt. Quindi crea un pacchetto PEM.

Se hai acquistato un certificato da una CA commerciale, devi unire la chiave privata, il certificato e il pacchetto CA come mostrato.

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

Per Let's Encrypt, il certificato, la chiave privata e l'intera catena verranno archiviati in /etc/letsencrypt/live/example.com/, quindi crea il pacchetto come mostrato .

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

Passaggio 4: configurazione e avvio di Hitch

5. Successivamente, configura Varnish come backend per Hitch e specifica i file di certificato SSL/TLS da utilizzare per HTTPS, nel file di configurazione principale di Hitch, aprilo per la modifica.

vi /etc/hitch/hitch.conf

La sezione frontend definisce gli indirizzi IP e la porta che Hitch ascolterà. La configurazione predefinita è in ascolto su tutte le interfacce IPv4 e IPv6 collegate al server e viene eseguita sulla porta 443 e gestisce HTTPS< in entrata richieste, passandole a Varnish.

Modifica la porta proxy backend predefinita da 6086 a 8443 (la porta utilizzata per inoltrare le richieste a Varnish) nel Aggancia il file di configurazione, utilizzando il parametro backend. Inoltre, specifica il file del certificato utilizzando il parametro pem-file come mostrato.

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

Salva il file e chiudilo.

6. Ora avvia il servizio hitch e abilitalo all'avvio automatico all'avvio del sistema. Tieni presente che l'opzione --now quando utilizzata con abilita, avvia anche un servizio systemd e quindi controlla lo stato per vedere se è attivo e funzionante come segue.

systemctl enable --now hitch
systemctl status hitch

7. Prima di procedere con la verifica se il tuo sito web/applicazione è ora in esecuzione su HTTPS, devi consentire la porta del servizio HTTPS 443 in il firewall per consentire alle richieste destinate a quella porta sul server di passare attraverso il firewall.

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

Passaggio 5: test della terminazione SSL/TLS con l'installazione di Varnish Cache-Hitch

8. È giunto il momento di testare la configurazione di Varnish Cache-Hitch. Apri un browser web e utilizza l'IP del tuo dominio o server per navigare su HTTPS.

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

Una volta caricata la pagina dell'indice della tua applicazione web, controlla le intestazioni HTTP per confermare che il contenuto viene servito tramite Varnish Cache.

Per fare ciò, fai clic con il pulsante destro del mouse sulla pagina web caricata, seleziona Ispeziona dall'elenco di opzioni per aprire gli strumenti di sviluppo. Quindi fare clic sulla scheda Rete e Ricarica la pagina, quindi selezionare una richiesta per visualizzare le intestazioni HTTP, come evidenziato nello screenshot seguente.

Passaggio 6: reindirizzamento da HTTP a HTTPS in Varnish Cache

9. Per eseguire il tuo sito web solo su HTTPS, devi reindirizzare tutto il traffico HTTP a HTTPS. Puoi farlo aggiungendo la seguente configurazione nel file di configurazione di Hitch.

vi /etc/hitch/hitch.conf 

Innanzitutto, aggiungi la riga import std; appena sotto vlc 4.0;, quindi cerca la subroutine vlc_recv, che è la prima subroutine VCL eseguita immediatamente dopo che Varnish Cache ha analizzato la richiesta del client nella sua struttura dati di base. È qui che possiamo modificare le intestazioni delle richieste ed eseguire un sintetizzatore per reindirizzare le richieste del client.

Modificalo in questo modo.

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

Tieni presente che il protocollo PROXY consente a Varnish di vedere la porta di ascolto Hitch 443 dal server.ip< variabile. Quindi la riga std.port(server.ip) restituisce il numero di porta su cui è stata ricevuta la connessione client.

Se la porta non è 443 per HTTPS (come controllato da (std.port(server.ip) != 443)), la subroutine imposterà l'intestazione della posizione HTTP della richiesta (set req.http.location) su una richiesta sicura (“https://” + req.http.host< + req.url) chiedendo semplicemente al browser web di caricare una versione HTTPS della pagina web (ovvero il reindirizzamento dell'URL).

L'intestazione Location verrà inviata alla subroutine vcl_synth (che viene chiamata utilizzando return(synth(301))) con un codice di stato HTTP di 301 (Spostato permanentemente).

10. Successivamente, aggiungi la seguente subroutine vcl_synth (uno dei suoi numerosi casi d'uso è il reindirizzamento degli utenti), per elaborare il synth sopra.

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

Controlla se lo stato della risposta è 301, l'intestazione della posizione HTTP nella risposta è impostata sull'intestazione della posizione HTTP nella richiesta che è di fatto un reindirizzamento a HTTPS ed esegue un'azione di consegna.

L'azione di consegna crea una risposta con la risposta dal backend, archivia la risposta nella cache e la invia al client.

Salva il file e chiudilo.

11. Ancora una volta, applica le nuove modifiche nella configurazione di Varnish riavviando il servizio. Quindi utilizza lo strumento da riga di comando curl per confermare il reindirizzamento da HTTP a HTTPS.

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

Anche dal browser la risposta è la stessa mostrata nello screenshot seguente.

Speriamo che fino a questo punto tutto abbia funzionato bene. In caso contrario, lascia un commento o fai domande tramite il modulo di feedback qui sotto. Per qualsiasi opzione di configurazione avanzata, vai alla documentazione di Varnish Cache e alla documentazione di Hitch.