webentwicklung-frage-antwort-db.com.de

Tunnel über HTTPS

An meinem Arbeitsplatz hat sich der Traffic Blocker/die Firewall zunehmend verschlechtert. Ich kann über Port 22 keine Verbindung zu meinem Heimcomputer herstellen, und der Mangel an SSH-Zugriff macht mich traurig. Früher war es mir möglich, SSH zu verwenden, indem ich es auf Port 5050 verschob, aber ich glaube, einige neuere Filter behandeln diesen Datenverkehr jetzt als Sofortnachrichten und leiten ihn möglicherweise über einen anderen Proxy weiter. Das ist meine beste Vermutung. In jedem Fall werden meine SSH-Verbindungen jetzt beendet, bevor ich mich anmelden kann.

In diesen Tagen habe ich Ajaxterm über HTTPS verwendet, da Port 443 immer noch nicht belastet ist, aber dies ist alles andere als ideal. (Scheiße Terminal-Emulation, fehlende Portweiterleitung, mein Browser verliert Speicher mit einer erstaunlichen Geschwindigkeit ...) Ich habe versucht, mod_proxy_connect über mod_ssl einzurichten, mit der Idee, dass ich eine CONNECT localhost:22 HTTP/1.1-Anfrage über HTTPS senden könnte, und dann würde ich alles bereit sein. Leider scheint dies nicht zu funktionieren; Die HTTPS-Verbindung funktioniert, bis ich meine Anfrage abgeschlossen habe. dann bricht SSL aus. Es sieht so aus, als ob mod_proxy_connect die gesamte Verbindung übernimmt, anstatt die Weiterleitung durch mod_ssl fortzusetzen, wodurch der HTTPS-Client verwirrt wird.

Gibt es eine Möglichkeit, dies zum Laufen zu bringen? Ich möchte dies aus mehreren Gründen nicht über normales HTTP tun:

  • Einen großen, fetten, offenen Proxy so zu lassen, stinkt einfach
  • Ein großer fetter offener Proxy ist auch nicht gut über HTTPS, aber wenn eine Authentifizierung erforderlich ist, fühlt es sich für mich gut an
  • HTTP geht über einen Proxy - ich bin nicht auch besorgt darüber, dass mein Datenverkehr beschnüffelt wird, da ssh den Tunnel als "Klartext" durchläuft - aber es ist viel wahrscheinlicher, dass er entstellt wird als HTTPS, die grundsätzlich nicht vertreten werden können

Bedarf:

  • Muss über Port 443 arbeiten, ohne anderen HTTPS-Verkehr zu stören (d. H. Ich kann den ssh-Server nicht einfach auf Port 443 stellen, da ich keine Seiten mehr über HTTPS liefern kann)
  • Ich habe oder kann einen einfachen Port Forwarder Client schreiben, der unter Windows (oder Cygwin) läuft

Bearbeiten

DAG: Auf das Tunneln von SSH über HTTP (S) wurde hingewiesen, aber es hilft nicht: Am Ende des Artikels wird Bug 29744 - CONNECT funktioniert nicht über eine vorhandene SSL-Verbindung Verhindert das Tunneln über HTTPS, genau das Problem, auf das ich gestoßen bin. An dieser Stelle schaue ich wahrscheinlich auf ein CGI-Skript, aber ich möchte dies nicht als Voraussetzung angeben, wenn bessere Lösungen verfügbar sind.

25
ephemient

Finden Sie heraus, warum das Unternehmen eine so restriktive Politik verfolgt. Das könnte einen guten Grund haben.

Wenn Sie weiterhin feststellen, dass Sie die Richtlinie umgehen möchten, können Sie einen kleinen Proxy schreiben, der Ihren Server an Port 443 überwacht und den Datenverkehr je nach Anforderung entweder an Ihren Webserver oder an den SSH-Dämon weiterleitet. Es gibt jedoch zwei Fänge.

  1. Um festzustellen, ob es sich um eine HTTPS-Anforderung oder eine SSH-Anforderung handelt, müssen Sie versuchen, einige Daten mit einer (kleinen) Zeitüberschreitung zu lesen. Dies liegt daran, dass TLS/SSL-Handshakes damit beginnen, dass der Client einige Daten sendet, während der SSH-Handshake mit dem Server beginnt einige Daten senden. Das Timeout muss groß genug sein, um Verzögerungen bei der Übermittlung der anfänglichen Daten vom Client im TLS/SSL-Handshake zu verursachen. Dadurch wird der Aufbau von SSH-Verbindungen verlangsamt.

  2. Wenn der HTTP-Proxy in Ihrem Unternehmen intelligent ist, wird der erwartete TLS/SSL-Handshake tatsächlich abgehört, wenn Sie CONNECT an Port 443 senden, und wenn festgestellt wird, dass es sich nicht um einen TLS/SSL-Handshake handelt, wird der SSH möglicherweise beendet Verbindungsversuch. Um dies zu beheben, können Sie den SSH-Dämon in einen TLS/SSL-Tunnel einbinden (z. B. stunnel). Sie müssen die Anforderungen jedoch anhand der TLS/SSL-Version in Ihrer Client-Anforderung unterscheiden, um zu bestimmen, ob TLS/SSL weitergeleitet werden soll. SSL-Verbindung zum Webserver oder zum TLS/SSL-getunnelten SSH-Dämon.

7
Alexander

Sie sollten iptables verwenden können, um den SSH-Verkehr von Ihren Arbeitsmaschinen an SSH weiterzuleiten, während alle anderen Maschinen, die an Ihren Heimserver an Port 443 angeschlossen sind, den Apache-Server erhalten.

