Pesquisa de site

Como habilitar HTTPS para Varnish Cache usando Hitch no CentOS-RHEL 8


O Varnish Cache não possui suporte nativo para SSL/TLS e outros protocolos associados à porta 443. Se você estiver usando o Varnish Cache para aumentar o desempenho do seu aplicativo da web, será necessário instalar e configurar outro software chamado proxy de terminação SSL/TLS, para trabalhar junto com o Varnish Cache para ativar HTTPS.

O Hitch é um proxy SSL/TLS escalonável, de código aberto e gratuito, baseado em libev, projetado para Varnish Cache, que atualmente funciona em Linux, OpenBSD, FreeBSD e MacOSX. Ele encerra conexões TLS/SSL escutando na porta 443 (a porta padrão para conexões HTTPS) e encaminha o tráfego não criptografado para o Varnish Cache. , também deverá funcionar com outros back-ends.

Suporta TLS1.2 e TLS1.3 e TLS 1.0/1.1 legado, suporta ALPN (Application-Layer Protocol Negotiation) e NPN (Next Protocol Negotiation) para HTTP/2, um protocolo PROXY para sinalizar o cliente IP/porta para um backend, conexões de soquete de domínio UNIX para a origem, SNI (Indicação de Nome de Servidor), com e sem certificados curinga. Além disso, funciona bem para instalações grandes que exigem até 15.000 soquetes de escuta e 500.000 certificados.

Como continuação de nossos dois artigos anteriores sobre a instalação do Varnish Cache para servidores HTTP Nginx e Apache, este guia mostra como ativar o HTTPS< para Varnish Cache usando o Hitch TLS Proxy no CentOS/RHEL 8.

Este guia pressupõe que você tenha instalado o Varnish para o servidor web Nginx ou Apache, caso contrário, consulte:

  • Como instalar o Varnish Cache 6 para o servidor Web Nginx no CentOS/RHEL 8
  • Como instalar o Varnish Cache 6 para Apache Web Server no CentOS/RHEL 8

Etapa 1: Instale o Hitch no CentOS/RHEL 8

1. O pacote Hitch é fornecido no repositório EPEL (Pacotes Extra para Enterprise Linux). Para instalá-lo, primeiro habilite o EPEL em seu sistema e depois instale o pacote. Se você não tiver o pacote OpenSSL instalado, instale-o também.

dnf install epel-release
dnf install hitch openssl

2. Quando a instalação do pacote for concluída, você terá que configurar o Varnish Cache para funcionar com o Hitch. Você também precisa configurar o Hitch para usar seus certificados SSL/TLS e o Varnish como um backend. O arquivo de configuração principal do Hitch está localizado em /etc/hitch/hitch.conf, que é explicado abaixo.

Etapa 2: Configurando o Varnish Cache para Hitch

3. Em seguida, habilite o Varnish para escutar uma porta adicional (8443 em nosso caso) usando o protocolo PROXY suporte, para comunicações com Hitch.

Portanto, abra o arquivo de serviço Varnish systemd para edição.

systemctl edit --full varnish

Procure a linha ExecStart e adicione um sinalizador -a adicional com o valor 127.0.0.1:8443,proxy. Usar um valor de 127.0.0.1:8443 significa que o Varnish aceitará apenas a conexão interna (de processos em execução no mesmo servidor, ou seja, problemas neste caso), mas não conexões externas.

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

Salve o arquivo e reinicie o serviço Varnish para aplicar as alterações mais recentes.

systemctl restart varnish

Etapa 3: Obtenção de certificados SSL/TLS

4. Nesta seção, explicaremos como criar o pacote de certificados SSL/TLS a ser usado no Hitch. Neste guia, explicaremos as diferentes opções de como usar um certificado autoassinado, um certificado comercial ou um de Let’s Encrypt.

Para criar um certificado autoassinado (que você só deve usar em um ambiente de teste local), você pode usar a ferramenta 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

Em seguida, crie um pacote do certificado e da chave da seguinte maneira.

cat tecmint.crt tecmint.key >tecmint.pem

Nota: Para uso em produção, você pode comprar um certificado de uma Autoridade de Certificação (CA) comercial ou obtenha um certificado gratuito, automatizado e totalmente reconhecido em Let's Encrypt. Em seguida, crie um pacote PEM.

Se você comprou um certificado de uma CA comercial, será necessário mesclar a chave privada, o certificado e o pacote de CA conforme mostrado.

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

Para Let's Encrypt, o certificado, a chave privada e a cadeia completa serão armazenados em /etc/letsencrypt/live/example.com/, então crie o pacote conforme mostrado .

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

Etapa 4: configurar e iniciar o Hitch

