Extraindo Dados de Pacotes HAProxy

Aprimorando a Transparência do Fluxo de Dados no Seu Balanceador de Carga: Um Guia Prático

O aumento da clareza no fluxo de dados do seu balanceador de carga oferece benefícios substanciais. As aplicações web estão em constante intercâmbio de informações, no entanto, frequentemente, é desafiador obter dados cruciais durante esse processo. E se fosse possível adquirir uma visão mais aprofundada para compreender melhor o tráfego?

Esse procedimento inicia-se ao preservar informações cruciais, como o endereço IP de origem do cliente. Os clientes frequentemente utilizam o protocolo PROXY para transmitir não apenas o endereço IP original do cliente, mas também para incorporar informações adicionais na requisição. De fato, diversas aplicações integram cabeçalhos adicionais, como PP2_TYPE_ALPN, entre outros. Interessantemente, o desenvolvimento desse protocolo ocorreu internamente na HAProxy e agora é amplamente reconhecido na infraestrutura web moderna. Contudo, há um esforço envolvido na extração e interpretação dessas informações de cabeçalho. Ferramentas externas populares, como o TShark, podem oferecer assistência nesse processo.

Curiosidade: Você sabia que o protocolo PROXY possibilita uma análise mais profunda do tráfego, permitindo identificar não apenas o endereço IP do cliente, mas também informações como o tipo de camada de segurança (ALPN) utilizada na comunicação? Isso fornece uma camada adicional de detalhes que pode ser valiosa para otimizar o desempenho e a segurança da sua infraestrutura.

Neste guia, inicialmente, explicaremos a importância dos dados de conexão. Posteriormente, você aprenderá sobre o funcionamento do protocolo PROXY, como utilizar o analisador TShark para capturar e examinar pacotes, e visualizar os resultados da extração.

O que torna os dados de tráfego tão valiosos?

Em teoria, cada requisição que atravessa um balanceador de carga, como o HAProxy, pode conter o endereço IP do cliente, informações de porta, um endereço IP de destino e até mesmo um identificador de sub-rede de nuvem privada virtual (VPC). Esses elementos de dados possibilitam a validação da conexão. Por exemplo, a análise do cabeçalho pode auxiliar na identificação de hosts confiáveis com identidades legítimas. Da mesma forma, o HAProxy pode utilizar essas informações para destacar hosts problemáticos e interromper o tráfego conforme necessário.

No nível mais elevado, esses parâmetros oferecem contexto crucial por trás das requisições, ampliando a transparência nas vias de comunicação entre cliente e servidor. Isso facilita a compreensão do fluxo de tráfego e, possivelmente, a identificação de falhas de configuração.

Por fim, os dados encapsulados por meio do protocolo PROXY possibilitam encadear diversas camadas de NAT ou proxies TCP, mantendo o endereço IP original. O cabeçalho do protocolo PROXY, em um exemplo prático, viabiliza o tráfego ao atravessar com sucesso firewalls e proxies subsequentes.

O que é o Protocolo Proxy?

O protocolo PROXY oferece uma forma conveniente de transportar informações de conexão de forma segura entre o cliente e o servidor. Sem um balanceador de carga no meio, o servidor normalmente não seria capaz de recuperar esses dados de forma direta e independente. Isto inclui, no HAProxy:

  • Uma família de endereços, como AF_INET para IPv4, AF_INET6 para IPv6 e AF_UNIX.
  • Protocolos de soquete para TCP e UDP.
  • Endereços de origem e destino na Camada 3.
  • Quaisquer portas de origem e destino na Camada 4.

O protocolo PROXY foi desenhado para ser facilmente analisável. Enquanto a Versão 1 estava focada na legibilidade humana, a Versão 2 acrescenta suporte para codificação binária, acelerando ainda mais este processo. Curiosidade: O protocolo PROXY é o sucessor do nosso protocolo XCLIENT, evidenciando a constante evolução para satisfazer as exigências modernas de transporte de dados.

Como Funciona o Protocolo Proxy?

Primariamente, sabemos que os clientes utilizam o protocolo PROXY para incorporar informações de conexão. Mas como tudo opera nos bastidores?

O protocolo foi concebido para reduzir a sobrecarga no processamento de informações, sem exigir que os utilizadores efetuem alterações significativas nos seus componentes de backend. Adicionalmente, o protocolo evita as perdas típicas de parâmetros de conexão que ocorrem ao retransmitir conexões TCP através de um proxy.

