Tunelamento SSH | Solyd One
- Tunelamento SSH | Solyd One
Arquivos de configurações do ssh ficam em /etc/ssh/ dentro do arquivo sshd
vim /etc/ssh/sshd
-
Ativar o ssh
service start ssh -
Realizar o tunelamento
ssh -N -L 3001:127.0.0.1:5984 usuario@10.132.213.150
Documentação rápida
Tunelamento SSH — direto ao ponto
Documento curto e prático sobre tunelamento (port forwarding) com SSH: o quê, quando usar, comandos essenciais, exemplos, segurança e checagem.
Conceito rápido
Tunelamento SSH encapsula tráfego TCP (ou atua como proxy SOCKS) dentro de uma conexão SSH criptografada. Três tipos principais:
- Local (L): encaminha uma porta da sua máquina local para um serviço acessível pelo servidor SSH.
- Remoto (R) / reverso: expõe uma porta do servidor SSH para um serviço na sua máquina local (útil para atravessar NAT).
- Dinâmico (D): cria um proxy SOCKS (proxy dinâmico) que roteia múltiplas conexões através do SSH.
Sintaxe básica (OpenSSH)
-
Local:
ssh -L [bind_address:]local_port:dest_host:dest_port user@ssh_server -
Remoto:
ssh -R [bind_address:]remote_port:dest_host:dest_port user@ssh_server -
Dinâmico (SOCKS):
ssh -D [bind_address:]local_port user@ssh_server -
Flags comuns:
-N— não executa shell/remote command (só forward).-f— coloca em background (use com-N).-C— compressão.-g— permite conexões remotas à porta ligada localmente.-p PORT— porta do servidor SSH.-i /caminho/key— chave privada.
Exemplo rápido:
# Encaminhar 8080 local -> destino interno 10.0.0.5:80 via ssh.example.com
ssh -L 8080:10.0.0.5:80 user@ssh.example.com -N -f
Exemplos práticos
1) Acessar serviço interno da rede do servidor
Usuário local quer ver http://10.0.0.5:80 (inacessível diretamente):
ssh -L 8080:10.0.0.5:80 user@ssh.example.com -N -f
# No navegador: http://localhost:8080
2) Reverse tunnel — expor serviço local atrás de NAT
Servidor público ssh.example.com recebe conexões à porta 2222 e as encaminha para máquina local (útil para suporte/remoto):
ssh -R 2222:localhost:22 user@ssh.example.com -N -f
# Agora, no servidor público: ssh -p 2222 localhost -> acessa sua máquina local
Se quiser que qualquer host acesse a porta remota, no servidor SSH sshd_config habilite GatewayPorts yes (mais abaixo).
3) Proxy SOCKS (navegar via outro servidor)
ssh -D 1080 user@ssh.example.com -N -f
# Configure navegador para usar SOCKS5 localhost:1080
4) Encaminhar porta com bind em endereço específico
Bind em 0.0.0.0 para aceitar conexões externas:
ssh -L 0.0.0.0:8080:10.0.0.5:80 user@ssh.example.com -N -f
# Requer -g para permitir conexões externas em algumas versões
PuTTY (Windows) — resumo rápido
-
Sessão → HostName/Port
-
Connection → SSH → Tunnels:
- Source port = local port (ex: 8080)
- Destination = dest_host:dest_port (ex: 10.0.0.5:80)
- Local / Remote / Dynamic → escolher
- Add → Open
Configurações úteis em ~/.ssh/config
Host ssh-tunel
HostName ssh.example.com
User user
IdentityFile ~/.ssh/id_ed25519
LocalForward 8080 10.0.0.5:80
RemoteForward 2222 localhost:22
ServerAliveInterval 30
ServerAliveCountMax 3
Inicie com ssh -f -N ssh-tunel ou apenas ssh ssh-tunel se preferir.
Requisitos no servidor (sshd_config)
AllowTcpForwarding yes— permite forwarding (padrão é yes em muitos sistemas).GatewayPorts yes— para permitir que portas remotas sejam acessíveis externamente (cuidado).- Reinicie/recicle
sshdapós mudanças.
Segurança — pontos críticos
- Prefira autenticação por chave (sem senha) e use passphrase na chave.
- Restrinja quem pode tunelar no servidor (
AllowTcpForwarding nopor padrão e useMatchblocks se necessário). - Evite abrir
GatewayPorts yessem controle: expõe serviços para internet. - Monitore logs (
/var/log/auth.logoujournalctl -u sshd) para conexões inesperadas. - Use
tcpwrappers/firewall (ufw/iptables/nft) para controlar acesso às portas expostas. - Cuidado com proxying de tráfego sensível sem inspeção.
Testes e verificação
-
Checar portas:
ss -tunlp | grep :8080ounetstat -tulpn -
Testar encaminhamento HTTP:
curl --socks5 localhost:1080 http://ifconfig.me(para SOCKS)curl http://localhost:8080(para L)
-
Ver conexões SSH ativas:
ps aux | grep sshoussh -G host(para debug de config). -
Debug do SSH:
ssh -vvv -L 8080:10.0.0.5:80 user@ssh.example.com
Automação / persistência
- Use
autosshpara manter túnel persistente (reconecta automaticamente):
autossh -M 0 -f -N -L 8080:10.0.0.5:80 user@ssh.example.com
- Para iniciar no boot, crie systemd unit simples que execute
autosshou comandossh -f -N ....
Troubleshooting rápido
- Conexão cai: habilite
ServerAliveInterval 30no cliente;ClientAliveIntervalno servidor. - Porta já em uso: escolha outra porta local; verifique com
ss. - Forwarding negado: verifique
AllowTcpForwardingno servidor e política do account (Match blocks, ForceCommand). - Reverse não acessível externamente: verifique
GatewayPorts, firewall do servidor e binding (0.0.0.0 vs localhost).
Casos de uso típicos (resumido)
- Acesso a serviços internos (banco de dados, painéis) sem VPN.
- Acesso remoto a máquina atrás de NAT (reverse tunnel).
- Navegação segura em Wi‑Fi pública (SOCKS).
- Tunelamento de um serviço específico sem expor porta pública.
Resumo final (comandos essenciais)
# Local forward
ssh -L 8080:10.0.0.5:80 user@ssh.example.com -N -f
# Remote (reverse) forward
ssh -R 2222:localhost:22 user@ssh.example.com -N -f
# Dynamic SOCKS proxy
ssh -D 1080 user@ssh.example.com -N -f
# Keep-alive + key
ssh -i ~/.ssh/id_ed25519 -o ServerAliveInterval=30 -L 8080:10.0.0.5:80 user@ssh.example.com -N -f