6 pontos por GN⁺ 2024-09-20 | 1 comentários | Compartilhar no WhatsApp

Um guia visual para tunelamento SSH e encaminhamento de portas

  • Resumo: este post de blog foi escrito para ajudar na compreensão de tunelamento SSH e encaminhamento de portas. Os tópicos incluem casos de uso, configuração, jump host SSH, encaminhamento de portas local/remoto/dinâmico e limitações.
Casos de uso
  • Segurança:

    • Criptografar conexões inseguras, como FTP
    • Acesso a painéis de administração web por meio de túnel SSH (autenticação por chave pública)
    • Redução do número de portas expostas (apenas a porta 22 exposta)
  • Solução de problemas:

    • Contornar firewall/filtros de conteúdo
    • Escolher outro caminho
  • Conectividade:

    • Acessar servidores atrás de NAT
    • Acessar servidores internos pela internet usando um jump host
    • Expor uma porta local à internet
Encaminhamento de portas
  • Configuração/preparação:
    • Usuários locais e remotos precisam de permissão para abrir portas
    • As portas 0-1024 exigem privilégios de root
    • Configurar adequadamente o cliente e o firewall da rede
    • É preciso habilitar o encaminhamento de portas no servidor SSH: AllowTcpForwarding yes
    • Para encaminhar portas em outras interfaces, é preciso habilitar GatewayPorts yes
Jump host SSH / túnel SSH
  • Conexão via jump host:

    ssh -J user@REMOTE-MACHINE:22 -p 22 user@10.99.99.1
    
  • Uso de vários jump hosts:

    ssh -J user@REMOTE-MACHINE:22,user@ANOTHER-REMOTE-MACHINE:22 -p 22 user@10.99.99.1
    
Encaminhamento de porta local
  • Exemplo 1:

    ssh -L 10.10.10.1:8001:localhost:8000 user@REMOTE-MACHINE
    
  • Exemplo 2:

    ssh -L 8001:10.99.99.1:8000 user@REMOTE-MACHINE
    
Encaminhamento de porta remota
  • Exemplos 1+2:

    ssh -R 8000:localhost:8001 user@REMOTE-MACHINE
    ssh -R 8000:10.10.10.2:8001 user@REMOTE-MACHINE
    
  • Exemplo 3:

    ssh -R 10.99.99.2:8000:10.10.10.2:8001 user@REMOTE-MACHINE
    
Encaminhamento de porta dinâmico
  • Uso do protocolo SOCKS:
    ssh -D 10.10.10.1:5555 user@REMOTE-MACHINE
    
Tunelamento SSH TUN/TAP
  • Criar um túnel TCP bidirecional:
    ssh -w local_tun[:remote_tun]
    
Executar SSH em segundo plano
  • Execução em segundo plano:

    ssh -fN -L 8001:127.0.0.1:8000 user@REMOTE-MACHINE
    
  • Parar SSH em segundo plano:

    ps -ef | grep ssh
    kill <PID>
    
Manter a conexão SSH ativa
  • Tratamento de timeout:
    • ClientAliveInterval 15
    • ClientAliveCountMax 3
Limitações
  • UDP:

    • SSH não oferece suporte a UDP, pois requer entrega confiável
  • TCP-over-TCP:

    • O throughput diminui e a latência aumenta devido ao maior overhead
  • Não substitui uma VPN:

    • O tunelamento SSH pode substituir uma VPN, mas em termos de desempenho a VPN é mais adequada
  • Riscos potenciais de segurança:

    • É recomendável desativar funcionalidades desnecessárias

Resumo do GN⁺

  • Este texto explica vários casos de uso e formas de configuração do tunelamento SSH e do encaminhamento de portas
  • O tunelamento SSH é útil para fornecer conexões seguras e contornar firewalls
  • No entanto, ele não substitui uma VPN e tem limitações, como perda de desempenho
  • Outros projetos relacionados incluem soluções de VPN como o OpenVPN

1 comentários

 
GN⁺ 2024-09-20
Comentários do Hacker News
  • Em 2024, em vez de escrever comandos SSH manualmente, é melhor usar o arquivo ~/.ssh/config para configurar LocalForward, RemoteForward e ProxyJump

    • Com uma configuração de exemplo, é possível economizar tempo ao encaminhar dados por várias conexões SSH intermediárias
    • Depois de configurar, é possível usar SSH, SCP e RSYNC no target-server por meio de um apelido
    • Também é possível fazer encaminhamento de portas facilmente com as configurações de LocalForward e RemoteForward
  • O tunelamento SSH é essencial em ambientes corporativos complexos

    • Por causa de muita burocracia e tempo de espera, leva tempo para conseguir as permissões de acesso necessárias
    • Usando o comando ssh -D 8888 someserver e configurando o proxy SOCKS do navegador para localhost:8888, o tráfego do navegador passa a ser roteado por esse servidor
  • Quando se quer acesso SSH a um servidor Linux ou dispositivo IoT atrás de firewall e sem IP fixo, é possível usar um serviço de tunelamento

  • A experiência mais complexa de gambiarra com tunelamento SSH aconteceu em uma conexão entre data centers

    • Era necessário mover dados de A para B e de B para C
    • Combinando rsync, túnel SSH, chaves e roteamento, foi possível mover os dados com sucesso
    • Na época, isso foi uma grande conquista, e a lembrança ainda é vívida
  • Gostariam de ver mais visualizações de rede

    • Especialmente visualização de tráfego em conexões de baixo nível
  • TCP-over-TCP pode aumentar a sobrecarga e a latência, prejudicando o desempenho

    • Em túneis SSH isso não costuma ser um problema, a menos que se use TAP/TUN
    • Porém, ao usar vários canais, pode haver perda de desempenho
  • Túneis SSH são uma ótima ferramenta, mas hoje em dia usam mais ferramentas com TLS e recursos de proxy reverso embutidos

  • sshuttle é uma ferramenta melhor para tunelamento

    • É possível usá-lo como uma VPN com o comando sshuttle -r user@host 10.0.0.0/8
  • Começaram a usar túneis SSH há 15 anos para contornar o firewall da rede da universidade

    • Mudaram a porta padrão para 443
    • Desde então, continuam usando isso para várias finalidades além de contornar firewalls
  • Há curiosidade sobre a existência de um recurso de redirecionamento no próprio SSH

    • Se A tentar se conectar por SSH a B, B instruiria A a se conectar a C, e A se conectaria diretamente a C de forma transparente
    • B deixaria de fazer parte do caminho crítico de dados
    • Há curiosidade sobre a existência desse tipo de funcionalidade