Proxy Reverso com SSH: Redirecionando Porta 8000 Local para um Servidor Remoto

Este post mostra como criar um túnel SSH para que aplicações locais que escutam em localhost:8000 se conectem a um servidor remoto, também na porta 8000. Trata-se de um redirecionamento local, comumente conhecido como proxy reverso via SSH (túnel local).

Cenário

Você está em uma máquina local (cliente) e quer acessar localhost:8000, mas os dados devem ser redirecionados via SSH para servidor_remoto:8000. O servidor está acessível via SSH com um usuário válido.

Solução com ssh -L (Túnel Local)

Este é o comando base para criar o redirecionamento:

ssh -L 8000:localhost:8000 usuario@servidor_remoto

Explicação dos parâmetros:

  • -L 8000:localhost:8000: cria o túnel local. O primeiro 8000 é a porta que o cliente vai escutar. O localhost:8000 após os dois-pontos é o destino no lado do servidor. Em outras palavras: tudo que for enviado a localhost:8000 na máquina cliente será redirecionado via SSH para localhost:8000 no servidor remoto.
  • usuario@servidor_remoto: credencial de acesso SSH ao servidor.

Após executar, qualquer chamada a:

curl http://localhost:8000

será enviada para o servidor remoto na mesma porta, via SSH.

Túnel SSH sem shell interativo

Caso queira manter o túnel ativo em segundo plano sem abrir um terminal SSH interativo:

ssh -fN -L 8000:localhost:8000 usuario@servidor_remoto

Parâmetros adicionais:

  • -f: envia o processo para background
  • -N: não executa comandos no servidor, apenas estabelece o túnel

Este comando é ideal para automação ou scripts.

Caso inverso: servidor acessando o cliente (túnel reverso)

Se você deseja que o servidor acesse a porta 8000 do cliente, use um túnel reverso:

ssh -R 8000:localhost:8000 usuario@servidor_remoto

Neste caso, ao acessar localhost:8000 no servidor remoto, a conexão será redirecionada para a porta 8000 da máquina cliente.

Mantendo o túnel ativo: autossh

Para evitar quedas de conexão e reconectar automaticamente em caso de falha, utilize autossh.

Instalação:

sudo apt install autossh

Exemplo de uso:

autossh -fN -L 8000:localhost:8000 usuario@servidor_remoto

Este comando cria o túnel e mantém a conexão persistente.

Configuração persistente com systemd

Para manter o túnel ativo mesmo após reinicializações, crie um serviço systemd.

Exemplo de unit file:

[Unit]
Description=Túnel SSH Local para Servidor Remoto
After=network.target

[Service]
User=seu_usuario
ExecStart=/usr/bin/ssh -N -L 8000:localhost:8000 usuario@servidor_remoto
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Salve como /etc/systemd/system/ssh-tunel8000.service, depois:

sudo systemctl daemon-reexec
sudo systemctl enable --now ssh-tunel8000.service

Pronto. O túnel será estabelecido automaticamente com o boot do sistema.

Considerações

  • O SSH precisa estar corretamente configurado e acessível no servidor remoto.
  • O serviço remoto na porta 8000 deve estar escutando em localhost ou 0.0.0.0, conforme o uso.
  • Para acessos públicos (outras máquinas acessarem seu túnel), é possível usar -L 0.0.0.0:8000:localhost:8000.

Conclusão

Redirecionar portas com SSH é uma prática poderosa, segura e nativa do próprio protocolo. Evita a necessidade de VPNs ou ferramentas adicionais em muitos casos. Com ssh -L, ssh -R, autossh e systemd, é possível construir túneis estáveis e automatizados para diversos cenários, incluindo acesso a serviços restritos e transporte seguro de dados entre redes isoladas.

Rolar para cima