Isto contorna o que designamos por problema do “proxy burro”, onde um balanceador de carga processa dados agnósticos ao protocolo sem saber qual protocolo está a ser transportado pela conexão. Curiosidade: O termo “proxy burro” destaca a limitação de processar dados sem inteligência sobre o protocolo subjacente. O HAProxy pode operar em modo TCP puro e enquadrar-se nesta categoria.

Esta não é, por si só, uma faceta negativa. Contudo, podem surgir desafios técnicos ao utilizar a diretiva keep-alive. Apenas a primeira solicitação numa nova conexão passará o cabeçalho X-Forwarded-For ou a extensão Forwarded, o que é um problema em conexões duradouras que lidam com múltiplas solicitações. Dado que as informações do cliente nesses cabeçalhos frequentemente permanecem inalteradas, enviar um cabeçalho com cada solicitação é desnecessário.

Curiosidade: A problemática do keep-alive destaca a complexidade de manter a integridade das informações do cliente em conexões de longa duração. Empacotar informações através do protocolo PROXY resolve este problema. O HAProxy pode adicionar um cabeçalho a cada conexão, reportando características perspicazes de conexão para o outro lado. Isto é fácil de implementar sem conhecimento específico do protocolo. Adicionalmente, podemos eliminar quaisquer perigos e limitações relacionadas com o armazenamento em cache.

Agora que temos estes dados convenientemente pré-empacotados, como é que os utilizadores os desempacotam para torná-los utilizáveis?

Introdução ao Analisador de Pacotes TShark

O TShark, uma ferramenta integrante do software de análise de pacotes de código aberto Wireshark, destaca-se como uma solução eficaz para a rápida e fácil captura, leitura e impressão de pacotes do protocolo PROXY. Ao registrar as informações do Protocolo PROXY, essa ferramenta apresenta esses dados de forma clara, seja na saída do Terminal ou em um arquivo de destino.

Além disso, o TShark oferece benefícios notáveis, como a integração de filtros Wireshark por meio da linha de comando (CLI), a capacidade de captura direta de pacotes e a análise de capturas de pacotes (PCAP) a partir de um tcpdump. A configuração padrão do TShark alinha-se de perto com a funcionalidade do tcpdump, uma ferramenta amplamente conhecida e inclusa na maioria dos sistemas operativos baseados em Linux.

Curiosidade: O TShark, ao emular funcionalidades semelhantes ao tcpdump, simplifica a transição para usuários familiarizados com esta última ferramenta, proporcionando uma experiência mais intuitiva.

O manual do TShark esclarece que a ferramenta extrai dados “da primeira interface de rede disponível e exibe uma linha de resumo na saída padrão para cada pacote recebido”. Felizmente, o TShark, com sua abordagem amigável ao utilizador, nos permite explorar exemplos técnicos de extração de dados de pacotes do protocolo PROXY.

UpSnap – Uma Aplicação de Wake on LAN Self-Hosted – HomeServer.pt – Informática e Tecnologia
homeserver.pt

Configuração do TShark e Teste de Captura de Pacotes

Antes de analisar detalhadamente os pacotes, é necessário instalar o TShark por meio da CLI, especialmente se a sua distribuição Linux não o incluir automaticamente. Para usuários do Red Hat Enterprise Linux (RHEL) e RHEL clones, o comando apropriado seria:

Bash
sudo yum install wireshark

No caso de utilizadores de Ubuntu e Debian, o comando adequado seria:

Bash
sudo apt-get install tshark

Agora, com o TShark instalado, é aconselhável realizar um teste básico de captura de pacotes para verificar o funcionamento correto. Utilize o comando a seguir para uma captura de cinco segundos, excluindo o tráfego na porta 22 para evitar a captura de dados do tráfego SSH:

Bash
tshark -f "tcp port not 22" -a "duration:5"

Se desejar analisar a saída posteriormente, é possível especificar um arquivo de destino utilizando o argumento -w NOME_ARQUIVO. Basta inserir o comando tshark -r NOME_ARQUIVO para ler o conteúdo posteriormente.

A seguir, o procedimento para direcionar exclusivamente pacotes do protocolo PROXY apresenta particularidades. Vamos explorar como realizá-lo.

Localização e Descompactação de Pacotes do Protocolo PROXY

Descobrir, identificar e decifrar pacotes do protocolo PROXY torna-se uma tarefa acessível com os filtros de visualização do Wireshark. Podemos filtrar apenas os pacotes relevantes, aproveitando os diversos filtros disponíveis para o tráfego de proxy.

Na maioria dos casos, um pacote do protocolo PROXY traz consigo um IP de Origem incorporado. Vamos encontrá-lo com o seguinte comando:

