Tunneling SSH Explicado: Acedendo a Serviços Remotos com Segurança
Use túneis SSH para alcançar bancos de dados privados, aplicativos web e serviços remotos com encaminhamento local, remoto e dinâmico.
Túnel SSH Explicado: Acessando Serviços Remotos com Segurança
O túnel SSH ajuda você a alcançar serviços remotos sem expor esses serviços à internet. Se seu banco de dados, painel de administração ou servidor de desenvolvimento só pode ser acessado a partir de um host bastião, um túnel SSH pode dar às suas ferramentas locais um caminho seguro até ele.
Os principais padrões são encaminhamento local, encaminhamento remoto e encaminhamento dinâmico. Cada um responde a uma pergunta diferente: você precisa alcançar algo remoto, expor algo local ou criar um proxy SOCKS?
O que é Túnel SSH?
O túnel SSH encapsula o tráfego do aplicativo dentro de uma conexão SSH. Em vez de conectar diretamente a um serviço, você se conecta a uma porta encaminhada local ou remota. O SSH transporta esse tráfego através da sessão criptografada e conecta ao destino final do lado correto do túnel.
O túnel criptografa o tráfego entre seu cliente SSH e o servidor SSH. Se o destino final estiver além do servidor SSH, esse último trecho usa a segurança que o serviço de destino fornece. Para serviços sensíveis, mantenha TLS ou criptografia nativa ativados mesmo quando usar túnel.
Tipos de Túneis SSH
O SSH oferece três tipos principais de encaminhamento de porta, cada um servindo a um propósito diferente:
1. Encaminhamento Local de Porta (-L)
O encaminhamento local de porta é o tipo mais comum. Ele permite encaminhar tráfego de uma porta na sua máquina local para uma porta em uma máquina remota (ou uma máquina acessível a partir do servidor SSH remoto). Isso é ideal para acessar serviços executados na rede interna de um servidor remoto ou no próprio servidor, que não são diretamente acessíveis a partir da sua rede local.
Como funciona: O cliente SSH escuta na sua máquina. O servidor SSH conecta ao destino.
Caso de uso: Acessar um banco de dados MySQL na porta 3306 que apenas o host bastião pode alcançar.
Sintaxe do comando:
ssh -L [PORTA_LOCAL]:[HOST_DESTINO]:[PORTA_DESTINO] [USUARIO_SSH]@[SERVIDOR_SSH]
Exemplo:
Suponha que você tenha um banco de dados MySQL executando em db.internal.example.com (porta 3306) e você só pode fazer SSH para bastion.example.com. Para acessar o banco de dados da sua máquina local na porta 8888:
ssh -L 8888:db.internal.example.com:3306 [email protected]
Após executar este comando, você pode abrir seu cliente MySQL local e conectar a localhost:8888. O tráfego será tunelado com segurança através de bastion.example.com para db.internal.example.com:3306.
Use -N quando você não precisar de um shell remoto:
ssh -N -L 8888:db.internal.example.com:3306 [email protected]
Para scripts, adicione -o ExitOnForwardFailure=yes para que o SSH saia se o ouvinte local não puder ser criado.
2. Encaminhamento Remoto de Porta (-R)
O encaminhamento remoto de porta faz o oposto do encaminhamento local. Ele permite encaminhar tráfego de uma porta no servidor SSH remoto para uma porta na sua máquina local ou uma máquina acessível a partir da sua máquina local. Isso é útil para expor um serviço executado na sua máquina local (ou uma máquina na sua rede local) ao servidor remoto ou à sua rede.
Como funciona: O servidor SSH escuta em uma porta remota. Seu cliente SSH conecta ao destino do seu lado do túnel.
Caso de uso: Permitir que um colega remoto acesse um servidor de desenvolvimento web executado na sua máquina local (por exemplo, um aplicativo Flask na porta 5000) sem expor sua máquina local diretamente à internet.
Sintaxe do comando:
ssh -R [PORTA_REMOTA]:[HOST_DESTINO]:[PORTA_DESTINO] [USUARIO_SSH]@[SERVIDOR_SSH]
Exemplo:
Suponha que você esteja executando um aplicativo web na sua máquina local em localhost:5000. Você quer permitir que um usuário em remote.example.com o acesse conectando à porta 9000 em remote.example.com.
ssh -R 9000:localhost:5000 [email protected]
Em configurações típicas do OpenSSH, o ouvinte remoto está disponível apenas na interface de loopback do servidor SSH. Isso significa que usuários no host remoto podem testar localhost:9000, mas outras máquinas não podem necessariamente alcançar remote.example.com:9000.
Para expor o ouvinte a outras máquinas, você geralmente precisa de um endereço de bind como 0.0.0.0 no comando e uma configuração GatewayPorts no lado do servidor, como clientspecified ou yes. Seja cauteloso: o encaminhamento remoto pode expor serviços no seu laptop ou rede local à rede remota.
3. Encaminhamento Dinâmico de Porta (-D)
O encaminhamento dinâmico de porta cria um proxy SOCKS na sua máquina local. Em vez de encaminhar tráfego para um destino específico, ele permite que aplicativos configurados para usar este proxy SOCKS se conectem a qualquer host e porta acessíveis a partir do servidor SSH. Isso efetivamente transforma sua conexão SSH em um servidor proxy versátil.
Como funciona: Seu cliente SSH escuta como um proxy SOCKS. Aplicativos que suportam SOCKS enviam requisições para esse proxy local, e o servidor SSH faz a conexão de saída.
Caso de uso: Navegar na web com segurança a partir de uma rede Wi-Fi pública, roteando todo o tráfego do seu navegador através de um servidor SSH em casa ou no escritório. Isso criptografa sua atividade de navegação.
Sintaxe do comando:
ssh -D [PORTA_LOCAL] [USUARIO_SSH]@[SERVIDOR_SSH]
Exemplo:
Para criar um proxy SOCKS na sua máquina local escutando na porta 1080:
ssh -D 1080 [email protected]
Após executar este comando, configure seu navegador ou outro aplicativo para usar um proxy SOCKS em localhost:1080. Se o aplicativo suportar DNS remoto via SOCKS5, ative-o quando a privacidade do DNS for importante.
Aplicações Práticas e Benefícios
O túnel SSH oferece uma ampla gama de aplicações práticas:
- Acesso Seguro a Banco de Dados: Acessar bancos de dados (como PostgreSQL, MySQL ou MongoDB) que só são acessíveis a partir de um servidor específico em uma rede privada, sem expor a porta do banco de dados diretamente à internet.
- Acessar Serviços Web Internos: Conectar a aplicativos web internos, interfaces administrativas ou painéis de monitoramento que não estão expostos publicamente.
- Proteger Protocolos Não Criptografados: Encapsular protocolos inseguros como VNC, FTP ou HTTP simples dentro de um túnel SSH criptografado, fornecendo confidencialidade e integridade.
- Trabalhar através de restrições de rede: Acessar serviços através de um servidor que tem permissão para alcançá-los. Faça isso apenas quando estiver em conformidade com a política de rede da sua organização.
- Desenvolvimento Remoto Seguro: Fornecer acesso seguro a ambientes de desenvolvimento ou ferramentas executadas em servidores remotos.
Conclusão
Use encaminhamento local quando seu laptop precisar de acesso a um serviço remoto privado. Use encaminhamento remoto quando um host remoto precisar de acesso temporário a um serviço perto de você. Use encaminhamento dinâmico quando precisar de um proxy SOCKS através de um servidor SSH confiável. Mantenha o túnel o mais estreito possível e feche-o quando o trabalho estiver concluído.