Servidor Proxy e Túneis

Ao navegar por diferentes redes da internet, os servidores proxy e os túneis HTTP facilitam o acesso ao conteúdo na Rede Mundial de Computadores (World Wide Web). O proxy pode estar no computador local do usuário, ou em algum lugar entre o computador deste e o servidor de destino na Internet. Esta página é um esquema de conceitos básicos sobre proxies e algumas opções de configuração.

Há dois tipos de proxies: proxy de envio (do inglês "forward proxies", ou túnel, ou ainda, gateway) e proxy reverso ("reverse proxies" usados para proteger o acesso ao servidor de largura de banda, autenticação, decriptação ou caching).

Proxy de Envio

Proxy de envio, também chamado gateway ou "proxy" fornece serviços a um cliente ou grupo de clientes. É possível que haja centenas de milhares de proxies de envio livres na Internet. Estes armazenam e enviam serviços de rede (como o DNS, ou páginas da web) para economia e controle da largura de banda usada pelo grupo.

Proxies de envio também podem ser anónimos e esconder o endereço IP dos usuários que navegam pela Web ou usam outros serviços de Internet. O TOR (The Onion Router), para ser anónimo, roteia tráfego de rede por vários proxies .

Proxy reverso

Como o nome já indica, faz o inverso do proxy de envio: O proxy de envio benefecia a clientes (ou a hosts que o requisitam), já o proxy reverso benefecia a servidores. Proxies de envio podem esconder a identidade de clientes, ao passo que proxies reversos podem esconder a dos servidores. Proxies reversos tem várias funções, dentre os quais:

  • Load balancing: distribuir a carga por vários servidores web ,
  • Cache de conteúdo estático: liberta os servidores web por esconder conteúdo estático, como fotos
  • Compressão: acelera o tempo de carregamento por comprimir e otimizar conteúdos

Envio de informação de clientes por meio de proxies

Proxies fazem parecer que os pedidos vêm do endereço IP do proxy. Isto pode ser útil se o proxy provê anonimato ao cliente. Porém, noutros casos, perde-se a informação do pedido original. O endereço IP original é usado em verificação de erros, em estatísticas ou ao gerar conteúdo ajustado à localização. Uma forma comum de divulgar esta informação é usando estes cabeçalhos HTTP:

Cabeçalho padronizado:

Forwarded
Contêm informação do lado do cliente de proxy, que foi alterada ou perdida se há um proxy no caminho do pedido

Ou as versões de facto padrão:

X-Forwarded-For
Identifica o endereço IP de origem do cliente que se conectou ao servidor web por meio de um proxy HTTP ou um load balancer
X-Forwarded-Host
Identifica o Host originalmente requisitado pelo cliente, quando este se conectou ao seu proxy ou load balancer 
X-Forwarded-Proto
Identifica o protocolo (HTTP ou HTTPS) que o cliente usou ao se conectar ao seu proxy ou load balancer

Pode-se usar o cabeçalho Via para informar, não sobre o cliente conectado, mas sobre o próprio proxy.

Via
Adicionado por proxies, tanto de envio como reversos, e aparece no cabeçalho do pedido e da resposta.

Túnel HTTP 

O Tunelamento encapsula os dados, permitindo assim que dados de rede privada e protocolos traféguem em redes públicas. Tunelamento HTTP é usar o protocolo de alto nível (HTTP) para transportar outro de nível abaixo (TCP).

O Protocolo HTTP protocol especifica o método CONNECT. Este começa comunicações de mão-dupla com o recurso requisitado e pode abrir um túnel. É assim que o cliente de proxy HTTP pode acessar websites a usar SSL (i.e. HTTPS, porta 443). Mas, é digno de nota, que nem todos os servidores proxy tem suporte ao método CONNECT ou limitam-no à porta 443.

Veja também o artigo HTTP tunnel, na Wikipedia.

Proxy Auto-Configuration (PAC)

O ficheiro Proxy Auto-Configuration (PAC) é uma função de JavaScript que determina se pedidos de motores de busca (HTTP, HTTPS, e FTP) vão direto ao destino ou são reencaminhadas a um proxy-servidor web. A função JavaScript contida no ficheiro PAC define:

O ficheiro auto-config será salvo com extensão .pac:

proxy.pac

E o MIME type é configurado para:

application/x-ns-proxy-autoconfig

O Ficheiro consiste numa função de nome FindProxyForURL. Se o servidor DNS interno está configurado para fonecer nomes à hosts internos, e o objectivo é usar um proxy só para hosts sem nome, então este exemplo deve funcionar:

function FindProxyForURL(url, host) {
  if (isResolvable(host))
    return "DIRECT";
  else
    return "PROXY proxy.mydomain.com:8080";
}

Veja Proxy Auto-Configuration (PAC) para mais exemplos.

Veja também