Búsqueda de sitios web

Cómo habilitar HTTPS para Varnish Cache usando Hitch en CentOS-RHEL 8


Varnish Cache carece de soporte nativo para SSL/TLS y otros protocolos asociados con el puerto 443. Si está utilizando Varnish Cache para mejorar el rendimiento de su aplicación web, necesita instalar y configurar otro software llamado proxy de terminación SSL/TLS, para que funcione junto con >Varnish Cache para habilitar HTTPS.

Hitch es un proxy SSL/TLS escalable, basado en libev y de código abierto diseñado para Varnish Cache, que actualmente funciona en Linux, OpenBSD, FreeBSD y MacOSX. Sin embargo, finaliza las conexiones TLS/SSL escuchando en el puerto 443 (el puerto predeterminado para conexiones HTTPS) y reenvía el tráfico no cifrado a Varnish Cache. , también debería funcionar con otros backends.

Es compatible con TLS1.2 y TLS1.3 y TLS 1.0/1.1 heredado, admite ALPN (Negociación de protocolo de capa de aplicación) y NPN (Negociación de protocolo siguiente) para HTTP/2, un protocolo PROXY para señalar al cliente IP/puerto a un backend, conexiones de socket de dominio UNIX al origen, SNI (Indicación de nombre de servidor), con y sin certificados comodín. Además, funciona bien para grandes instalaciones que requieren hasta 15.000 tomas de escucha y 500.000 certificados.

Como continuación de nuestros dos artículos anteriores sobre la instalación de Varnish Cache para servidores HTTP Nginx y Apache, esta guía muestra cómo habilitar HTTPS< para Varnish Cache usando Hitch TLS Proxy en CentOS/RHEL 8.

Esta guía asume que ha instalado Varnish para el servidor web Nginx o Apache; de lo contrario, consulte:

  • Cómo instalar Varnish Cache 6 para el servidor web Nginx en CentOS/RHEL 8
  • Cómo instalar Varnish Cache 6 para el servidor web Apache en CentOS/RHEL 8

Paso 1: Instale Hitch en CentOS/RHEL 8

1. El paquete Hitch se proporciona en el repositorio EPEL (Paquetes adicionales para Enterprise Linux). Para instalarlo, primero habilite EPEL en su sistema y luego instale el paquete. Si no tiene instalado el paquete OpenSSL, instálelo también.

dnf install epel-release
dnf install hitch openssl

2. Cuando se complete la instalación del paquete, deberá configurar Varnish Cache para que funcione con Hitch. También necesita configurar Hitch para usar sus certificados SSL/TLS y Varnish como backend. El archivo de configuración principal de Hitch se encuentra en /etc/hitch/hitch.conf, que se explica a continuación.

Paso 2: Configurar Varnish Cache para Hitch

3. A continuación, habilite Varnish para escuchar un puerto adicional (8443 en nuestro caso) utilizando el protocolo PROXY. soporte, para comunicaciones con Hitch.

Así que abra el archivo del servicio Varnish systemd para editarlo.

systemctl edit --full varnish

Busque la línea ExecStart y agregue un indicador -a adicional con el valor 127.0.0.1:8443,proxy. Usar un valor de 127.0.0.1:8443 significa que Varnish solo aceptará la conexión interna (de procesos que se ejecutan en el mismo servidor, es decir, en este caso, enganche), pero no conexiones externas.

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

Guarde el archivo y luego reinicie el servicio Varnish para aplicar los últimos cambios.

systemctl restart varnish

Paso 3: Obtener certificados SSL/TLS

4. En esta sección, explicaremos cómo crear el paquete de certificados SSL/TLS que se utilizará en Hitch. Para esta guía, explicaremos las diferentes opciones de cómo utilizar un certificado autofirmado, un certificado comercial o uno de Let's Encrypt.

Para crear un certificado autofirmado (que solo debe utilizar en un entorno de prueba local), puede utilizar la herramienta 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

Luego cree un paquete del certificado y la clave de la siguiente manera.

cat tecmint.crt tecmint.key >tecmint.pem

Nota: Para uso en producción, puede comprar un certificado de una Autoridad certificadora (CA) comercial o obtenga un certificado gratuito, automatizado y totalmente reconocido de Let's Encrypt. Luego cree un paquete PEM.

Si compró un certificado de una CA comercial, debe fusionar la clave privada, el certificado y el paquete de CA como se muestra.

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

Para Let's Encrypt, el certificado, la clave privada y la cadena completa se almacenarán en /etc/letsencrypt/live/example.com/, así que cree el paquete como se muestra .

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

Paso 4: Configurar e iniciar el enganche

5. A continuación, configure Varnish como backend para Hitch y especifique los archivos de certificado SSL/TLS que se utilizarán para HTTPS, en el archivo de configuración principal de Hitch, ábrelo para editarlo.

