Como usar ssh sobre http ou https?

42

Eu tenho um laptop cliente linux fedora21 atrás de um firewall corporativo (que permite portas http e https, mas não o ssh 22) e eu tenho um servidor linux fedora21 em casa atrás do meu próprio roteador. A navegação com https funciona quando eu especifico o endereço IP público do meu servidor doméstico (porque configurei meu roteador doméstico)

É possível ssh (shell remoto) no meu servidor doméstico pela porta http / s?

Eu vi uma ferramenta chamada corkscrew. isso ajudaria?

opensshde httpdexecute no servidor doméstico. O que mais precisaria de configuração?

MMM
fonte
11
coloque seu sshd em casa para escutar na porta 443, mas desative a porta 443 no seu httpd doméstico.
taliezin
Não posso pensar bem nisso. Eu preciso de httpd (s) para o git enviado também. então eu tenho que ter um httpd ouvindo no 443.
MMM
experimente oiptptunnel - yum instale o http://www.pt.nocrew.org/software/httptunnel.html , ou como você mencionou na sua pergunta: saca-rolhas.
taliezin
De qualquer forma, o sshd ouviria 22, e o httpd a 80/443 e o updptunnel ou o saca-rolhas encaminharia o tráfego que o httpd recebe para o sshd?
MMM
Sim. Não é necessário alterar as portas dos seus serviços.
taliezin

Respostas:

42

O que é possível depende do que o firewall permite.

Se o firewall permitir tráfego arbitrário na porta 443

Alguns firewalls seguem o caminho mais simples e permitem qualquer coisa na porta 443. Se esse for o caso, a maneira mais fácil de acessar seu servidor doméstico é fazê-lo ouvir conexões SSH na porta 443. Se sua máquina estiver diretamente conectada à Internet, basta adicionar Port 443a /etc/ssh/sshd_configou /etc/sshd_configlogo abaixo da linha que diz Port 22. Se sua máquina estiver protegida por um roteador / firewall que redireciona as conexões de entrada, redirecione as conexões de entrada para a porta 443 para a porta 22 do servidor com algo como

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

onde wan0está a interface WAN no seu roteador e 10.1.2.3 é o endereço IP do seu servidor na sua rede doméstica.

Se você deseja permitir que o servidor doméstico ouça conexões HTTPS e SSH na porta 443, é possível - o tráfego SSH e HTTPS pode ser facilmente distinguido (no SSH, o servidor fala primeiro, enquanto no HTTP e HTTPS, o cliente fala primeiro). Consulte http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html e http://wrouesnel.github.io/articles/Setting%20up%20sshttp/ para obter tutoriais sobre como definir isso com sshttp e também tenha SSH na porta 80 ou 443 enquanto o servidor da web (nginx) estiver sendo executado nessas portas

Se você tiver um proxy da Web que permita o tunelamento do CONNECT

Alguns firewalls bloqueiam todas as conexões de saída, mas permitem navegar na Web por meio de um proxy que permite que o método HTTPCONNECT efetivamente faça um furo no firewall. O CONNECTmétodo pode estar restrito a determinadas portas, portanto, você pode precisar combiná-lo com a escuta na porta 443, como acima.

Para fazer o SSH passar pelo proxy, você pode usar uma ferramenta como o saca-rolhas . No seu ~/.ssh/config, adicione uma ProxyCommandlinha como a abaixo, se o seu proxy da web for http://web-proxy.work.example.com:3128:

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

Agrupando SSH em HTTP (S)

Alguns firewalls não permitem tráfego SSH, mesmo na porta 443. Para lidar com isso, é necessário disfarçar ou encapsular o SSH em algo que o firewall permita. Consulte http://dag.wiee.rs/howto/ssh-http-tunneling/ para obter um tutorial sobre como fazer isso com proxytunnel .

Gilles 'SO- parar de ser mau'
fonte
o truque 443 conseguiu! Fiquei surpreso que isso funcione :) - qualquer visão do administrador de sistemas por que esse parece ser o caso da maioria dos firewalls?
AK_
@AK_ Porque, embora seja possível para um firewall distinguir TLS de SSH, é uma etapa de configuração adicional e custa mais desempenho, sem nenhum benefício real quando se trata de conexões de saída (já que qualquer coisa poderia ser tunelada no TLS de qualquer maneira).
Gilles 'SO- stop be evil'
@Gilles, existem servidores proxy que bloqueiam o HTTPS e ainda permitem o HTTP CONNECT HTTPS?
Pacerier 27/10
11
@ Pacerier Muitos deles. Não é que o proxy bloqueie o HTTPS - um proxy não bloqueia as conexões que ignoram o proxy - é que as conexões diretas são bloqueadas, mas o proxy permite CONNECT com qualquer tráfego, desde que seja a porta 443. Não há maneira real de filtrar o HTTPS de qualquer maneira , falta de raiz da injeção de confiança e reescrita de certificado, o que é uma péssima idéia.
Gilles 'SO- stop be evil'
Observe que você também pode usar o netcat-openbsd em vez do saca-rolhas no comando proxy:ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
Paul Rougieux
1

Você pode usar sslh se desejar executar um servidor HTTPS e um servidor SSHd na mesma porta 443.

teknopaul
fonte