Comment utiliser ssh sur http ou https?

43

J'ai un ordinateur portable client Linux fedora21 derrière un pare-feu d'entreprise (qui laisse passer les ports http et https mais pas ssh 22) et j'ai un serveur Linux fedora21 à la maison derrière mon propre routeur. La navigation avec https fonctionne lorsque je spécifie l'adresse IP publique de mon serveur domestique (car j'ai configuré mon routeur domestique).

Est-il possible de ssh (shell distant) sur mon serveur domestique via le port http / s?

J'ai vu un outil appelé corkscrew. cela aiderait-il?

opensshdet httpdexécutez sur le serveur domestique. Quoi d'autre aurait besoin de configuration?

MMM
la source
1
mettez votre sshd à la maison pour écouter sur le port 443, mais vous devez désactiver le port 443 sur votre httpd d'accueil.
Taliezin
Je ne peux pas tout à fait ça. J'ai besoin de httpd (s) pour git poussé aussi. donc je dois avoir un httpd à l'écoute sur 443.
MMM
essayez httptunnel - yum installez httptunnel http://www.nocrew.org/software/httptunnel.html , ou comme vous l'avez mentionné dans votre question: tire-bouchon.
Taliezin
Quoi qu'il en soit, sshd écouterait 22, et httpd 80/443 et httptunnel ou tire-bouchon acheminerait le trafic que httpd reçoit vers sshd?
MMM
Oui. Il n'est pas nécessaire de changer les ports de vos services.
Taliezin

Réponses:

42

Ce qui est possible dépend de ce que le pare-feu autorise.

Si le pare-feu autorise le trafic arbitraire sur le port 443

Certains pare-feu sont très simples et autorisent tout ce qui est sur le port 443. Si tel est le cas, le moyen le plus simple d’atteindre votre serveur domestique consiste à écouter les connexions SSH sur le port 443. Si votre ordinateur est directement connecté à Internet, ajouter Port 443à /etc/ssh/sshd_configou /etc/sshd_configjuste en dessous de la ligne qui dit Port 22. Si votre ordinateur est derrière un routeur / pare-feu qui redirige les connexions entrantes, faites-le rediriger vers le port 443 vers le port 22 de votre serveur avec quelque chose comme:

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

wan0est l'interface WAN sur votre routeur et 10.1.2.3 l'adresse IP de votre serveur sur votre réseau domestique.

Si vous souhaitez autoriser votre serveur domestique à écouter à la fois les connexions HTTPS et les connexions SSH sur le port 443, il est possible - le trafic SSH et HTTPS peut facilement être distingué (dans SSH, le serveur parle en premier, tandis que dans HTTP et HTTPS, le client première). Voir http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html et http://wrouesnel.github.io/articles/Setting%20up%20sshttp/ pour des tutoriels sur la définition de cette avec sshttp et également Have SSH sur le port 80 ou 443 lorsque le serveur Web (nginx) est en cours d'exécution sur ces ports

Si vous avez un proxy Web permettant le tunneling CONNECT

Certains pare-feu bloquent toutes les connexions sortantes, mais permettent de naviguer sur le Web via un proxy qui permet à la méthode HTTPCONNECT de percer efficacement un trou dans le pare-feu. La CONNECTméthode peut être limitée à certains ports, vous devrez donc peut-être combiner cela avec une écoute sur le port 443 comme ci-dessus.

Pour que SSH passe via le proxy, vous pouvez utiliser un outil comme le tire-bouchon . Dans votre ~/.ssh/config, ajoutez une ProxyCommandligne comme celle ci-dessous, si votre proxy Web est http://web-proxy.work.example.com:3128:

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

Envelopper SSH dans HTTP (S)

Certains pare-feu n'autorisent pas le trafic SSH, même sur le port 443. Pour y faire face, vous devez masquer ou canaliser SSH en un élément autorisé par le pare-feu. Voir http://dag.wiee.rs/howto/ssh-http-tunneling/ pour un tutoriel sur cette opération avec proxytunnel .

Gilles, arrête de faire le mal
la source
l'astuce 443 l'a fait! J'ai été surpris que cela fonctionne :) - toute vue sysadmin pourquoi cela semble être le cas avec la plupart des pare-feu?
AK_
@AK_ Parce qu'il est possible pour un pare-feu de distinguer TLS de SSH, il s'agit d'une étape de configuration supplémentaire et d'un coût en performances plus élevé, sans aucun avantage réel pour les connexions sortantes (car tout pourrait être optimisé dans TLS de toute façon).
Gilles, arrête de faire le mal
@Gilles, existe-t-il même des serveurs proxy qui bloquent HTTPS autorisent encore HTTP CONNECT HTTPS?
Pacerier
1
@Pacerier Beaucoup d'entre eux. Ce n’est pas que le proxy bloque HTTPS - un proxy ne bloque pas les connexions qui le contournent - c’est que les connexions directes sont bloquées, mais le proxy permet à CONNECT de n’importe quel trafic pourvu qu’il soit transféré au port 443. Il n’existe aucun moyen réel de filtrer HTTPS. , à court de racine d’injection de confiance et de réécriture de certificat, ce qui est une très mauvaise idée.
Gilles, arrête d'être méchant
Notez que vous pouvez également utiliser netcat-openbsd au lieu de tire-bouchon dans la commande par procuration:ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
Paul Rougieux
1

Vous pouvez utiliser sslh si vous souhaitez exécuter à la fois un serveur HTTPS et un serveur SSHd sur le même port 443.

teknopaul
la source