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 yes

Com 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.

  1. 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".
  2. 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.
  3. 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.com

Se 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 comparassh -D (SOCKS)Mosh
Transporte e porta predefinidaTCP, porta 22UDP, portas 60000-61000
Reencaminhamento de portas ou proxy SOCKSSim, reencaminhamento dinâmicoNão suportado
Como se estabeleceLigação SSH diretaInicia o mosh-server através de uma ligação SSH inicial
Melhor utilizaçãoNavegar ou executar ferramentas através do servidorShell 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

  1. Esperar que o Mosh reencaminhe o proxy: não o faz; o túnel tem de ser SSH simples.
  2. Fugas de DNS: sem "DNS de proxy" no Firefox, ou com --socks5 no curl, os nomes são resolvidos na sua rede local.
  3. Reencaminhamento desativado no servidor: se o sshd_config definir AllowTcpForwarding no ou DisableForwarding yes, o canal é recusado mesmo que o início de sessão funcione.
  4. Escutar em todas as interfaces: -D 0.0.0.0:1080 transforma a sua máquina num proxy aberto para qualquer pessoa na sua rede. Fixe-o em 127.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_config

Peç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.