Bash
tshark -r NOME_ARQUIVO -Y proxy.src.ipv4

Este comando lista exclusivamente os pacotes que carregam informações do protocolo PROXY. Agora, e se quisermos espreitar o conteúdo desses pacotes? Basta adicionar a flag -V, resultando no seguinte comando CLI:

Bash
tshark -r NOME_ARQUIVO -Y proxy.src.ipv4 -V

Deste modo, o seu Terminal apresentará algo semelhante ao exemplo abaixo, mas agora com dados imaginários:

Bash
ubuntu_test@homeserver:/etc/hapee-2.6# tshark  -Y proxy.src.ipv4 -V
...
PROXY Protocol
    Magic: 1a2b3c4d5e6f7a8b9c0d0e0f
    0010 .... = Version: 3
    .... 0001 = Command: 2
    [Version: 3]
    Address Family Protocol: TCP over IPv4 (0x11)
        0001 .... = Address Family: IPv4 (0x1)
        .... 0001 = Protocol: 0x1
    Length: 18
    Source Address: 203.45.67.89
    Destination Address: 192.168.1.100
    Source Port: 54321
    Destination Port: 8080

E voilà! O conteúdo fictício do seu pacote do protocolo PROXY está agora visível e pronto para uma análise intrigante. Pode repetir este mesmo processo para outros pacotes PROXY.

Curiosidade: A utilização de filtros no Wireshark não apenas simplifica a localização de pacotes específicos, mas também destaca a versatilidade desta ferramenta ao oferecer uma visão detalhada do conteúdo, facilitando a análise e solução de problemas em redes.

Inspeção de Tráfego com Utilização de TLS

Na maioria dos casos, o tráfego é protegido pelo TLS. Contudo, estes pacotes TLS podem confundir ferramentas como o Wireshark, impedindo-as de identificar corretamente pacotes do protocolo PROXY. Isto é especialmente verdadeiro para o protocolo PROXY versão 2. A versão 2 adiciona uma assinatura binária não analisável, concebida para provocar falhas imediatas no SSL/TLS (entre outros protocolos) para impor o seu uso em determinadas conexões.

Felizmente, pode utilizar o seguinte comando para desativar facilmente a deteção do protocolo TLS (para fins de teste com o TShark) durante a captura de pacotes e restaurar a deteção de pacotes PROXY:

Bash
tshark -disable-protocol tls -Y proxy.src.ipv4 -V

Isto gera uma saída semelhante ao nosso comando original.

Testar Novos Pedidos com o Protocolo PROXY

Embora agora possa capturar dados importantes, por vezes é necessário gerar pedidos com o protocolo PROXY para testar a captura de dados. Pode enviar estes pedidos com o seguinte comando utilitário cURL:

Bash
curl --haproxy-protocol http://<o seu balanceador de carga>/...

Lembrete:
Deve adicionar :80 accept-proxy à linha bind da sua configuração para que isto funcione corretamente. Isto permite ao HAProxy aceitar o protocolo PROXY (tanto a Versão 1 como a Versão 2).

Ao executar este comando, verificará se a sua ligação está a funcionar e se nada está a impedir os pedidos com o protocolo PROXY de fluir através do HAProxy. Eis um exemplo de saída usando o comando curl --haproxy-protocol -v http://localhost:

Bash
*   A tentar ::1:80...
* A ligação a ::1 porta 80 falhou: Ligação recusada
*   A tentar 127.0.0.1:80...
* Ligado a localhost (127.0.0.1) porta 80 (#0)
> PROXY TCP4 127.0.0.1 127.0.0.1 53606 80
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.74.0
> Accept: */*
>
* Marcado bundle como não suportando multiuso
< HTTP/1.1 200 OK
< content-length: 123
< content-type: text/html
< date: Fri, 20 Jan 2023 12:34:56 GMT
<
<html>
<head>
<title>Página de Teste</title>
</head>
<body>

<h1>Conexão Bem-Sucedida!</h1>

</body>
</html>

Informação Importante ao Seu Alcance

O protocolo PROXY é um mecanismo incrivelmente útil para transportar informações cruciais de conexão através do HAProxy. Estes dados são valiosos para utilizadores que desejam mais insights sobre o seu tráfego, sem terem que fazer grandes concessões funcionais.

E embora alguns passos sejam necessários para desempacotar essa informação, ferramentas como o TShark tornam o processo bastante simples. Da próxima vez que quiser inspecionar o conteúdo dos seus pacotes com o protocolo PROXY, poderá fazê-lo sem complicações ou necessidade de conhecimentos técnicos específicos.

Artigos Relacionados