ProxyChains é uma ferramenta de linha de comando para Linux que força qualquer conexão TCP feita por um programa a passar por uma lista especificada de servidores proxy, formando uma "cadeia" para maior privacidade ou para contornar restrições de rede. Ela funciona interceptando chamadas de sistema relacionadas à rede de forma dinâmica, redirecionando-as através de um ou mais servidores proxy configurados antes de alcançar o destino final.
Visão geral do ProxyChains
O ProxyChains funciona como um wrapper para outros programas, permitindo que o tráfego de rede deles seja roteado por uma sequência de proxies. Esse mecanismo de encadeamento pode ofuscar a origem das requisições de rede, dificultando o rastreamento do endereço IP real de origem. É frequentemente usado para anonimato, contornar restrições geográficas ou acessar redes com controles de acesso baseados em IP.
Como o ProxyChains funciona
O ProxyChains utiliza o mecanismo LD_PRELOAD do Linux. LD_PRELOAD é uma variável de ambiente que especifica uma lista de bibliotecas compartilhadas a serem carregadas antes de quaisquer outras bibliotecas, incluindo a biblioteca padrão do C (libc). O ProxyChains fornece sua própria biblioteca compartilhada (libproxychains4.so), que contém versões modificadas de funções de rede padrão (por exemplo, connect(), send(), recv()).
Quando um programa é executado com o ProxyChains (por exemplo, proxychains4 <command>), a libproxychains4.so é pré-carregada. Essa biblioteca intercepta as chamadas do programa às funções de rede. Em vez de estabelecer conexões diretas, essas chamadas interceptadas são redirecionadas pela cadeia de proxies configurada. Esse processo é transparente para a aplicação encapsulada, que continua operando como se estivesse fazendo conexões de rede diretas.
Instalação
Os procedimentos de instalação variam ligeiramente conforme a distribuição Linux.
Debian/Ubuntu
sudo apt update
sudo apt install proxychains4
Fedora/CentOS/RHEL
sudo dnf install proxychains-ng
# Ou para sistemas mais antigos:
sudo yum install proxychains-ng
Arch Linux
sudo pacman -S proxychains-ng
A partir do código-fonte
Para outras distribuições ou versões específicas, o ProxyChains pode ser compilado a partir do código-fonte.
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
./configure --prefix=/usr --sysconfdir=/etc
make
sudo make install
sudo make install-config # Instala o arquivo de configuração padrão em /etc/proxychains.conf
Configuração
O arquivo de configuração principal do ProxyChains geralmente fica em /etc/proxychains.conf ou ~/.proxychains/proxychains.conf. Se nenhum dos dois existir, o proxychains.conf pode ser copiado do diretório do código-fonte ou de /usr/share/proxychains/proxychains.conf para /etc/proxychains.conf.
Diretivas principais
O arquivo de configuração define como os proxies são usados e quais proxies estão disponíveis.
strict_chain: todos os proxies da lista são usados na ordem em que aparecem. Se qualquer proxy da cadeia falhar, a conexão falha.dynamic_chain: todos os proxies da lista são usados, mas se um falhar, ele é ignorado e a cadeia continua com o próximo proxy. Isso oferece mais resiliência.random_chain: um número especificado de proxies (chain_len) é selecionado aleatoriamente da lista e usado em ordem aleatória.chain_len: (usado comrandom_chain) especifica a quantidade de proxies a serem selecionados aleatoriamente.proxy_dns: força a resolução das requisições DNS através da cadeia de proxies, mitigando vazamentos de DNS. Isso é crítico para o anonimato.remote_dns_subnet: (usado comproxy_dns) especifica uma sub-rede IP a ser usada para consultas DNS remotas quandoproxy_dnsestá habilitado. O padrão é10.0.0.0/8.
Formato da lista de proxies
Os proxies são definidos no final do arquivo proxychains.conf, na seção [ProxyList]. Cada entrada de proxy segue este formato:
type ip_address port [username] [password]
Os tipos suportados incluem socks4, socks5 e http.
Exemplo de trecho do proxychains.conf
# ProxyChains configuration file
# Uncomment one of the proxy chain types:
# strict_chain
# dynamic_chain
random_chain
# Randomize the proxy list - no, this doesn't make sense.
# Keep the default order of proxies in the proxy list and use them in that order.
# If you want to randomize, use 'random_chain' above.
# random_chain_len 2
# Make a host where the chain starts from.
# This can be useful for some applications.
# chain_len 2
# Proxy DNS requests through the chain.
# This is highly recommended for anonymity.
proxy_dns
# Remote DNS subnet
# When proxy_dns is enabled, this subnet is used for remote DNS queries.
# Default is 10.0.0.0/8
# remote_dns_subnet 10.0.0.0/8
# Timeout for proxy connections.
# proxy_timeout 10000
# Proxy list - add your proxies here
# Format: type ip_address port [username] [password]
[ProxyList]
# socks4 127.0.0.1 9050 # Example for Tor (default SOCKS port)
# socks5 192.168.1.1 1080
# http proxy.example.com 8080 user pass
# Example using multiple proxies for a chain
socks5 192.168.1.10 1080
socks5 192.168.1.11 1080
http 192.168.1.12 8080
Tipos de proxy suportados
O ProxyChains suporta os seguintes protocolos de proxy:
- SOCKS4: protocolo de proxy simples para aplicações TCP. Não suporta UDP nem autenticação.
- SOCKS5: protocolo de proxy avançado com suporte a TCP, UDP e autenticação. Recomendado para a maioria dos casos de uso.
- HTTP: suporta proxies HTTP para tunelamento de conexões TCP. Pode ser usado com ou sem autenticação.
Exemplos de uso
Para usar o ProxyChains, coloque proxychains4 (ou proxychains em alguns sistemas) antes do comando que você deseja executar através dos proxies.
Uso básico
Verifique seu endereço IP externo através da cadeia de proxies:
proxychains4 curl ifconfig.me
Esse comando roteará a requisição do curl pela cadeia de proxies configurada, e o ifconfig.me informará o endereço IP do último proxy da cadeia, ou do primeiro proxy funcional se dynamic_chain estiver habilitado.
Testando vazamentos de DNS
Com proxy_dns habilitado no proxychains.conf:
proxychains4 curl https://ipleak.net/
Verifique a seção DNS em ipleak.net para confirmar que as requisições DNS são resolvidas pela cadeia de proxies e não pelo seu servidor DNS local.
Uso com scanners de rede
Escanear um alvo através de uma cadeia de proxies pode ocultar a origem do scan.
proxychains4 nmap -sT -Pn target.example.com
Observação: os modos -sS (SYN scan) do nmap e outros modos de pacote bruto não funcionam com o ProxyChains, porque o LD_PRELOAD intercepta apenas chamadas de socket de nível mais alto, e não a geração de pacotes brutos. Use -sT (TCP connect scan).
Uso com Secure Shell (SSH)
Para estabelecer uma conexão SSH através de uma cadeia de proxies:
proxychains4 ssh user@remote_host.com
Uso com Wget
Baixando arquivos através de uma cadeia de proxies:
proxychains4 wget https://example.com/file.zip
Uso com um navegador web (por exemplo, Firefox)
O ProxyChains foi projetado para aplicações de linha de comando. Para aplicações gráficas, como navegadores web, geralmente é mais eficaz configurar as opções de proxy do próprio navegador ou usar uma extensão dedicada de gerenciamento de proxy. Ainda assim, é possível forçar:
proxychains4 firefox
Esse método costuma ser menos estável e confiável para aplicações GUI complexas em comparação com as configurações nativas de proxy.
Comparação dos tipos de cadeia
| Recurso | strict_chain |
dynamic_chain |
random_chain |
|---|---|---|---|
| Uso dos proxies | Todos os proxies da lista, em ordem. | Todos os proxies da lista, em ordem, pulando os que falham. | chain_len proxies selecionados e ordenados aleatoriamente. |
| Tolerância a falhas | Baixa (a conexão falha se qualquer proxy falhar). | Alta (ignora os proxies com falha). | Moderada (falha se os proxies aleatórios selecionados falharem). |
| Anonimato | Alto (caminho fixo, todos os proxies usados). | Alto (caminho fixo, todos os proxies funcionais usados). | Variável (caminho aleatório, diferente a cada vez). |
| Desempenho | Potencialmente mais lento devido ao caminho fixo e completo. | Mais rápido se alguns proxies estiverem lentos/fora do ar. | Variável, depende dos proxies selecionados. |
| Caso de uso | Quando todos os proxies são confiáveis e a ordem importa. | Quando a resiliência é importante. | Quando variar o caminho é desejável para o anonimato. |
Considerações de segurança e limitações
O ProxyChains é uma ferramenta de roteamento de tráfego, não uma solução completa de anonimato. Os usuários precisam entender suas limitações.
Vazamentos de DNS
Sem o proxy_dns habilitado, as requisições DNS podem ser resolvidas diretamente pelo sistema local, expondo o IP real do usuário ao servidor DNS. Habilitar o proxy_dns é essencial para o anonimato.
Vazamentos de tráfego
O ProxyChains intercepta principalmente conexões TCP. Aplicações que usam UDP ou outros protocolos diretamente (por exemplo, alguns clientes VPN, aplicações VoIP, certos jogos ou os modos de pacote bruto do nmap) podem contornar a cadeia de proxies, causando vazamentos de tráfego. Não é adequado para aplicações que exigem anonimização completa da pilha de rede.
Sobrecarga de desempenho
Encadear múltiplos proxies introduz latência e reduz a taxa de transferência. Cada salto na cadeia adiciona tempo de processamento e atraso de rede. Quanto mais proxies na cadeia, mais lenta será a conexão.
Não é uma solução mágica para o anonimato
O ProxyChains oferece uma camada adicional de ofuscação, mas não garante anonimato absoluto. Adversários sofisticados ainda podem correlacionar padrões de tráfego ou explorar outras vulnerabilidades (por exemplo, fingerprinting de navegador, vazamentos de WebRTC) para desanonimizar um usuário. Ele deve ser usado em conjunto com outras práticas de segurança, como um sistema operacional seguro, regras robustas de firewall e escolha cuidadosa das aplicações.
Compatibilidade de aplicações
O ProxyChains depende do LD_PRELOAD para interceptar chamadas de biblioteca. Nem todas as aplicações se comportam de forma previsível quando suas funções de rede são interceptadas. Aplicações que usam bibliotecas de rede próprias, linkagem estática ou interfaces específicas do kernel podem não funcionar corretamente ou simplesmente não funcionar com o ProxyChains.
