¿Cómo usar ssh sobre http o https?

43

Tengo una computadora portátil cliente Linux Fedora21 detrás de un firewall corporativo (que deja pasar los puertos http y https pero no SSH 22) y tengo un servidor Linux Fedora21 en casa detrás de mi propio enrutador. La navegación con https funciona cuando especifico la dirección IP pública de mi servidor doméstico (porque configuré mi enrutador doméstico)

¿Es posible ssh (shell remoto) a mi servidor doméstico a través del puerto http / s?

Vi una herramienta llamada corkscrew. ¿eso ayudaría?

opensshdy httpdejecutar en el servidor de inicio. ¿Qué más necesitaría configuración?

MMM
fuente
1
coloque su sshd en casa para escuchar en el puerto 443, pero debe deshabilitar el puerto 443 en su httpd de casa.
taliezin
No puedo pensar eso. Necesito httpd (s) para git empujado también. así que tengo que escuchar un httpd en 443.
MMM
pruebe httptunnel - yum install httptunnel http://www.nocrew.org/software/httptunnel.html , o como mencionó en su pregunta: sacacorchos.
taliezin
De cualquier manera, sshd escucharía 22, y httpd a 80/443 y httptunnel o sacacorchos reenviarían el tráfico que httpd recibe a sshd.
MMM
Sí. No tiene que cambiar los puertos de sus servicios.
taliezin

Respuestas:

42

Lo posible depende de lo que permita el firewall.

Si el firewall permite el tráfico arbitrario en el puerto 443

Algunos cortafuegos toman la salida simple y permiten cualquier cosa en el puerto 443. Si ese es el caso, la forma más fácil de llegar a su servidor doméstico es hacer que escuche las conexiones SSH en el puerto 443. Si su máquina está directamente conectada a Internet, simplemente añadir Port 443a /etc/ssh/sshd_config, o /etc/sshd_configjusto por debajo de la línea que dice Port 22. Si su máquina está detrás de un enrutador / firewall que redirige las conexiones entrantes, haga que redirija las conexiones entrantes al puerto 443 al puerto 22 de su servidor con algo como

iptables -t nat -I PREROUTING -p tcp -i wan0 --dport 443 -j DNAT --to-destination 10.1.2.3:22

dónde wan0está la interfaz WAN en su enrutador y 10.1.2.3 es la dirección IP de su servidor en su red doméstica.

Si desea permitir que su servidor doméstico escuche tanto las conexiones HTTPS como las conexiones SSH en el puerto 443, es posible: el tráfico SSH y HTTPS se puede distinguir fácilmente (en SSH, el servidor habla primero, mientras que en HTTP y HTTPS, el cliente habla primero). Consulte http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html y http://wrouesnel.github.io/articles/Setting%20up%20sshttp/ para obtener tutoriales sobre cómo configurar esto con sshttp y también SSH en el puerto 80 o 443 mientras el servidor web (nginx) se ejecuta en estos puertos

Si tiene un proxy web que permite hacer túneles CONNECT

Algunos cortafuegos bloquean todas las conexiones salientes, pero permiten navegar por la web a través de un proxy que permite que el método HTTPCONNECT perfore efectivamente un agujero en el cortafuegos. El CONNECTmétodo puede estar restringido a ciertos puertos, por lo que es posible que deba combinar esto con la escucha en el puerto 443 como se indicó anteriormente.

Para hacer que SSH vaya a través del proxy, puede usar una herramienta como sacacorchos . En su ~/.ssh/config, agregue una ProxyCommandlínea como la siguiente, si su proxy web es http://web-proxy.work.example.com:3128:

Host home
HostName mmm.dyndns.example.net
ProxyCommand corkscrew web-proxy.work.example.com 3128 %h %p

Envolviendo SSH en HTTP (S)

Algunos firewalls no permiten el tráfico SSH, incluso en el puerto 443. Para hacer frente a estos, debe disfrazar o hacer un túnel SSH en algo que el firewall permita. Consulte http://dag.wiee.rs/howto/ssh-http-tunneling/ para obtener un tutorial sobre cómo hacer esto con proxytunnel .

Gilles 'SO- deja de ser malvado'
fuente
el truco 443 lo hizo! Me sorprendió que esto funcione :) - ¿Alguna vista del administrador de sistemas por qué este parece ser el caso con la mayoría de los firewalls?
AK_
@AK_ Porque aunque es posible que un cortafuegos distinga TLS de SSH, es un paso de configuración adicional y cuesta más en rendimiento, sin beneficio real cuando se trata de conexiones salientes (ya que cualquier cosa podría ser un túnel en TLS de todos modos).
Gilles 'SO- deja de ser malvado'
@Gilles, ¿hay incluso servidores proxy que bloqueen HTTPS pero que permitan HTTP CONNECT HTTPS?
Pacerier
1
@Pacerier Muchos de ellos. No es que el proxy bloquee HTTPS (un proxy no bloquea las conexiones que omiten el proxy), es que las conexiones directas están bloqueadas, pero el proxy permite CONECTAR con cualquier tráfico siempre que sea al puerto 443. De todos modos, no hay una forma real de filtrar HTTPS , menos la inyección de raíz de confianza y la reescritura de certificados, que es una muy mala idea.
Gilles 'SO- deja de ser malvado'
Tenga en cuenta que también puede usar netcat-openbsd en lugar de sacacorchos en el comando proxy:ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
Paul Rougieux
1

Puede usar sslh si desea ejecutar AMBOS un servidor HTTPS y un servidor SSHd en el mismo puerto 443.

teknopaul
fuente