vi /etc/hitch/hitch.conf

La sección frontend define las direcciones IP y el puerto que Hitch escuchará. La configuración predeterminada es escuchar en todas las interfaces IPv4 e IPv6 conectadas al servidor y se ejecuta en el puerto 443 y manejar los HTTPS< entrantes. solicitudes y entregárselas a Varnish.

Cambie el puerto proxy backend predeterminado de 6086 a 8443 (el puerto utilizado para reenviar solicitudes a Varnish) en el Archivo de configuración de Hitch, utilizando el parámetro backend. Además, especifique el archivo del certificado utilizando el parámetro pem-file como se muestra.

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

Guarde el archivo y ciérrelo.

6. Ahora inicie el servicio hitch y habilítelo para que se inicie automáticamente al iniciar el sistema. Tenga en cuenta que el modificador --now, cuando se usa con enable, también inicia un servicio systemd y luego verifica el estado para ver si está en funcionamiento de la siguiente manera.

systemctl enable --now hitch
systemctl status hitch

7. Antes de proceder a probar si su sitio web/aplicación ahora se ejecuta en HTTPS, debe permitir el puerto 443 del servicio HTTPS en el firewall para permitir que las solicitudes destinadas a ese puerto en el servidor pasen a través del firewall.

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

Paso 5: Probar la terminación SSL/TLS con la configuración de Varnish Cache-Hitch

8. Ahora es el momento de probar la configuración de Varnish Cache-Hitch. Abra un navegador web y utilice la IP de su dominio o servidor para navegar a través de HTTPS.

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

Una vez que se haya cargado la página de índice de su aplicación web, verifique los encabezados HTTP para confirmar que el contenido se entrega a través de Varnish Cache.

Para hacerlo, haga clic derecho en la página web cargada, seleccione Inspeccionar de la lista de opciones para abrir las herramientas de desarrollador. Luego haga clic en la pestaña Red y Recargar la página, luego seleccione una solicitud para ver los encabezados HTTP, como se resalta en la siguiente captura de pantalla.

Paso 6: Redirigir HTTP a HTTPS en Varnish Cache

9. Para ejecutar su sitio web solo en HTTPS, debe redirigir todo el tráfico HTTP a HTTPS. Puede hacer esto agregando la siguiente configuración en su archivo de configuración de Hitch.

vi /etc/hitch/hitch.conf 

Primero, agregue la línea import std; justo debajo de vlc 4.0;, luego busque la subrutina vlc_recv, que es la primera subrutina VCL ejecutada inmediatamente. después de que Varnish Cache haya analizado la solicitud del cliente en su estructura de datos básica. Es donde podemos modificar los encabezados de las solicitudes y ejecutar un sintetizador para redirigir las solicitudes de los clientes.

Modifíquelo para que se vea así.

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

Tenga en cuenta que el protocolo PROXY permite que Varnish vea el puerto de escucha de Hitch 443 desde el server.ip variable. Entonces, la línea std.port(server.ip) devuelve el número de puerto en el que se recibió la conexión del cliente.

Si el puerto no es 443 para HTTPS (según lo verificado por (std.port(server.ip) != 443)), la subrutina establecerá el encabezado de ubicación HTTP de la solicitud (set req.http.location) en una solicitud segura (“https://” + req.http.host< + req.url) simplemente pidiendo al navegador web que cargue una versión HTTPS de la página web (es decir, redirección de URL).

El encabezado Location se enviará a la subrutina vcl_synth (que se llama usando return(synth(301))) con un código de estado HTTP de 301 (Movido permanentemente).

10. A continuación, agregue la siguiente subrutina vcl_synth (uno de sus muchos casos de uso es redirigir a los usuarios) para procesar el sintetizador anterior.

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

Comprueba si el estado de la respuesta es 301, el encabezado de Ubicación HTTP en la respuesta se establece en el encabezado de Ubicación HTTP en la solicitud, que de hecho es una redirección a HTTPS y ejecuta una acción de entrega.

La acción de entrega crea una respuesta con la respuesta del backend, almacena la respuesta en el caché y la envía al cliente.

Guarde el archivo y ciérrelo.

11. Una vez más, aplique los nuevos cambios en la configuración de Varnish reiniciando el servicio. Luego utilice la herramienta de línea de comandos curl para confirmar la redirección de HTTP a HTTPS.

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

Desde el navegador, la respuesta también es la misma que se muestra en la siguiente captura de pantalla.

Esperamos que todo haya funcionado bien hasta este momento. De lo contrario, envíe un comentario o preguntas a través del formulario de comentarios a continuación. Para conocer las opciones de configuración avanzadas, consulte la documentación de Varnish Cache y la documentación de Hitch.