O que o ProxyChains intercepta e o que deixa em paz
O ProxyChains engancha chamadas de biblioteca no programa que lança. Verifique a cobertura TCP com maps, strace e um pedido, e deixe de assumir que DNS ou UDP seguem.
O ProxyChains-NG não cria um túnel. Ele pré-carrega uma biblioteca que substitui as chamadas libc relacionadas com a rede dentro do único programa que lança, portanto o limite é uma chamada num processo, não uma rota para todo o dispositivo. Essa distinção decide o que um teste bem-sucedido realmente prova. Um curl a funcionar através da cadeia confirma uma única chamada enganchada, não que a resolução de nomes, o UDP ou cada processo filho tenham seguido o mesmo caminho. O guia abaixo verifica a cobertura em três passos e depois enumera o que o gancho não consegue alcançar.
Como a pré-carga chega a uma ligação
No arranque, o lançador coloca libproxychains em LD_PRELOAD e depois executa o programa alvo. A biblioteca resolve os símbolos libc reais e substitui-os pelas suas próprias versões de funções como connect e getaddrinfo. As chamadas que passam por esses símbolos são reescritas para o proxy SOCKS ou HTTP do ficheiro de configuração. As chamadas que seguem outro caminho nunca encontram o gancho, e é por isso que a garantia é por chamada e não por máquina.
Só participam programas ligados dinamicamente, e os binários setuid sob execução segura ignoram completamente a pré-carga. Os filhos herdam o ambiente, mas apenas enquanto o lançador o mantém no lugar.
Confirme que a biblioteca está carregada nesse processo
Inicie o pedido e inspecione o processo vivo em vez da shell que o lançou. O ficheiro maps mostra cada objeto partilhado atualmente mapeado no processo.
proxychains4 -q curl -sS --max-time 8 https://example.com/ -o /dev/null &
pgrep -a curl
grep libproxychains /proc/$(pgrep -n curl)/mapsUma correspondência confirma que a biblioteca enganchada está presente, o que é necessário mas não suficiente. Um resultado vazio significa geralmente que inspecionou outro processo, por exemplo um navegador que entregou o URL a uma instância iniciada antes do lançador. Verifique com ldd se o binário está ligado dinamicamente antes de perseguir qualquer outra coisa, porque uma compilação estática não consegue carregar a pré-carga de todo. Depois leia a lista de proxies na configuração que o lançador realmente usou, pois um caminho obsoleto ou uma porta fechada produzem um gancho que funciona sem uma cadeia que funcione.
Rastreie as ligações que saem do processo
A presença da biblioteca não prova que cada chamada foi reescrita, por isso siga as chamadas ao sistema. Execute um pedido sob o rastreador e leia para onde os sockets foram realmente.
strace -f -e trace=connect -o /tmp/pc.trace proxychains4 -q curl -sS https://example.com/ -o /dev/null
grep -o "sin_port=htons([0-9]*)" /tmp/pc.trace | sort -uO rasto deve mostrar apenas ligações ao seu ponto final de proxy, com a porta a corresponder à entrada do ficheiro de configuração. Se os endereços de destino do site alvo aparecerem diretamente no rasto, essa chamada contornou o gancho, e essa é exatamente a descoberta que procurava. Compare os números de porta com a lista de proxies em vez de confiar no nome do ficheiro, porque uma configuração restante de outro projeto é uma fonte comum de acesso direto silencioso. Guarde o rasto para o registo de aceitação; leva segundos e resolve discussões sobre cobertura.
Decida o que o gancho não consegue cobrir
O projeto proxychains-ng limita o redirecionamento a TCP e avisa que scripts, processos em segundo plano e módulos carregados podem comportar-se de forma diferente do programa principal. O UDP e o ICMP ficam fora do mecanismo, por isso tudo o que dependa deles precisa do seu próprio caminho suportado. O DNS segue a definição proxy_dns e o comportamento do resolvedor da própria aplicação, o que significa que um pedido HTTPS bem-sucedido não lhe diz nada sobre a resolução de nomes. Mantenha também a validação de certificados onde ela pertence: chegar a um servidor através de um proxy não é razão para desativar as verificações de identidade.
Se o retrocesso direto tiver de ser impossível, use uma fronteira de aplicação que controle o tráfego em si, como um espaço de nomes de rede, regras de firewall ou uma VPN, e mantenha-a separada do gancho da biblioteca. O gancho é uma ferramenta de compatibilidade para um programa específico, não um kill switch. Registe o programa, o comando exato, a porta de proxy vista no rasto e se o DNS foi resolvido remotamente; esses quatro factos são a diferença entre um âmbito verificado e um âmbito de esperança.