O ssh -D 1080 inicia um proxy SOCKS na porta 1080 da sua máquina e reencaminha cada ligação através do servidor SSH, que depois chega à Internet ou à sua rede interna. Configure o navegador para usar SOCKS5 em 127.0.0.1:1080 e navega como se estivesse sentado no servidor, com o troço até ele cifrado dentro do SSH.
Como funciona o ssh -D 1080 como proxy SOCKS
A opção -D [bind_address:]port do OpenSSH configura o reencaminhamento dinâmico. O cliente fica à escuta nessa porta local e fala SOCKS4 ou SOCKS5. Quando o navegador pede uma página, o pedido viaja pela ligação SSH, normalmente para a porta TCP 22, e é o servidor que abre a ligação final. O destino vê o IP do servidor, não o seu.
O comando mínimo, sem shell remota:
ssh -D 1080 -N -C [email protected]-D 1080: proxy SOCKS na porta local 1080.-N: não executa nenhum comando remoto; limita-se a manter os reencaminhamentos ativos.-C: comprime o tráfego, útil em ligações lentas.-f(opcional): envia o ssh para segundo plano após a autenticação.
Só o superutilizador pode reencaminhar portas abaixo de 1024, e é por isso que a 1080 é a escolha habitual. Todas as flags estão descritas na página oficial do manual do ssh.
Configurar DynamicForward em ~/.ssh/config para o proxy SOCKS
DynamicForward é o equivalente de -D no ficheiro de configuração e aceita a mesma sintaxe [bind_address:]port. Poupa-o a voltar a escrever as flags:
Host office-proxy
HostName server.example.com
User user
Port 22
IdentityFile ~/.ssh/id_ed25519
DynamicForward 127.0.0.1:1080
ExitOnForwardFailure yes
ServerAliveInterval 30
Compression yesCom esse bloco, ssh -N office-proxy levanta o túnel. ExitOnForwardFailure yes faz com que o ssh termine se não conseguir associar a porta 1080, em vez de o deixar com uma sessão e sem proxy. Verifique as permissões: ~/.ssh a 700 e a chave privada a 600. Se ainda depende de RSA, o OpenSSH 8.8 desativou por omissão as assinaturas SHA-1 ssh-rsa; uma chave Ed25519, suportada desde o OpenSSH 6.5, contorna esse problema.
Configuração do navegador para o proxy SOCKS do ssh -D
O navegador tem de usar SOCKS5 em 127.0.0.1, porta 1080, e resolver os nomes de anfitrião através do proxy. Se o DNS for resolvido localmente, os nomes internos do servidor falham e as suas consultas saem pela sua própria rede.
- Firefox: Definições → Definições de rede → Configuração manual de proxy. Anfitrião SOCKS 127.0.0.1, porta 1080, SOCKS v5, e marque "DNS de proxy ao utilizar SOCKS v5".
- Chrome ou Chromium: inicie-o com
--proxy-server=socks5://127.0.0.1:1080, de preferência com um perfil separado para que o tráfego não se misture. - curl: use
--socks5-hostname, e não--socks5, para que seja o servidor a resolver o nome.
google-chrome --user-data-dir=/tmp/socks-profile --proxy-server=socks5://127.0.0.1:1080
curl -I --socks5-hostname 127.0.0.1:1080 https://intranet.example.comSe o curl devolver cabeçalhos de um anfitrião que só existe na rede do servidor, o túnel está a funcionar.
ssh -D versus Mosh: tabela comparativa para o proxy SOCKS
O Mosh não faz reencaminhamento de portas nem reencaminhamento X11, por isso não consegue transportar um proxy SOCKS. Cada ferramenta cobre uma tarefa diferente:
| O que se compara | ssh -D (SOCKS) | Mosh |
|---|---|---|
| Transporte e porta predefinida | TCP, porta 22 | UDP, portas 60000-61000 |
| Reencaminhamento de portas ou proxy SOCKS | Sim, reencaminhamento dinâmico | Não suportado |
| Como se estabelece | Ligação SSH direta | Inicia o mosh-server através de uma ligação SSH inicial |
| Melhor utilização | Navegar ou executar ferramentas através do servidor | Shell interativa em redes móveis que mudam |
Na prática, combinam-se: Mosh para a shell a partir do telemóvel e uma ligação SSH separada com -D ou DynamicForward quando precisa do proxy.
4 erros ao montar um proxy SOCKS com ssh -D
- Esperar que o Mosh reencaminhe o proxy: não o faz; o túnel tem de ser SSH simples.
- Fugas de DNS: sem "DNS de proxy" no Firefox, ou com
--socks5no curl, os nomes são resolvidos na sua rede local. - Reencaminhamento desativado no servidor: se o
sshd_configdefinirAllowTcpForwarding noouDisableForwarding yes, o canal é recusado mesmo que o início de sessão funcione. - Escutar em todas as interfaces:
-D 0.0.0.0:1080transforma a sua máquina num proxy aberto para qualquer pessoa na sua rede. Fixe-o em127.0.0.1, a menos que tenha motivos para não o fazer.
Gerir o servidor do proxy SOCKS a partir do telemóvel com o termi1
O túnel ssh -D corre normalmente a partir de um portátil, mas o servidor por trás dele pode ser verificado a partir do telemóvel. Com o terminal SSH termi1 abre o /etc/ssh/sshd_config no editor que preferir usando o teclado próprio da aplicação, que inclui as teclas Esc, Ctrl, Tab e setas, ou descarrega-o por SFTP sem sair da sessão.
Antes de reiniciar o serviço, valide a sintaxe:
sudo sshd -t
grep -Ei 'allowtcpforwarding|disableforwarding' /etc/ssh/sshd_configPeça à IA para "verificar a configuração do sshd" e ela escreve o comando na linha de comandos sem premir Enter. Nas ligações marcadas como produção, o Production Guard retém tudo o que pare ou altere algo, como um reinício do sshd, antes de chegar à linha de comandos. As chaves geradas no telemóvel ficam no armazenamento seguro do sistema e a chave privada nunca sai do dispositivo. Se o servidor não tiver IP público, uma rede mesh privada como a Prialo, ou o Tailscale, chega até ele sem abrir portas. O termi1 está na App Store para iPhone e no Google Play.
Perguntas frequentes
O que faz exatamente o ssh -D 1080?
O ssh -D 1080 abre um proxy SOCKS4/SOCKS5 na porta local 1080 e envia cada ligação que recebe através do servidor SSH. É o servidor que abre a ligação final, por isso os sites que visita veem o endereço IP do servidor e não o da máquina cliente.
Qual é a diferença entre ssh -D e DynamicForward?
O ssh -D e o DynamicForward fazem o mesmo: o primeiro é a opção da linha de comandos e o segundo é a diretiva do ~/.ssh/config. Ambos aceitam a sintaxe [bind_address:]port, e o DynamicForward poupa-o a repetir a flag sempre que se liga a esse anfitrião.
Posso usar o Mosh para criar um proxy SOCKS?
O Mosh não consegue criar um proxy SOCKS porque não faz reencaminhamento de portas nem reencaminhamento X11. Usa UDP nas portas 60000-61000 apenas para a shell interativa. Para o proxy precisa de uma ligação SSH normal com -D ou DynamicForward no seu ficheiro de configuração.
Como evito fugas de DNS com o proxy SOCKS do ssh?
As fugas de DNS com o proxy SOCKS do ssh evitam-se resolvendo os nomes no servidor: no Firefox, marque "DNS de proxy ao utilizar SOCKS v5"; no curl, use --socks5-hostname; no Chrome, passe --proxy-server=socks5://127.0.0.1:1080 com um perfil separado.
Porque é que o servidor recusa o túnel ssh -D?
O servidor recusa o túnel ssh -D quando o sshd_config contém AllowTcpForwarding no ou DisableForwarding yes. O início de sessão continua a funcionar, mas os canais de reencaminhamento são negados. Altere a diretiva, valide-a com sudo sshd -t e depois reinicie o serviço SSH.