Transportando SSH via HTTPS
- Para transportar SSH via HTTPS, é preciso ajustar tanto o cliente quanto o servidor.
- No exemplo de configuração do cliente, são definidos
ProxyCommand e ServerAliveInterval no arquivo ~/.ssh/config.
- O script
~/.ssh/https-tunnel.bash usado cria uma conexão TLS com socat, enviando o método CONNECT nos cabeçalhos.
Exemplo de configuração do servidor
- Na configuração do servidor HTTPS Apache2, carrega-se o
proxy_connect_module e usa-se a diretiva AllowCONNECT para permitir o uso do método HTTP CONNECT para destinos específicos.
- No lado do servidor, configura-se o
https-server para permitir o uso do método CONNECT apenas para o host único de destino ssh-server.
Contexto
- Enquanto estava internado no hospital, a pessoa queria trabalhar remotamente usando o Wi‑Fi do hospital, que bloqueava a maioria dos tipos de conexão.
- A rede do hospital permitia apenas conexões HTTP e HTTPS, e o SSH era totalmente bloqueado.
- Exploração de como transportar SSH por HTTP ou HTTPS.
Métodos possíveis
- O projeto
sslh, que hospeda em conjunto os protocolos SSH e HTTPS em uma única porta e os distribui de forma transparente.
- O
sslh não encapsula um protocolo dentro de outro; em vez disso, usa várias heurísticas para redirecionar ao backend real.
- Um método que encapsula completamente o protocolo SSH dentro de outro protocolo usando a diretiva
ProxyCommand do openssh.
SSH sobre HTTP
- Para uma tentativa simples de SSH sobre HTTP, configura-se o Apache2 para permitir o método
CONNECT para o único destino ssh-server:22.
- No lado do cliente, a adaptação é feita facilmente com
socat.
- Usa-se
ServerAliveInterval para evitar que a conexão HTTP seja encerrada mesmo quando estiver ociosa.
SSH sobre HTTPS
- O
socat não oferece suporte a proxy HTTPS, mas oferece suporte a encapsulamento TLS.
- É fácil implementar manualmente um método baseado em
CONNECT.
- O script
~/.ssh/https-tunnel.bash é usado para implementar o tunelamento de SSH sobre HTTPS.
Encerramento
- A presença quase universal do HTTPS permite transportar dados por dispositivos intermediários muito restritivos.
- O método
CONNECT é um hack útil para encapsular um fluxo de payload TCP dentro de um fluxo de host TLS.
ServerAliveInterval é usado para manter a conexão em transportes subjacentes que não lidam bem com conexões ociosas.
Opinião do GN⁺
- O ponto mais importante deste texto é apresentar uma solução criativa para viabilizar conexões SSH mesmo em ambientes de rede restritivos.
- A forma de combinar SSH e HTTPS pode ser especialmente interessante para pessoas com conhecimento especializado em segurança de redes.
- A maneira de contornar restrições de rede com as configurações de
ProxyCommand e ServerAliveInterval oferece informações úteis para administradores de rede e especialistas em segurança.
1 comentários
Comentários do Hacker News
ProxyJumppor meio de outro host, ou obter uma conexão de internet menos restrita via SOCKS. Também é possível encaminhar DNS sobre TLS por uma conexão SSH.opensshescutar na porta 443.