5. Em seguida, configure o Varnish como backend para o Hitch e especifique os arquivos de certificado SSL/TLS a serem usados para HTTPS, no arquivo de configuração principal do Hitch, abra-o para edição.

vi /etc/hitch/hitch.conf

A seção frontend define os endereços IP e a porta que o Hitch irá escutar. A configuração padrão é escutar todas as interfaces IPv4 e IPv6 anexadas ao servidor e executar na porta 443 e lidar com HTTPS< de entrada. solicitações, entregando-as ao Varnish.

Altere a porta do proxy backend padrão de 6086 para 8443 (a porta usada para encaminhar solicitações para o Varnish) no Arquivo de configuração Hitch, usando o parâmetro backend. Além disso, especifique o arquivo de certificado usando o parâmetro pem-file conforme mostrado.

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

Salve o arquivo e feche-o.

6. Agora inicie o serviço hitch e habilite-o para iniciar automaticamente na inicialização do sistema. Observe que a opção --now, quando usada com enable, também inicia um serviço systemd e, em seguida, verifica o status para ver se ele está funcionando da seguinte maneira.

systemctl enable --now hitch
systemctl status hitch

7. Antes de prosseguir para testar se seu site/aplicativo está sendo executado em HTTPS, você precisa permitir a porta de serviço HTTPS 443 em o firewall para permitir que solicitações destinadas a essa porta no servidor passem pelo firewall.

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

Etapa 5: Testando a terminação SSL/TLS com a configuração Varnish Cache-Hitch

8. Agora é hora de testar a configuração do Varnish Cache-Hitch. Abra um navegador da web e use o seu domínio ou IP do servidor para navegar por HTTPS.

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

Depois que a página de índice do seu aplicativo da web for carregada, verifique os cabeçalhos HTTP para confirmar se o conteúdo está sendo servido por meio do Varnish Cache.

Para fazer isso, clique com o botão direito na página da web carregada e selecione Inspecionar na lista de opções para abrir as ferramentas do desenvolvedor. Em seguida, clique na guia Rede, Recarregue a página e selecione uma solicitação para visualizar os cabeçalhos HTTP, conforme destacado na captura de tela a seguir.

Etapa 6: Redirecionando HTTP para HTTPS no Varnish Cache

9. Para executar seu site apenas em HTTPS, você precisa redirecionar todo o tráfego HTTP para HTTPS. Você pode fazer isso adicionando a seguinte configuração ao arquivo de configuração do Hitch.

vi /etc/hitch/hitch.conf 

Primeiro, adicione a linha import std; logo abaixo de vlc 4.0;, depois procure pela sub-rotina vlc_recv, que é a primeira sub-rotina VCL executada imediatamente depois que o Varnish Cache analisou a solicitação do cliente em sua estrutura de dados básica. É onde podemos modificar os cabeçalhos das solicitações e executar um sintetizador para redirecionar as solicitações dos clientes.

Modifique-o para ficar assim.

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

Observe que o protocolo PROXY permite que o Varnish veja a porta de escuta do Hitch 443 do server.ip variável. Portanto, a linha std.port(server.ip) retorna o número da porta na qual a conexão do cliente foi recebida.

Se a porta não for 443 para HTTPS (conforme verificado por (std.port(server.ip) != 443)), a sub-rotina definirá o cabeçalho HTTP Location da solicitação (set req.http.location) como uma solicitação segura (“https://” + req.http.host< + req.url) simplesmente pedindo ao navegador para carregar uma versão HTTPS da página da web (ou seja, redirecionamento de URL).

O cabeçalho Location será enviado para a sub-rotina vcl_synth (que é chamada usando return(synth(301))) com um código de status HTTP de 301 (Movido permanentemente).

10. Em seguida, adicione a seguinte sub-rotina vcl_synth (um de seus muitos casos de uso é redirecionar usuários), para processar o sintetizador acima.

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

Ele verifica se o status da resposta é 301, o cabeçalho HTTP Location na resposta é definido como o cabeçalho HTTP Location na solicitação, que é na verdade um redirecionamento para HTTPS e executa uma ação de entrega.

A ação deliver cria uma resposta com a resposta do back-end, armazena a resposta no cache e a envia ao cliente.

Salve o arquivo e feche-o.

11. Mais uma vez, aplique as novas alterações na configuração do Varnish reiniciando o serviço. Em seguida, use a ferramenta de linha de comando curl para confirmar o redirecionamento de HTTP para HTTPS.

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

No navegador, a resposta também é a mesma mostrada na imagem a seguir.

Esperamos que tudo tenha funcionado bem até agora. Caso contrário, deixe um comentário ou perguntas por meio do formulário de feedback abaixo. Para quaisquer opções de configuração avançada, acesse a documentação do Varnish Cache e a documentação do Hitch.