Wie verwende ich ssh über http oder https?

42

Ich habe einen Linux Fedora21-Client-Laptop hinter einer Unternehmens-Firewall (die über http- und https-Ports aber nicht über SSH 22 verfügt) und ich habe einen Linux Fedora21-Server zu Hause hinter meinem eigenen Router. Das Surfen mit https funktioniert, wenn ich die öffentliche IP-Adresse meines Heimservers angebe (weil ich meinen Heimrouter konfiguriert habe)

Ist es möglich, über den http / s-Port eine SSH-Verbindung (Remote Shell) zu meinem Heimserver herzustellen?

Ich habe ein Werkzeug namens gesehen corkscrew. würde das helfen?

opensshdund httpdlaufen auf dem Heimserver. Was würde sonst noch Konfiguration brauchen?

MMM
quelle
1
Stellen Sie Ihren SSHD zu Hause auf, um Port 443 abzuhören. Deaktivieren Sie jedoch Port 443 auf Ihrem Home-httpd.
Taliezin
Das kann ich aber nicht so recht. Ich brauche auch httpd (s) für git push. Also muss ich einen httpd haben, der auf 443 hört.
MMM
Versuchen Sie httptunnel - yum installieren httptunnel http://www.nocrew.org/software/httptunnel.html , oder wie Sie in Ihrer Frage erwähnt: Korkenzieher.
Taliezin
In beiden Fällen würde sshd auf 22 und httpd auf 80/443 und httptunnel hören oder der Korkenzieher würde den von httpd empfangenen Datenverkehr an sshd weiterleiten.
MMM
Ja. Die Ports Ihrer Dienste müssen nicht geändert werden.
Taliezin

Antworten:

42

Was möglich ist, hängt davon ab, was die Firewall zulässt.

Wenn die Firewall beliebigen Datenverkehr auf Port 443 zulässt

Einige Firewalls nehmen den einfachen Ausweg und lassen alles auf Port 443 zu. Wenn dies der Fall ist, können Sie Ihren Heimserver am einfachsten erreichen, indem Sie ihn dazu bringen, SSH-Verbindungen auf Port 443 abzuhören. Wenn Ihr Computer direkt mit dem Internet verbunden ist, einfach fügen Sie hinzu Port 443, /etc/ssh/sshd_configoder /etc/sshd_configgerade unter der Linie, die sagt Port 22. Wenn sich Ihr Computer hinter einem Router / einer Firewall befindet, der / die eingehende Verbindungen umleitet, leiten Sie eingehende Verbindungen an Port 443 mit so etwas wie dem Port 22 Ihres Servers um

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

Wo wan0ist die WAN-Schnittstelle auf Ihrem Router und 10.1.2.3 ist die IP-Adresse Ihres Servers in Ihrem Heimnetzwerk.

Wenn Sie Ihrem Heimserver erlauben möchten, sowohl HTTPS-Verbindungen als auch SSH-Verbindungen an Port 443 abzuhören, können Sie leicht zwischen SSH- und HTTPS-Verkehr unterscheiden (in SSH spricht der Server zuerst, in HTTP und HTTPS dagegen der Client zuerst). Anleitungen zum Einstellen finden Sie unter http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html und http://wrouesnel.github.io/articles/Setting%20up%20sshttp/ up mit sshttp , und auch Haben Sie SSH auf Port 80 oder 443 während Webserver (nginx) läuft auf diesen Ports

Wenn Sie einen Web-Proxy haben, der CONNECT-Tunneling ermöglicht

Einige Firewalls blockieren alle ausgehenden Verbindungen, ermöglichen jedoch das Surfen im Internet über einen Proxy, mit dem die HTTP-CONNECT Methode effektiv ein Loch in die Firewall stechen kann. Die CONNECTMethode ist möglicherweise auf bestimmte Ports beschränkt, daher müssen Sie dies möglicherweise wie oben beschrieben mit der Überwachung von Port 443 kombinieren.

Um SSH über den Proxy zu aktivieren, können Sie ein Tool wie Korkenzieher verwenden . Fügen Sie in Ihrem ~/.ssh/configeine ProxyCommandZeile wie die folgende hinzu, wenn Ihr Webproxy wie folgt lautet http://web-proxy.work.example.com:3128:

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

SSH in HTTP (S) einbinden

Einige Firewalls lassen selbst auf Port 443 keinen SSH-Verkehr zu. Um dies zu bewältigen, müssen Sie SSH tarnen oder in etwas tunneln, das die Firewall durchlässt. Siehe http://dag.wiee.rs/howto/ssh-http-tunneling/ für ein Tutorial dies mit auf dem Tun proxytunnel .

Gilles 'SO - hör auf böse zu sein'
quelle
der 443 trick hat es geschafft! Ich war überrascht, dass dies funktioniert :) - Gibt es einen Systemadministrator, warum dies bei den meisten Firewalls der Fall zu sein scheint?
AK_
@AK_ Da eine Firewall zwar TLS von SSH unterscheiden kann, dies jedoch einen zusätzlichen Konfigurationsschritt darstellt und mehr Leistung kostet, ist dies bei ausgehenden Verbindungen kein wirklicher Vorteil (da in TLS ohnehin alles getunnelt werden könnte).
Gilles 'SO - hör auf böse zu sein'
@ Gilles, Gibt es überhaupt Proxy-Server, die HTTPS blockieren und HTTP CONNECT HTTPS zulassen?
Pacerier
1
@ Pacerier Viele von ihnen. Es ist nicht so, dass der Proxy HTTPS blockiert - ein Proxy blockiert keine Verbindungen, die den Proxy umgehen - es ist so, dass direkte Verbindungen blockiert werden, aber der Proxy erlaubt CONNECT mit jeglichem Verkehr, vorausgesetzt er ist an Port 443. Es gibt sowieso keine echte Möglichkeit, HTTPS zu filtern , kurz vor der Einführung des Vertrauens und dem Umschreiben von Zertifikaten, eine sehr schlechte Idee.
Gilles 'SO - hör auf böse zu sein'
Beachten Sie, dass Sie im Proxy-Befehl auch netcat-openbsd anstelle von corkscrew verwenden können:ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
Paul Rougieux,