Come usare ssh su http o https?


43

Ho un laptop client fedora21 di linux dietro un firewall aziendale (che lascia passare le porte http e https ma non ssh 22) e ho un server fedora21 di linux a casa dietro il mio router. La navigazione con https funziona quando specifico l'indirizzo IP pubblico del mio server di casa (perché ho configurato il mio router di casa)

È possibile ssh (shell remota) sul mio server di casa tramite la porta http / s?

Ho visto uno strumento chiamato corkscrew. sarebbe d'aiuto?

opensshded httpdeseguire sul server principale. Cos'altro avrebbe bisogno di configurazione?


1
metti il ​​tuo sshd a casa per ascoltare sulla porta 443, ma dovresti disabilitare la porta 443 sul tuo httpd di casa.
Taliezin,

Non posso proprio pensarlo. Ho bisogno di httpd (s) anche per git push. quindi devo ascoltare httpd il 443.
MMM

prova httptunnel - yum installa httptunnel http://www.nocrew.org/software/httptunnel.html , o come hai detto nella tua domanda: cavatappi.
Taliezin,

In entrambi i casi, sshd ascolterebbe 22, e httpd 80/443 e httptunnel o cavatappi inoltrerebbero il traffico che httpd riceve a sshd?
MMM

Sì. Non deve cambiare le porte dei tuoi servizi.
Taliezin,

Risposte:


42

Ciò che è possibile dipende da ciò che il firewall consente.

Se il firewall consente il traffico arbitrario sulla porta 443

Alcuni firewall escono in modo semplice e consentono qualsiasi cosa sulla porta 443. In tal caso, il modo più semplice per raggiungere il server di casa è farlo ascoltare le connessioni SSH sulla porta 443. Se la tua macchina è direttamente connessa a Internet, semplicemente aggiungi Port 443al /etc/ssh/sshd_configo /etc/sshd_configappena sotto la linea che dice Port 22. Se la tua macchina si trova dietro un router / firewall che reindirizza le connessioni in entrata, fallo reindirizzare le connessioni in entrata sulla porta 443 sulla porta 22 del tuo server con qualcosa di simile

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

dove si wan0trova l'interfaccia WAN sul router e 10.1.2.3 è l'indirizzo IP del server sulla rete domestica.

Se vuoi consentire al tuo server di casa di ascoltare sia le connessioni HTTPS che SSH sulla porta 443, è possibile - il traffico SSH e HTTPS può essere facilmente distinto (in SSH, il server parla per primo, mentre in HTTP e HTTPS, il client parla primo). Vedi http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html e http://wrouesnel.github.io/articles/Setting%20up%20sshttp/ per tutorial su come impostare questo con sshttp , e hanno anche SSH sulla porta 80 o 443 mentre webserver (nginx) è in esecuzione su queste porte

Se si dispone di un proxy Web che consente il tunneling CONNECT

Alcuni firewall bloccano tutte le connessioni in uscita, ma consentono la navigazione sul Web tramite un proxy che consente al metodo HTTPCONNECT di perforare efficacemente un buco nel firewall. Il CONNECTmetodo potrebbe essere limitato a determinate porte, quindi potrebbe essere necessario combinarlo con l'ascolto sulla porta 443 come sopra.

Per far passare SSH tramite il proxy, è possibile utilizzare uno strumento come cavatappi . Nel tuo ~/.ssh/config, aggiungi una ProxyCommandriga come quella qui sotto, se il tuo proxy web è http://web-proxy.work.example.com:3128:

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

Avvolgimento SSH in HTTP (S)

Alcuni firewall non consentono il traffico SSH, anche sulla porta 443. Per far fronte a questi, è necessario camuffare o tunnel SSH in qualcosa che il firewall lascia passare. Vedi http://dag.wiee.rs/howto/ssh-http-tunneling/ per un tutorial su come farlo con proxytunnel .


il trucco 443 l'ha fatto! Sono rimasto sorpreso dal fatto che funzioni :) - qualsiasi vista di amministratore di sistema perché questo sembra essere il caso della maggior parte dei firewall?
AK_13

@AK_ Perché anche se è possibile che un firewall distingua TLS da SSH, è un passaggio di configurazione aggiuntivo e costa di più in termini di prestazioni, senza alcun vantaggio reale quando si tratta di connessioni in uscita (dal momento che qualsiasi cosa potrebbe essere sintonizzata in TLS comunque).
Gilles 'SO- smetti di essere malvagio' il

@Gilles, Esistono persino server proxy che bloccano HTTPS e tuttavia consentono HTTPS HTTP CONNECT?
Pacerier,

1
@Pacerier Molti di loro. Non è che il proxy blocchi HTTPS - un proxy non blocca le connessioni che bypassano il proxy - è che le connessioni dirette sono bloccate, ma il proxy consente CONNECT con qualsiasi traffico a condizione che sia diretto alla porta 443. Non c'è modo reale di filtrare HTTPS comunque , a meno della radice dell'iniezione di fiducia e della riscrittura dei certificati, che è una pessima idea.
Gilles 'SO- smetti di essere malvagio' il

Nota che puoi anche usare netcat-openbsd invece di cavatappi nel ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
comando


1

È possibile utilizzare sslh se si desidera eseguire ENTRAMBE un server HTTPS e un server SSHd sulla stessa porta 443.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.