O que é um Túnel SSH Reverso?
Normalmente, o
SSH é usado para conectar-se a um servidor remoto a partir de uma máquina local. Um
túnel SSH reverso inverte essa lógica: você se conecta a um servidor remoto e cria um túnel de volta para sua máquina local, tornando-a acessível através de uma porta definida no servidor remoto.
Este método é particularmente útil em cenários onde a máquina local está protegida por firewall ou NAT, tornando-a inacessível diretamente por IP público.
Pré-requisitos
- Acesso de superusuário (root ou sudo) na máquina local.
- SSH habilitado e configurado tanto na máquina local quanto no servidor remoto.
- Acesso a um servidor remoto com IP público.
No meu caso, possuo um servidor remoto configurado na Amazon Web Services (AWS) com um IP público. Meu computador local é inacessível diretamente pela internet, pois está protegido por um firewall do provedor de internet. Sempre que estou em viajem ou fora de casa e preciso acessar meu computador local, uso um túnel SSH reverso para conectar-me a ele a partir do servidor remoto.
Toda vez que vou me ausentar, já abro o túnel SSH reverso para garantir que eu possa acessar minha máquina local remotamente.
Etapa 1: Habilitar o Redirecionamento de Porta no SSH
A primeira etapa é habilitar o redirecionamento de portas na sua máquina local. Isso permite que o túnel SSH crie uma conexão que será aberta no servidor remoto, mas que redirecionará o tráfego para sua máquina local.
Na Máquina Local:
1. Abra o arquivo de configuração do SSH:
Para configurar o SSH e permitir o túnel reverso, edite o arquivo de configuração do servidor SSH na sua máquina local:
sudo vim /etc/ssh/sshd_config
2. Habilite o redirecionamento de portas:
Adicione ou descomente a seguinte linha no arquivo:
GatewayPorts yes
Isso permite que o SSH aceite conexões externas nas portas redirecionadas.
3. Reinicie o serviço SSH:
Após modificar o arquivo de configuração, é necessário reiniciar o serviço SSH para que as mudanças tenham efeito:
sudo service ssh restart
Etapa 2: Abrir o Túnel SSH Reverso
Agora, precisamos abrir o túnel SSH reverso, conectando-se ao servidor remoto e especificando a porta que será usada para redirecionar o tráfego de volta para sua máquina local.
Na Máquina Local:
1. Conecte-se ao servidor remoto com redirecionamento de porta:
Execute o seguinte comando a partir da sua máquina local para iniciar a sessão SSH reversa:
ssh -R 2222:localhost:22 user@remote_host
Neste comando:
- -R 2222:localhost:22: Define o redirecionamento de porta reversa. A porta 2222 no servidor remoto será redirecionada para a porta 22 da sua máquina local (que é a porta do serviço SSH). Você pode substituir a porta 2222 por qualquer outra porta de sua escolha.
- user@remote_host: Substitua "user" pelo nome de usuário no servidor remoto e "remote_host" pelo IP ou nome de domínio do servidor remoto.
Você abriu uma sessão SSH reversa com o servidor remoto. Mantenha esta sessão aberta para manter o túnel ativo.
Agora, qualquer conexão feita para o servidor remoto na porta 2222 será redirecionada para a porta 22 da sua máquina local.
Etapa 3: Acessar a Máquina Local a Partir da Máquina Remota
Depois de configurar o túnel SSH reverso, qualquer pessoa com acesso ao servidor remoto pode acessar sua máquina local usando o redirecionamento que você configurou.
Na Máquina Remota:
1. Abra um terminal na máquina remota (o servidor remoto em que você configurou o túnel).
2. Conecte-se à sua máquina local via SSH:
Execute o seguinte comando na máquina remota:
ssh -p 2222 user@localhost
Aqui:
- -p 2222: Especifica a porta que está sendo usada no servidor remoto para o redirecionamento (neste caso, 2222).
- user: O nome de usuário da máquina local (não do servidor remoto).
- localhost: Referencia o próprio servidor remoto, pois a conexão é redirecionada através da porta 2222 para sua máquina local.
Agora, você estará conectado à sua máquina local a partir do servidor remoto.
Como Funciona o SSH Reverso?
O túnel SSH reverso redireciona o tráfego entre duas máquinas, permitindo que você se conecte a uma máquina local a partir de uma máquina remota. No exemplo acima, quando você se conecta ao servidor remoto com o redirecionamento de porta configurado, o servidor remoto cria uma "ponte" que encaminha todas as conexões feitas na porta 2222 para a porta 22 (SSH) da sua máquina local.
Cenários de Uso
- Trabalhar em ambientes protegidos por firewall: Se você estiver em uma rede protegida que não permite conexões de entrada, o túnel SSH reverso permite que um servidor externo tenha acesso à sua máquina.
- Suporte remoto: Técnicos podem usar túneis SSH reversos para acessar máquinas locais de clientes sem precisar configurar diretamente o roteamento ou firewall no lado do cliente.
- Desenvolvimento e depuração: Em ambientes de desenvolvimento, você pode acessar serviços que estão rodando em sua máquina local a partir de servidores externos, facilitando testes em rede.
Considerações de Segurança
Embora o túnel SSH reverso seja uma ferramenta poderosa, é importante configurá-lo com cuidado para evitar brechas de segurança:
- Autenticação por chave SSH: Use autenticação baseada em chave pública em vez de senhas, para garantir uma camada adicional de segurança.
- Firewall: Certifique-se de que apenas IPs autorizados possam acessar as portas abertas para redirecionamento no servidor remoto.
- Monitoramento: Mantenha logs de conexões e monitore atividades suspeitas no servidor remoto e na máquina local.
Conclusão
Criar um túnel SSH reverso é uma maneira eficaz de acessar uma máquina local que esteja por trás de firewalls ou roteadores NAT. Com alguns ajustes na configuração do SSH, você pode tornar sua máquina local acessível a partir de um servidor remoto e permitir acesso seguro para quem precisa. Sempre garanta que você siga as melhores práticas de segurança ao utilizar essas técnicas, especialmente quando expor sua máquina para redes externas.
Agora que você entende como o SSH reverso funciona, você pode utilizá-lo em diversas situações, facilitando o acesso remoto e a resolução de problemas de conectividade.