Versuchen Sie eine Regel wie diese:

iptables -t nat -A PREROUTING -p tcp -s 111.111.111.111 --dport 433 -j REDIRECT --to-port 22

Wobei 111.111.111.111 die IP-Adresse Ihres Bürocomputers ist.

Das alles setzt voraus, dass Sie Linux> = 2.4 verwenden, was Sie jetzt sein sollten. Es ist seit fast einem Jahrzehnt aus.

Die Dokumentation für iptables finden Sie unter http://www.netfilter.org .

6
Brian

Richten Sie den OpenVPN 2.1-Server zu Hause ein, verwenden Sie Port 443 (wenn Sie zu Hause einen HTTPS-Dienst an Port 443 einrichten, lösen Sie die Port-Share-Option von OpenVPN aus, um sowohl OpenVPN- als auch HTTPS-Transaktionen an Port 443 abzuwickeln. Diese Funktion ist nur für Nicht-HTTPS-Benutzer verfügbar. Windows OS)

Richten Sie dann Ihren OpenVPN-Client auf Ihrem Laptop im Road-Warrior-Modus ein, um zu Hause auf den OpenVPN-Server zuzugreifen. Sie können in einem sicheren VPN-Netzwerk, das Sie mit OpenVPN erstellt haben, zu Hause oder an einem beliebigen Ort anrufen. Es ist nicht mehr erforderlich, SSH für diesen Zweck zu verwenden.

6
meh

Könnten Sie einen Mittelsmann aufstellen?

Führen Sie eine kleine/kostenlose/kostengünstige Instanz in der Cloud aus, die auf SSH wartet, und tunneln Sie dann diese Cloud-Instanz zu Ihrer Home-Box auf Ihrem bevorzugten Port - 22 oder was auch immer.

Ich bin mir sicher, dass es eine gewisse Latenzzeit hinzufügt, aber es löst das Problem, dass das ursprüngliche Home-Setup intakt bleibt.

2
11855589966

Wie wäre es mit 2 IP-Adressen auf Ihrem Computer?

Binden Sie Apache/https auf einer IP_1: 443 und Ihre SSHD auf der anderen IP_2: 443?

2
Huibert Gill
1
jon

Ich denke, Sie müssen einen Port finden, den Sie derzeit nicht verwenden und den Sie aussteigen können, und das abhören. 443 ist der offensichtliche Kandidat, aber Sie sagen, das ist nicht möglich. Was ist mit Mail (25, 110, 143), Telnet (23), FTP (21), DNS (53) oder sogar Whois (43)?

1
Harley Holcombe

Es tut mir wirklich leid, dass ich hier der Anwalt des Teufels bin, aber wenn sie Häfen bei Ihrer Arbeit blockieren, ist es wahrscheinlich, dass sie nicht wollen, dass Menschen die Sicherheit verletzen.

Wenn Sie nun die Erlaubnis erhalten, einen Tunnel von Ihrem Chef zu öffnen, ist das in Ordnung, aber wenn etwas passiert, ALLES, und sie herausfinden, dass Sie einen Tunnel haben, kann ich Ihnen fast versichern, dass Sie der Sündenbock werden. Wenn ich Sie wäre, würde ich bei der Arbeit keine Tunnel öffnen, wenn sie Firewalls dagegen einrichten.

1
Robert Gould

Proxy-Tunnel kann Ihre Antwort sein

http://proxytunnel.sourceforge.net/

nehmen wir an, mein SSH-Server ist Host.domain.tld und mein Werksproxyserver ist 10.2.4.37

Ich würde dies zu meiner lokalen ssh-Konfiguration hinzufügen

Host host.domain.tld ProxyCommand/usr/local/bin/proxytunnel -q -p 10.2.4.37:3128 -d% h:% p ProtocolKeepAlives 30

1
Zoredache

Da Apache keinerlei Probleme mit CONNECT hat, wenn kein SSL beteiligt ist, schalte ich die SSL-Funktionen aus und verwende stunnel, um eine https-Version meiner Site bereitzustellen. Dies erfordert keine Neukompilierung und ermöglicht es Ihrer Site, https normal zu bedienen. Bisher der sauberste Workaround, den ich kenne.

Weitere Informationen finden Sie unter http://chm.duquesne.free.fr/blog/?p=281 .

1
user48678

Ich habe es geschafft, die Firewall meines Unternehmens mit dem folgenden Design über AjaxTerm zu umgehen, es funktioniert für mich.

PC im Firmennetzwerk -> Firmenproxy über https -> INTERNET -> Mein Apache-Reverseproxyserver zu Hause mit SSL + .htpasswd-Schutz -> AjaxTerm-Server (von hier aus kann ich SSH auf alle anderen Server ausführen).

Immer noch nicht die perfekte Welt ... wäre gut, wenn ich über HTTPS auf mein Heimnetzwerk tunneln könnte.

0
Vincent P

Muss über Port 443 arbeiten, ohne anderen HTTPS-Verkehr zu stören (d. H. Ich kann den ssh-Server nicht einfach auf Port 443 stellen, da ich keine Seiten mehr über HTTPS liefern kann)

Ist es möglich, Ihren HTTPS-Server an einen anderen Port zu binden? Je nachdem, wofür es verwendet wird, können Sie möglicherweise sogar das Problem umgehen, dass Sie nicht direkt von der Arbeit aus auf es zugreifen können, indem Sie einfach SSHing home ausführen und dann lynx von dort aus verwenden.

0
Cebjyre

Dann probieren Sie den Proxifier aus (- er unterstützt HTTP Proxy Server)!

http://www.proxifier.com/documentation/intro.htm

0
jon