Com habilitar HTTPS per a la memòria cau de vernís mitjançant Hitch a CentOS-RHEL 8


Varnish Cache no té suport natiu per a SSL/TLS i altres protocols associats amb el port 443. Si utilitzeu Varnish Cache per augmentar el rendiment de la vostra aplicació web, haureu d'instal·lar i configurar un altre programari anomenat servidor intermediari de terminació SSL/TLS, perquè funcioni. juntament amb Vernish Cache per habilitar HTTPS.

The Hitch és un servidor intermediari SSL/TLS de codi obert gratuït, basat en libev i escalable dissenyat per a Varnish Cache, que actualment funciona a Linux, OpenBSD, FreeBSD i MacOSX. Finalitza les connexions TLS/SSL escoltant el port 443 (el port predeterminat per a les connexions HTTPS) i reenvia el trànsit no xifrat a Varnish Cache, però també hauria de funcionar amb altres backends.

Admet TLS1.2 i TLS1.3 i TLS heretat 1.0/1.1, admet ALPN (Negociació de protocol de capa d'aplicació) i NPN (Negociació de protocol següent) per a HTTP/2, un protocol PROXY per senyalitzar IP/port del client a un backend , connexions de socket de domini UNIX a l'origen, SNI (Server Name Indication), amb i sense certificats comodí. A més, funciona bé per a instal·lacions grans que requereixen fins a 15.000 endolls d'escolta i 500.000 certificats.

Com a continuació dels nostres dos articles anteriors sobre la instal·lació de Varnish Cache per a servidors HTTP Nginx i Apache, aquesta guia mostra com habilitar HTTPS per a Varnish Cache mitjançant Hitch TLS Proxy a CentOS/RHEL 8.

Aquesta guia suposa que heu instal·lat Varnish per al servidor web Nginx o Apache; en cas contrari, consulteu:

  • Com instal·lar Varnish Cache 6 per al servidor web Nginx a CentOS/RHEL 8
  • Com instal·lar Varnish Cache 6 per al servidor web Apache a CentOS/RHEL 8

Pas 1: instal·leu Hitch a CentOS/RHEL 8

1. El paquet Hitch es proporciona al repositori EPEL (Extra Packages for Enterprise Linux). Per instal·lar-lo, primer activeu EPEL al vostre sistema i després instal·leu el paquet. Si no teniu instal·lat el paquet OpenSSL, instal·leu-lo també.

# dnf install epel-release
# dnf install hitch openssl

2. Quan s'hagi completat la instal·lació del paquet, haureu de configurar la memòria cau del vernís perquè funcioni amb Hitch. També heu de configurar Hitch per utilitzar els vostres certificats SSL/TLS i Varnish com a backend. El fitxer de configuració principal de Hitch es troba a /etc/hitch/hitch.conf, que s'explica a continuació.

Pas 2: Configuració de la memòria cau de vernís per a Hitch

3. A continuació, activeu el Varnish per escoltar un port addicional (8443 en el nostre cas) mitjançant el suport del protocol PROXY, per a les comunicacions amb Hitch.

Per tant, obriu el fitxer de servei Systemd de Varnish per editar-lo.

# systemctl edit --full varnish

Busqueu la línia ExecStart i afegiu un indicador addicional -a amb el valor 127.0.0.1:8443,proxy. Utilitzar un valor de 127.0.0.1:8443 significa que Varnish només acceptarà la connexió interna (de processos que s'executen al mateix servidor, és a dir, hitch en aquest cas), però no connexions externes.

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

Deseu el fitxer i reinicieu el servei Vernish per aplicar els darrers canvis.

# systemctl restart varnish

Pas 3: obtenció de certificats SSL/TLS

4. En aquesta secció, explicarem com crear el paquet de certificats SSL/TLS que s'utilitzarà a Hitch. Per a aquesta guia, explicarem les diferents opcions de com utilitzar un certificat autofirmat, un certificat comercial o un de Let's Encrypt.

Per crear un certificat autofirmat (que només hauríeu d'utilitzar en un entorn de proves local), podeu utilitzar l'eina 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

A continuació, creeu un paquet del certificat i la clau de la manera següent.

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

Nota: per a ús de producció, podeu comprar un certificat d'una autoritat de certificació (CA) comercial o obtenir un certificat gratuït, automatitzat i totalment reconegut de Let's Encrypt. A continuació, creeu un paquet PEM.

Si heu comprat un certificat d'una CA comercial, heu de combinar la clau privada, el certificat i el paquet de CA tal com es mostra.

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

Per a Let's Encrypt, el certificat, la clau privada i la cadena completa s'emmagatzemaran a /etc/letsencrypt/live/example.com/, així que creeu el paquet tal com es mostra.

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

Pas 4: Configuració i inici de l'enganxament

5. A continuació, configureu Varnish com a backend per a Hitch i especifiqueu els fitxers de certificat SSL/TLS que voleu utilitzar per HTTPS, al fitxer de configuració principal de Hitch, obriu-lo per editar-lo.

# vi /etc/hitch/hitch.conf

La secció d'interfície defineix les adreces IP i el port que Hitch escoltarà. La configuració predeterminada és escoltar a totes les interfícies IPv4 i IPv6 connectades al servidor i s'executa al port 443 i gestionar les sol·licituds HTTPS entrants, lliurant-les a Varnish.

Canvieu el port de servidor intermediari predeterminat de 6086 a 8443 (el port utilitzat per reenviar les sol·licituds a Varnish) al fitxer de configuració de Hitch, utilitzant el paràmetre de backend. A més, especifiqueu el fitxer de certificat mitjançant el paràmetre pem-file tal com es mostra.

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

Deseu el fitxer i tanqueu-lo.

6. Ara inicieu el servei d'enganxament i activeu-lo perquè s'iniciï automàticament a l'arrencada del sistema. Tingueu en compte que el commutador --now quan s'utilitza amb enable, també inicia un servei systemd i després comproveu l'estat per veure si està en funcionament de la següent manera.

# systemctl enable --now hitch
# systemctl status hitch

7. Abans de procedir a provar si el vostre lloc web/aplicació ara s'està executant amb HTTPS, heu de permetre que el port de servei HTTPS 443 del tallafoc permeti que les sol·licituds destinades a aquest port del servidor passin pel tallafoc.

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

Pas 5: prova de la terminació SSL/TLS amb la configuració de la memòria cau de vernís

8. Ara és el moment de provar la configuració de Varnish Cache-Hitch. Obriu un navegador web i utilitzeu la IP del vostre domini o servidor per navegar per HTTPS.

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

Un cop s'hagi carregat la pàgina d'índex de la vostra aplicació web, comproveu les capçaleres HTTP per confirmar que el contingut es publica mitjançant la memòria cau de vernís.

Per fer-ho, feu clic amb el botó dret a la pàgina web carregada, seleccioneu Inspeccionar de la llista d'opcions per obrir les eines de desenvolupament. A continuació, feu clic a la pestanya Xarxa i torneu a carregar la pàgina i, a continuació, seleccioneu una sol·licitud per veure les capçaleres HTTP, tal com es destaca a la captura de pantalla següent.

Pas 6: redirecció d'HTTP a HTTPS a la memòria cau de vernís

9. Per executar el vostre lloc web només amb HTTPS, heu de redirigir tot el trànsit HTTP a HTTPS. Podeu fer-ho afegint la configuració següent al fitxer de configuració de Hitch.

# vi /etc/hitch/hitch.conf 

Primer, afegiu la línia import std; just per sota de vlc 4.0;, a continuació, busqueu la subrutina vlc_recv, que és la primera subrutina VCL executada immediatament després que Varnish Cache hagi analitzat la sol·licitud del client a la seva estructura de dades bàsica. És on podem modificar les capçaleres de la sol·licitud i executar un sintetitzador per redirigir les peticions dels clients.

Modifiqueu-lo perquè sembli així.

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

Tingueu en compte que el protocol PROXY permet a Varnish veure el port d'escolta 443 de Hitch des de la variable server.ip. Per tant, la línia std.port(server.ip) retorna el número de port on es va rebre la connexió del client.

Si el port no és 443 per a HTTPS (tal com està comprovat per (std.port(server.ip) != 443)), la subrutina establirà la capçalera d'ubicació HTTP de la sol·licitud (set req.http.location) en una sol·licitud segura ( https://” + req.http.host + req.url) simplement demanant al navegador web que carregui una versió HTTPS de la pàgina web (és a dir, redirecció d'URL).

La capçalera Ubicació s'enviarà a la subrutina vcl_synth (que s'anomena amb return(synth(301))) amb un codi d'estat HTTP de 301 (Mogut permanentment).

10. A continuació, afegiu la següent subrutina vcl_synth (un dels seus molts casos d'ús és redirigir usuaris), per processar el sintetitzador anterior.

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

Comprova si l'estat de resposta és 301, la capçalera d'ubicació HTTP de la resposta s'estableix a la capçalera d'ubicació HTTP de la sol·licitud, que de fet és una redirecció a HTTPS i executa una acció de lliurament.

L'acció d'entrega crea una resposta amb la resposta del backend, emmagatzema la resposta a la memòria cau i l'envia al client.

Deseu el fitxer i tanqueu-lo.

11. Un cop més, apliqueu els nous canvis a la configuració del vernís reiniciant el servei. A continuació, utilitzeu l'eina de línia d'ordres curl per confirmar la redirecció d'HTTP a HTTPS.

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

Des del navegador, la resposta també és la mateixa que es mostra a la captura de pantalla següent.

Esperem que tot hagi funcionat bé fins aquí. Si no, deixeu un comentari o preguntes mitjançant el formulari de comentaris que hi ha a continuació. Per a qualsevol opció de configuració avançada, aneu a la documentació de Hitch.