Transportar SSH a través de HTTPS
- Para transportar SSH a través de HTTPS, hay que ajustar tanto el cliente como el servidor.
- En el ejemplo de configuración del cliente, se establecen
ProxyCommand y ServerAliveInterval en el archivo ~/.ssh/config.
- El script
~/.ssh/https-tunnel.bash que se usa crea una conexión TLS con socat mientras envía el método CONNECT en los encabezados.
Ejemplo de configuración del servidor
- En la configuración del servidor HTTPS de Apache2, se carga
proxy_connect_module y se usa la directiva AllowCONNECT para permitir el uso del método HTTP CONNECT hacia un destino específico.
- Del lado del servidor, se configura para que en
https-server el método CONNECT solo pueda usarse para el único destino, el host ssh-server.
Contexto
- Mientras se permanece en un hospital, se busca trabajar de forma remota a través del Wi‑Fi del hospital, donde la mayoría de los tipos de conexión están bloqueados.
- La red del hospital solo permite conexiones HTTP y HTTPS, y SSH está completamente bloqueado.
- Se exploran formas de transportar SSH a través de HTTP o HTTPS.
Métodos posibles
- El proyecto
sslh, que coalberga los protocolos SSH y HTTPS en un solo puerto y los distribuye de forma transparente.
sslh no encapsula un protocolo dentro de otro, sino que usa varias heurísticas para redirigir al backend real.
- Un método que encapsula por completo el protocolo SSH dentro de otro protocolo usando la directiva
ProxyCommand de openssh.
SSH sobre HTTP
- Para un intento simple de SSH sobre HTTP, se configura Apache2 para permitir el método
CONNECT hacia el único destino ssh-server:22.
- Del lado del cliente, se ajusta fácilmente usando
socat.
- Se usa
ServerAliveInterval para evitar que la conexión HTTP se cierre incluso cuando está inactiva.
SSH sobre HTTPS
socat no es compatible con proxies HTTPS, pero sí con encapsulación TLS.
- Es fácil implementar manualmente un método basado en
CONNECT.
- Se implementa el túnel SSH sobre HTTPS usando el script
~/.ssh/https-tunnel.bash.
Cierre
- La presencia generalizada de HTTPS permite transportar datos a través de dispositivos intermedios muy restrictivos.
- El método
CONNECT es un hack útil para envolver un flujo de carga útil TCP dentro de un flujo de host TLS.
ServerAliveInterval se usa para mantener la conexión en transportes subyacentes que no son amigables con las conexiones inactivas.
Opinión de GN⁺
- Lo más importante de este artículo es que presenta una solución creativa para hacer posible una conexión SSH incluso en entornos de red restrictivos.
- La forma de combinar SSH y HTTPS puede ser especialmente interesante para personas con conocimientos especializados relacionados con seguridad de redes.
- La manera de evadir restricciones de red mediante la configuración de
ProxyCommand y ServerAliveInterval ofrece información útil para administradores de red o especialistas en seguridad.
1 comentarios
Comentarios de Hacker News
ProxyJumpa través de otro host, o conseguir una conexión a internet menos restringida mediante SOCKS. También es posible reenviar DNS sobre TLS a través de una conexión SSH.opensshescuche en el puerto 443.