Proxy para Transparent Proxy / iptables
Na maioria dos casos, quando falamos de proxy, estamos a referir-nos a um proxy «normal» ou «não transparente». Este requer uma configuração explícita em cada aplicação. Mas existe outra abordagem muito mais poderosa: o proxy transparente (Transparent Proxy).
Essa tecnologia intercepta e redireciona o tráfego de rede de forma imperceptível para o utilizador final e seus aplicativos. Os programas no computador do utilizador nem suspeitam que o tráfego está a passar pelo proxy.
Analogia:
Um proxy comum é como enviar uma encomenda por meio de um serviço de entrega que você mesmo escolheu e chamou.
Um proxy transparente é como se toda a agência dos correios, por padrão, embrulhasse todas as suas encomendas e as enviasse por uma rota especial, sem avisá-lo.
O mecanismo que torna isso possível no mundo Linux é chamado de iptables. Neste guia, vamos entender como isso funciona, para que serve e como configurar esse sistema na prática.
⛔️ Aviso importante antes de começar
Este guia é destinado a utilizadores avançados. Você trabalhará com o iptables e terá acesso root completo ao sistema. Um comando incorreto pode bloquear completamente o seu acesso à rede (incluindo SSH).
- Teste em VM: Sempre teste configurações como essa primeiro em uma máquina virtual.
- Tenha um plano B: Certifique-se de que tem acesso à consola do servidor (não SSH) para o caso de bloquear a sua rede.
- Provedor confiável: Você confia todo o seu tráfego ao servidor proxy. Certifique-se de usar um provedor confiável e comprovado. Não faça proxy de tráfego sensível (banca) sem encriptação end-to-end.
- Compatibilidade: Para novas distribuições (Ubuntu 22+, Fedora), verifique
iptables --version— se for nft, mude para:sudo update-alternatives --set iptables /usr/sbin/iptables-legacy. Em contentores (Docker), o redsocks requer cap_net_admin; use --privileged.
Parte 1. Por que precisa de um proxy transparente?
O proxy transparente é o controlo total do tráfego ao nível da rede.
- Redes corporativas e Wi-Fi: para filtrar conteúdo, armazenar dados em cache e analisar a segurança de forma centralizada.
- Gestão de dispositivos (IoT): pode fazer proxy do tráfego de dispositivos nos quais não é possível configurar o proxy manualmente (Smart TV, consolas de jogos, dispositivos IoT).
- Contornar a censura para toda a rede: em vez de configurar uma VPN em cada dispositivo, pode configurar uma vez o router, que encaminhará todo o tráfego através do proxy.
Parte 2. Mecanismo de funcionamento: iptables
O iptables é uma ferramenta para gerenciar pacotes de rede no kernel Linux (Netfilter). Usaremos a tabela nat (Network Address Translation).
O ponto-chave é a escolha correta da cadeia para interceptação:
- Cadeia PREROUTING: Intercepta o tráfego que passa ATRAVÉS do seu servidor (tráfego de trânsito). Esta é a sua escolha se estiver a configurar um gateway ou router para outros dispositivos na rede.
- Cadeia OUTPUT: Intercepta o tráfego gerado pelo PRÓPRIO SERVIDOR (por exemplo, curl, apt-get ou scripts executados localmente).
Parte 3. Implementação prática com redsocks
O REDIRECT simples não funciona com proxies SOCKS5 remotos que exigem autenticação. Precisaremos do redsocks.
O redsocks é um daemon que recebe o tráfego redirecionado pelo iptables e, em seguida, estabelece uma ligação com o seu proxy remoto.
Observação: O redsocks original é bastante antigo (últimas atualizações ~2018). Recomendamos usar o fork redsocks2 (REDSOCKS2), que tem correções, novos recursos (redirecionamento automático sem lista negra, suporte a shadowsocks, IPv6) e está atualizado em 2025. Se a sua distribuição tiver o pacote redsocks2, use-o.
Caso contrário:git clone https://github.com/semigodking/redsocks && cd redsocks && make && sudo make install
(ou um fork semelhante https://github.com/Intika-Linux-Proxy/Red-Socks-2).
Passo 1: Recolha dos dados de autenticação do proxy
O primeiro e mais importante passo é garantir que tem o conjunto completo de dados de autorização. Essas «chaves» permitirão que a sua aplicação ou navegador se conecte ao servidor proxy e encaminhe o tráfego através dele.
Certifique-se de preparar os seguintes dados:
- Endereço IP (servidor host)
- Porta para conexão
- Login e senha para autorização
- Tipo de protocolo (HTTP/HTTPS ou SOCKS5)
*Fig. 1. Esta captura de ecrã mostra onde se encontram todos os campos necessários para se ligar ao servidor proxy na conta pessoal da **CyberYozh App**.*Passo 2. Instalação do redsocks
sudo apt update
sudo apt install redsocks # Para o original; para redsocks2 — veja acima
Passo 3. Configurar o redsocks (TCP + DNS)
Abra o ficheiro de configuração sudo nano /etc/redsocks.conf. Altere-o para o seguinte formato, substituindo os dados do seu proxy. Vamos configurar o redsocks para tráfego TCP, redudp para UDP/DNS e dnstc para TCP-DNS (para capturar solicitações TCP raras).
base {
log_debug = off;
log_info = on;
log = “file:/var/log/redsocks.log”; // Caminho para os logs de depuração
daemon = on;
user = redsocks;
group = redsocks;
redirector = iptables;
}
// Secção para tráfego TCP (HTTP, HTTPS, etc.)
redsocks {
local_ip = 0.0.0.0;
local_port = 12345; // Porta que o redsocks irá escutar para TCP
ip = 51.77.190.247; // Endereço IP do seu proxy SOCKS5 remoto
port = 9595; // Porta do seu proxy SOCKS5 remoto
type = socks5; // Usamos SOCKS5 (pode-se usar http-connect para proxy HTTP ou http-relay para HTTP puro)
login = “pcobLdlPkt-res-any”; // Login do proxy
password = “PC_7CJ2WQqdHNm42dHWj”; // Senha do proxy
}
// Secção para tráfego DNS (UDP)
redudp {
local_ip = 0.0.0.0;
local_port = 10053; // Porta que o redsocks irá escutar para DNS
ip = 51.77.190.247; // O mesmo IP do proxy SOCKS5
port = 9595; // O mesmo porta do proxy SOCKS5
type = socks5;
login = “pcobLdlPkt-res-any”; // O mesmo login
password = “PC_7CJ2WQqdHNm42dHWj”; // A mesma senha
}
// Secção para TCP-DNS (para capturar pedidos TCP raros)
dnstc {
local_ip = 127.0.0.1;
local_port = 5300;
}
Passo 4. Configurar o iptables (o passo mais importante)
Estas regras são o núcleo do nosso sistema. Elas impedirão fugas e ciclos infinitos.
Importante: o iptables não tem um “modo de edição” integrado como um editor de texto. As regras são armazenadas na memória do kernel e controladas através de comandos. Para visualizar, eliminar, inserir ou substituir, utilize os comandos do iptables. Para edições complexas, descarregue as regras para um ficheiro, edite-o e carregue-o novamente. Isto é especialmente útil com o iptables-persistent, onde as regras são guardadas em /etc/iptables/rules.v4.
Passo 1. Visualizar as regras atuais
Primeiro, veja as regras existentes para entender o que editar.
# Visualizar todas as regras na tabela nat com números de linha
sudo iptables -t nat -L -n -v --line-numbers
-t nat: Tabela nat (para os nossos REDIRECT).-L: Lista de regras.-n: IP numéricos (sem DNS).-v: Detalhes (contadores de pacotes).--line-numbers: Números das regras (para remoção/inserção).
Exemplo de saída:
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REDSOCKS all -- * * 0.0.0.0/0 0.0.0.0/0
Passo 2. Edição simples: remoção, inserção e substituição
Para pequenas alterações:
- Remover regra por número: Indique a cadeia e o número.
# Remover regra n.º 1 em PREROUTING
sudo iptables -t nat -D PREROUTING 1
- Inserir nova regra na posição: Use -I (insert).
# Inserir na posição 1 em PREROUTING (por exemplo, com portas adicionais) sudo iptables -t nat -I PREROUTING 1 -p tcp -m multiport --dports 80,443,8080 -j REDSOCKS - Substituir regra: Use -R (replace).
# Substituir regra nº 1 em PREROUTING
sudo iptables -t nat -R PREROUTING 1 -p tcp -m multiport --dports 80,443 -j REDSOCKS
Passo 3. Editar através do ficheiro (para alterações complexas)
Descarregue as regras para um ficheiro de texto, edite e carregue.
- Descarregar regras:
sudo iptables-save > /tmp/iptables.rules # Ficheiro temporário
# Ou para persistente: sudo nano /etc/iptables/rules.v4
- Editar o ficheiro: Abra no nano ou vi. O ficheiro tem a seguinte aparência (exemplo):
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:REDSOCKS - [0:0]
-A REDSOCKS -d 1.2.3.4 -j RETURN
-A REDSOCKS -d 10.0.0.0/8 -j RETURN
# ... restantes exceções
-A REDSOCKS -p tcp -m multiport --dports 80,443 -j REDIRECT --to-port 12345
-A PREROUTING -j REDSOCKS
-A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 10053
-A PREROUTING -p tcp --dport 53 -j REDIRECT --to-port 5300
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
Adicione/remova linhas com -A, -I, etc. Guarde o ficheiro.
- Carregar regras:
sudo iptables-restore < /tmp/iptables.rules
# Para persistente: sudo netfilter-persistent reload
Passo 4. Limpar as regras (se for necessário reiniciar)
- Limpar a cadeia:
sudo iptables -t nat -F REDSOCKS(flush). - Remover a cadeia:
sudo iptables -t nat -X REDSOCKS. - Limpeza completa do nat:
sudo iptables -t nat -F(cuidado!).
Dicas: Após as alterações, verifique as regras (iptables -t nat -L) e teste o tráfego (curl, dig). Para IPv6, use ip6tables. Se o sistema estiver em nftables, edite /etc/nftables.conf e aplique sudo nft -f /etc/nftables.conf.
Vamos começar a configurar o iptables:
# IMPORTANTE: Indique o IP do seu proxy remoto
PROXY_IP="51.77.190.247"
# --- CONFIGURAÇÃO GERAL ---
# Limpar a cadeia REDSOCKS (se existir, para teste)
sudo iptables -t nat -F REDSOCKS || true
sudo iptables -t nat -X REDSOCKS || true
# Criar uma nova cadeia REDSOCKS para TCP
iptables -t nat -N REDSOCKS
# Excluímos o próprio servidor proxy para evitar um ciclo infinito
iptables -t nat -A REDSOCKS -d $PROXY_IP -j RETURN
# Ignoramos redes locais e reservadas
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
# --- CORREÇÃO: Redirecionamos apenas o tráfego WEB ---
# NÃO queremos interromper o SSH, FTP, etc. Redirecionamos apenas HTTP e HTTPS.
# Para e-mail (25,465) ou outras portas, adicione em --dports
iptables -t nat -A REDSOCKS -p tcp -m multiport --dports 80,443 -j REDIRECT --to-port 12345
# (Opcional) Se tiver a certeza de que deseja proxy TODO o tráfego TCP:
# iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-port 12345
# --- ESCOLHA O SEU CENÁRIO ---
# === CENÁRIO A: Proxy para gateway (tráfego de OUTROS dispositivos) ===
# Os clientes devem usar o servidor como gateway padrão (via DHCP ou estaticamente)
# 1. Ativamos o encaminhamento de IP (permanente)
echo ‘net.ipv4.ip_forward=1’ | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 2. Aplicamos regras ao tráfego de trânsito
iptables -t nat -A PREROUTING -j REDSOCKS
# 3. Interceptamos o tráfego DNS (UDP 53) e enviamos para redsocks
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-port 10053
# 4. Interceptamos TCP-DNS
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-port 5300
# 5. Ativamos MASQUERADE (CRITICAMENTE IMPORTANTE para o gateway)
# Substitua eth0 pela sua interface de rede EXTERNA
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# === CENÁRIO B: Proxy para o próprio servidor (tráfego LOCAL) ===
# 1. Aplicamos regras ao tráfego local
iptables -t nat -A OUTPUT -j REDSOCKS
# 2. Interceptamos o tráfego DNS local
iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-port 10053
# 3. Interceptamos o TCP-DNS
iptables -t nat -A OUTPUT -p tcp --dport 53 -j REDIRECT --to-port 5300
Importante: Não aplique os dois cenários simultaneamente sem um conhecimento profundo. Escolha aquele que corresponde à sua tarefa.
Passo 5. Iniciar o redsocks
sudo systemctl start redsocks
# Verifique se o serviço está iniciado
sudo systemctl status redsocks
Parte 4. Problemas e soluções avançadas
*Fugas de DNS (UDP vs TCP) *
Este guia resolve o problema interceptando as solicitações DNS por UDP (porta 53) e TCP com o dnstc. No entanto, se o proxy não suportar UDP-associate (para redudp), o DNS não passará — verifique os registos. Para proteção total, verifique em dnsleaktest.com.
Problema com HTTPS e SSL
O redsocks não tem esse problema. Ele funciona no nível de transporte (TCP) e não tenta descriptografar o seu tráfego HTTPS. Ele simplesmente pega o seu pacote HTTPS já criptografado e o “embrulha” inteiramente em SOCKS5. O proprietário do proxy não pode ler os seus dados.
# Nota sobre alternativas modernas
O redsocks é uma ferramenta poderosa, mas bastante antiga. Em 2025, para novos sistemas, especialmente aqueles que usam nftables, alternativas mais modernas são frequentemente recomendadas, como ss-redir (do shadowsocks-libev) ou V2Ray/Xray, que realizam tarefas semelhantes com melhor desempenho e plug-ins. Para UDP sem redsocks, considere TPROXY em iptables/nftables. Se estiver em contentores ou em Android/routers (GL.iNet) — redsocks funciona, mas requer firmware personalizado.
Parte 5. Teste e depuração
Se algo não estiver a funcionar, eis a sua lista de verificação:
- Verifique o IP:
curl ifconfig.me(deve mostrar o IP do seu proxy SOCKS5, não do servidor). - Verifique o DNS:
dig google.comounslookup google.com. Verifique o endereço IP que responde. Verifique se há fugas: abra browserleaks.com ou dnsleaktest.com. - Verifique os registos do redsocks: este é o seu melhor amigo.
tail -f /var/log/redsocks.log # Ou: journalctl -u redsocks
Procure mensagens de erro de ligação ou autenticação (por exemplo, «authentication failed» — login/password incorreto).
- Verifique a disponibilidade do proxy: Certifique-se de que o seu servidor consegue ligar-se ao servidor proxy:
nc -zv 51.77.190.247 9595
# (Resposta esperada: Connection to 51.77.190.247 9595 port [tcp/*] succeeded!)
- Verifique as portas:
ss -tuln(devem estar a ouvir 12345, 10053, 5300). - Verifique a firewall: Certifique-se de que o ufw ou o firewalld não estão a bloquear as suas novas regras. Se o SSH estiver avariado, desative o redirecionamento de todo o TCP.
- Problemas comuns: ‘Conectando, mas sem resposta’ — verifique o tipo de proxy (http-relay para HTTP). Ciclo infinito? Certifique-se de que PROXY_IP está excluído.
Parte 6. Salvando regras do iptables
As configurações do iptables são reiniciadas ao reiniciar. Para torná-las permanentes, instale o iptables-persistent.
sudo apt update
sudo apt install iptables-persistent
Durante a instalação, ele perguntará se deseja guardar as regras atuais. Aceite. Se alterar as regras posteriormente, execute o seguinte para guardá-las:
sudo netfilter-persistent save
Para limpar:sudo iptables -t nat -F REDSOCKS; sudo iptables -t nat -X REDSOCKS; sudo iptables -t nat -D PREROUTING/OUTPUT ...
(apague regras específicas).
Conclusão
O proxy transparente com iptables é uma ferramenta incrivelmente poderosa. Graças ao redsocks (ou redsocks2), ele pode ser configurado para funcionar com proxies SOCKS5 modernos. O principal é lembrar-se da segurança, evitar a interceção de todo o tráfego TCP (filtrando portas), ativar o MASQUERADE para gateways e sempre interceptar consultas DNS para evitar fugas.
Perguntas frequentes
- A ligação não está a funcionar? Verifique o proxy nos registos: «authentication failed» — login/palavra-passe incorretos.
- Ciclo infinito? Certifique-se de que PROXY_IP está excluído.
- Em contentores? O Redsocks requer cap_net_admin; use --privileged no Docker.
- Não funciona com o meu proxy? Se for HTTP — use type = http-connect para compatibilidade com HTTPS.