Mergulho Profundo no que é um Forward Proxy

January 12, 2024

Technology

Utilizamos comumente o NGINX ou o Apache como balanceadores de carga e servidores proxy reverso, mesmo quando o tráfego da rede externa é encaminhado por meio desse software para alcançar os serviços reais dentro da rede interna. Embora exista um proxy reverso, também existe um proxy direto. Vamos explorar suas funcionalidades.

Proxy Reverso

Do Modelo OSI aos Servidores Proxy

Ao acessar serviços na internet, normalmente empregamos o protocolo HTTP, que opera na camada 7 do modelo OSI. Componentes familiares desse protocolo, como nomes de host, caminhos e parâmetros de consulta, fazem parte dessa camada. O protocolo HTTP é construído sobre os protocolos TCP ou UDP, que funcionam na camada 4 do modelo OSI, e os conceitos de portas usados durante o acesso ao serviço existem dentro desses protocolos. Indo além, tanto o TCP quanto o UDP são baseados no Protocolo de Internet (IP), que opera na camada 3 do modelo OSI, onde os endereços IP servem como "números de casa" da internet.

Ao usar uma rede IP para acessar a internet, o protocolo IP é responsável por endereçar o destino, encapsular pacotes de dados de acordo com as regras e encaminhá-los do endereço de origem para o endereço de destino dentro da rede IP. Por exemplo, o tráfego de rede viaja da rede local de um visitante através do dispositivo gateway fornecido pelo ISP, conectando-se à rede do ISP antes de acessar os serviços de um provedor de recursos.

Nesse ponto, usamos um gateway para acessar a internet. Ao discutir servidores proxy, podemos traçar um paralelo com a rede IP. Os servidores proxy atuam como gateways, preenchendo a lacuna para ajudar os clientes a acessar serviços. Eles essencialmente operam entre as camadas 4 e 7 do modelo OSI e, de fato, se enquadram na camada 5 do modelo OSI.

API7-Modelo OSI

Propósitos dos Servidores Proxy

Os servidores proxy são normalmente empregados para os seguintes propósitos:

  1. Saída Centralizada para Acesso à Rede Interna

As empresas frequentemente têm certos requisitos de segurança da informação, como controle de acesso e registro de tráfego. Com a prevalência de tráfego criptografado como HTTPS, ocultar o tráfego de rede sob senhas torna difícil registrar e auditar na fronteira da rede, aumentando o risco de vazamentos. A existência de um servidor proxy serve como uma saída unificada de tráfego, atuando como um intermediário para lidar com tarefas de auditoria de tráfego.

Além de propósitos voltados para humanos, os serviços proxy também podem servir como uma saída para serviços programáticos acessarem a rede externa. Por exemplo, quando um provedor de serviços oferece funcionalidade de webhook, ele precisa canalizar o tráfego por uma saída fixa, usando um único endereço IP fixo ou um intervalo de endereços IP fixos. Isso facilita que o destinatário das chamadas de webhook as coloque corretamente na lista branca do firewall. A falha em fazer isso expõe ambos os lados das chamadas de webhook a potenciais riscos de segurança.

  1. Ocultação da Identidade do Visitante

Às vezes, os usuários da internet podem desejar ocultar sua identidade, como seu endereço IP. Nesses casos, os servidores proxy transparentes entram em ação. O cliente inicialmente se conecta ao servidor proxy, especificando o endereço real do serviço ao qual deseja se conectar, e então acessa o serviço de destino através do servidor proxy usando o protocolo HTTPS. A presença do servidor proxy garante que a identidade do cliente permaneça oculta, enquanto o uso de um protocolo criptografado garante que o servidor proxy não possa roubar dados durante esse processo.

Proxy Direto

Proxy Baseado em HTTP

Nos servidores proxy, normalmente encontramos proxies HTTP baseados em HTTP e o protocolo binário SOCKS 4/5. Eles realizam funções semelhantes, mas com métodos de implementação diferentes. Vamos nos concentrar nos proxies baseados em HTTP.

Nos estágios iniciais da implementação do protocolo, o tráfego no HTTP era principalmente em texto claro. Essa transparência permitia que os servidores proxy no meio do caminho entre o cliente e o serviço analisassem facilmente URLs e cargas de solicitação. Através da resolução DNS e processos semelhantes, o proxy poderia se conectar ao serviço usando seu próprio endereço de rede, ocultando assim o cliente.

Um exemplo de tal chamada é o seguinte:

GET http://example.com/resource HTTP/1.1
Proxy-Authorization: Basic encoded-credentials

O servidor proxy entende o endereço que o cliente está tentando acessar e envia uma solicitação ao serviço para obter uma resposta, que é então retornada ao cliente.

HTTP/1.1 200 OK
Content-Type: text/html
...
body blahblah
...

Isso representa a forma mais simples de implementação de um servidor proxy HTTP. No entanto, observamos desvantagens: o servidor proxy lida com o tráfego do cliente em texto claro, representando um risco potencial de segurança, pois pode registrar o tráfego do usuário durante o encaminhamento. Portanto, a consideração de métodos de criptografia é necessária para garantir a segurança.

Funcionamento Complexo do Tráfego HTTPS e dos Servidores Proxy

Com o aumento da proporção de tráfego HTTPS criptografado dentro de todo o tráfego HTTP, os servidores proxy devem se adaptar a esse cenário.

No entanto, surge um desafio: o tráfego enviado pelo cliente ao provedor de serviços agora está criptografado. O servidor proxy não pode entender qual recurso o cliente está acessando por meio da descriptografia. Isso ocorre porque o tráfego é protegido por um mecanismo de negociação de chaves baseado em algoritmos de criptografia assimétrica entre o cliente e o provedor de serviços, e o tráfego criptografado subsequente usa chaves simétricas que não podem ser obtidas por um intermediário durante a comunicação. O propósito fundamental do TLS é evitar a possibilidade de ataques de intermediário.

Então, como o servidor proxy funciona nesse caso?

Isso é mais complexo em comparação com o método anterior de análise de solicitação em texto claro. O protocolo HTTP introduziu um método de solicitação dedicado, o CONNECT. O cliente usa esse método para enviar uma solicitação inicial ao servidor proxy:

CONNECT server.example.com:80 HTTP/1.1
Host: server.example.com:80
Proxy-Authorization: Basic encoded-credentials

O cliente envia uma solicitação CONNECT ao servidor proxy, incluindo o domínio ou endereço IP e a porta para os quais o cliente deseja se conectar. Ao receber a solicitação, o servidor proxy estabelece uma conexão TCP com o serviço de destino e armazena o mapeamento de portas entre o cliente e o serviço. Posteriormente, o cliente pode enviar a solicitação correta ao servidor proxy, que encaminhará o tráfego para o serviço como está, sem tentar analisar os dados. Portanto, a comunicação criptografada do HTTPS é confiável.

Esse mecanismo, em comparação com os proxies HTTP em texto claro, é mais versátil. Uma vez que a primeira solicitação HTTP informa ao servidor proxy as informações para estabelecer uma conexão, ele essencialmente se torna um canal de proxy transparente. Ele pode facilitar a comunicação tanto para o tráfego HTTPS quanto para o tráfego binário TCP (como SSH) através do servidor proxy.

Tags: