Um proxy judge é um script ou serviço do lado do servidor criado para inspecionar os cabeçalhos HTTP enviados por um cliente através de um proxy, revelando o endereço IP original do cliente e os detalhes que identificam o proxy, a fim de determinar seu nível de anonimato.
O que é um proxy judge?
Um proxy judge funciona como uma ferramenta de diagnóstico intermediária. Quando um cliente se conecta a um proxy judge através de um servidor proxy, o judge analisa os cabeçalhos da requisição HTTP apresentados pelo proxy. Essa análise identifica cabeçalhos específicos que podem expor o IP real do cliente ou indicar a presença e o tipo de servidor proxy em uso. A função principal é verificar se o proxy realmente mascara a identidade do cliente e em que medida.
Como funcionam os proxy judges
O processo de um proxy judge é o seguinte:
- Requisição do cliente: o cliente configura seu sistema ou aplicativo para rotear o tráfego web através de um servidor proxy designado.
- Encaminhamento pelo proxy: o servidor proxy recebe a requisição do cliente e a encaminha ao servidor web de destino, que neste caso é o proxy judge.
- Inspeção dos cabeçalhos: ao receber a requisição, o servidor do proxy judge acessa as variáveis de servidor e os cabeçalhos HTTP. Esses cabeçalhos contêm metadados sobre o caminho da conexão.
- Avaliação do anonimato: o judge então analisa esses cabeçalhos em busca de campos específicos que normalmente revelam informações do cliente ou identificam o proxy. Com base na presença, ausência ou modificação desses cabeçalhos, o judge classifica o nível de anonimato do proxy.
- Relatório: o judge devolve ao cliente um relatório detalhando os endereços IP e as informações de cabeçalho detectados, junto com uma avaliação do anonimato do proxy.
Os principais cabeçalhos de interesse para um proxy judge incluem REMOTE_ADDR, HTTP_X_FORWARDED_FOR, HTTP_VIA, HTTP_PROXY_CONNECTION, HTTP_FORWARDED e outros que podem entregar o IP original do cliente ou a existência do proxy.
Níveis de anonimato de proxy
Os proxy judges classificam os proxies em níveis de anonimato distintos, de acordo com as informações que transmitem.
Proxy elite (altamente anônimo)
Um proxy elite oferece o maior nível de anonimato. Ele não transmite nenhum cabeçalho que revele o IP original do cliente, nem se identifica como proxy. Para o servidor de destino (o proxy judge), a conexão parece vir diretamente do endereço IP do servidor proxy, tornando o cliente indistinguível de uma conexão direta.
- Características:
REMOTE_ADDR: mostra o IP do proxy.HTTP_X_FORWARDED_FOR: ausente.HTTP_VIA: ausente.HTTP_PROXY_CONNECTION: ausente ou modificado.
- Detecção: difícil de distinguir de uma conexão direta sem fingerprinting avançado.
Proxy anônimo
Um proxy anônimo esconde o IP original do cliente, mas revela sua própria presença como servidor proxy. Isso significa que o servidor de destino sabe que um proxy está sendo usado, mas a identidade do cliente original permanece oculta.
- Características:
REMOTE_ADDR: mostra o IP do proxy.HTTP_X_FORWARDED_FOR: ausente.HTTP_VIA: presente (por exemplo,1.1 proxy.example.com).HTTP_PROXY_CONNECTION: pode estar presente.
- Detecção: a presença de
HTTP_VIAou de cabeçalhos semelhantes indica o uso de proxy.
Proxy transparente (não anônimo)
Um proxy transparente, também chamado de proxy não anônimo ou de encaminhamento, não tenta ocultar o IP original do cliente. Ele repassa o IP do cliente ao servidor de destino, normalmente em cabeçalhos como X-Forwarded-For. O servidor de destino tem plena ciência tanto da presença do proxy quanto do IP original do cliente.
- Características:
REMOTE_ADDR: mostra o IP do proxy.HTTP_X_FORWARDED_FOR: presente, contendo o IP original do cliente.HTTP_VIA: frequentemente presente.HTTP_PROXY_CONNECTION: pode estar presente.
- Detecção: a presença de
HTTP_X_FORWARDED_FORcom o IP do cliente é definitiva.
Proxy distorcido (distorting)
Um proxy distorcido é uma variante que tenta enganar o servidor de destino transmitindo um endereço IP falso ou aleatório no cabeçalho X-Forwarded-For. Embora esconda o IP real do cliente, ele ainda se identifica como proxy, e o X-Forwarded-For informado não é o IP real do cliente. Às vezes isso é classificado como um tipo de proxy anônimo, mas a falsificação explícita o diferencia.
- Características:
REMOTE_ADDR: mostra o IP do proxy.HTTP_X_FORWARDED_FOR: presente, mas contém um IP falso/aleatório.HTTP_VIA: frequentemente presente.
- Detecção: a presença de
HTTP_X_FORWARDED_FORcom um IP que não corresponde aoREMOTE_ADDRdo salto anterior (quando há vários proxies encadeados) ou com um IP claramente inválido.
Principais cabeçalhos HTTP para detecção de anonimato
A análise de um proxy judge se baseia na inspeção de cabeçalhos HTTP e variáveis de servidor específicos:
REMOTE_ADDR: esta variável de servidor indica diretamente o endereço IP do cliente que se conectou ao servidor do proxy judge. Se um proxy for usado, normalmente será o IP do proxy.HTTP_X_FORWARDED_FOR: cabeçalho padrão de fato usado pelos proxies para identificar o IP original do cliente. Pode conter uma lista de IPs separados por vírgula quando há vários proxies encadeados.HTTP_VIA: cabeçalho adicionado por um servidor proxy para indicar que a requisição passou por ele. Costuma incluir o protocolo e o hostname/IP do proxy.HTTP_PROXY_CONNECTION: cabeçalho não padronizado, usado às vezes por proxies, que indica detalhes de conexão específicos do proxy.HTTP_FORWARDED: cabeçalho padronizado (RFC 7239) que é uma alternativa mais robusta aX-Forwarded-ForeVia. Pode transmitir informações do cliente, do proxy e do host.HTTP_CLIENT_IP: cabeçalho não padronizado e menos comum que pode conter o IP do cliente.
Uso prático de um proxy judge
Para usar um proxy judge de forma eficaz, configure seu cliente para rotear o tráfego pelo proxy que você quer testar e então direcione uma requisição a um serviço de proxy judge.
Exemplo: usando curl com um proxy
Para testar um proxy em proxy.example.com na porta 8080 com curl:
curl -x http://proxy.example.com:8080 http://proxyjudge.com
Substitua http://proxyjudge.com pela URL de um serviço de proxy judge real. A saída será o relatório do judge.
Exemplo: um script simples de proxy judge (PHP)
Um script PHP básico pode servir como proxy judge:
<?php
header('Content-Type: text/plain');
echo "--- Proxy Judge Report ---\n";
echo "Your IP (REMOTE_ADDR): " . $_SERVER['REMOTE_ADDR'] . "\n";
echo "--------------------------\n";
$headers_to_check = [
'HTTP_X_FORWARDED_FOR',
'HTTP_VIA',
'HTTP_PROXY_CONNECTION',
'HTTP_FORWARDED',
'HTTP_CLIENT_IP'
];
foreach ($headers_to_check as $header) {
if (isset($_SERVER[$header])) {
echo $header . ": " . $_SERVER[$header] . "\n";
} else {
echo $header . ": Not Present\n";
}
}
echo "--------------------------\n";
// Estimativa básica do nível de anonimato
$anonymity_level = "Elite Proxy"; // Suposição padrão
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$anonymity_level = "Transparent Proxy";
// Verifica se X-Forwarded-For é claramente falso
$xf_ip = trim(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0]);
if ($xf_ip !== $_SERVER['REMOTE_ADDR'] && !filter_var($xf_ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
// Esta é uma verificação simplista; um "distorting" real exige validação mais robusta
// Para um judge simples, se o XFF existe, não é Elite/Anônimo no sentido mais estrito.
}
} elseif (isset($_SERVER['HTTP_VIA']) || isset($_SERVER['HTTP_PROXY_CONNECTION'])) {
$anonymity_level = "Anonymous Proxy";
}
echo "Estimated Anonymity Level: " . $anonymity_level . "\n";
?>
Esse script exibe o IP detectado e os cabeçalhos relevantes, fornecendo uma avaliação básica.
Interpretando os resultados do proxy judge
A presença ou ausência de cabeçalhos específicos se correlaciona diretamente com o nível de anonimato do proxy.
| Cabeçalho | Proxy elite | Proxy anônimo | Proxy transparente | Proxy distorcido |
|---|---|---|---|---|
REMOTE_ADDR |
IP do proxy | IP do proxy | IP do proxy | IP do proxy |
HTTP_X_FORWARDED_FOR |
Ausente | Ausente | IP original do cliente | IP falso/aleatório |
HTTP_VIA |
Ausente | Presente | Muitas vezes presente | Muitas vezes presente |
HTTP_PROXY_CONNECTION |
Ausente | Pode estar presente | Pode estar presente | Pode estar presente |
HTTP_FORWARDED |
Ausente | Pode estar presente | Pode conter o IP do cliente | Pode conter IP falso |
| Nota de anonimato | Máxima | Média | Mínima | Baixa (detectável) |
Limitações dos proxy judges
Embora úteis, os proxy judges têm limitações:
- Foco em cabeçalhos HTTP: eles analisam principalmente cabeçalhos HTTP padrão. Podem não detectar vazamentos que ocorrem em outras camadas ou por outros protocolos (por exemplo, vazamentos de IP via WebRTC ou vazamentos de DNS).
- Fingerprinting de navegador: os proxy judges não avaliam aspectos de fingerprinting do navegador (user agent, resolução de tela, fontes instaladas, dados da Canvas API) que também podem identificar um usuário de forma única.
- Técnicas em evolução: métodos avançados de detecção vão além de simples checagens de cabeçalho, empregando JavaScript, Flash ou outras tecnologias do lado do navegador para contornar o anonimato do proxy.
- Complexidade das cadeias de proxy: em cadeias de proxy complexas, determinar com precisão o IP original do cliente pode ser difícil se os proxies intermediários modificarem ou removerem cabeçalhos de forma inconsistente.
- Interceptação SSL/TLS: no tráfego HTTPS, se o proxy não fizer interceptação SSL/TLS, o judge só enxerga a conexão TLS externa, e não os cabeçalhos HTTP internos, o que dificulta a detecção sem configurações específicas de proxy.
Boas práticas para o anonimato de proxy
Para manter um anonimato de proxy eficaz:
- Verificação periódica: teste seus proxies regularmente em vários serviços de proxy judge, já que cada judge pode detectar aspectos diferentes.
- Entenda os tipos de proxy: escolha o tipo adequado (por exemplo, SOCKS5 para tráfego mais amplo, HTTP/HTTPS para web) conforme suas exigências de anonimato.
- Combine com outras checagens: complemente os resultados do proxy judge com testes de vazamento de WebRTC, testes de vazamento de DNS e ferramentas de fingerprinting de navegador para garantir anonimato completo.
- Configuração segura: garanta que seus aplicativos e o sistema operacional estejam configurados corretamente para rotear todo o tráfego relevante pelo proxy, evitando conexões diretas ou vazamentos.
- Uso de HTTPS: priorize conexões HTTPS. Embora um proxy judge não consiga ver dentro do túnel criptografado, o HTTPS criptografa seus dados do proxy até o destino, oferecendo uma camada extra de segurança.
