So wie ich das verstehe, lehnen Firewalls (unter der Annahme von Standardeinstellungen) den gesamten eingehenden Datenverkehr ab, für den zuvor kein entsprechender ausgehender Datenverkehr vorhanden war.
Basierend auf dem Umkehren einer SSH- Verbindung und dem einfachen SSH-Tunneling kann das umgekehrte SSH-Tunneling verwendet werden, um lästige Firewall-Einschränkungen zu umgehen.
Ich möchte Shell-Befehle auf einer entfernten Maschine ausführen. Der Remotecomputer verfügt über eine eigene Firewall und befindet sich hinter einer zusätzlichen Firewall (Router). Es hat eine IP-Adresse wie 192.168.1.126 (oder ähnliches). Ich bin nicht hinter einer Firewall und kenne die IP-Adresse des Remotecomputers aus dem Internet (nicht die Adresse 192.168.1.126). Außerdem kann ich jemanden bitten, zuerst ssh (something)
als root auf dem Remote-Computer auszuführen .
Kann mir jemand Schritt für Schritt erklären, wie das umgekehrte SSH-Tunneln funktioniert, um die Firewalls zu umgehen (die Firewalls lokaler und entfernter Computer und die zusätzliche Firewall zwischen ihnen)?
Was ist die Rolle des Schalters ( -R
, -f
, -L
, -N
)?
Antworten:
Ich liebe es, solche Dinge durch Visualisierung zu erklären. :-)
Stellen Sie sich Ihre SSH-Verbindungen als Röhren vor. Große Röhren. Normalerweise greifen Sie durch diese Röhren, um eine Shell auf einem Remotecomputer auszuführen. Die Shell läuft in einem virtuellen Terminal (tty). Aber du kennst diesen Teil schon.
Stellen Sie sich Ihren Tunnel als eine Röhre in einer Röhre vor. Sie haben immer noch die große SSH-Verbindung, aber mit der Option -L oder -R können Sie eine kleinere Röhre darin einrichten.
Jede Röhre hat einen Anfang und ein Ende. Die große Röhre, Ihre SSH-Verbindung, hat mit Ihrem SSH-Client begonnen und endet auf dem SSH-Server, mit dem Sie verbunden sind. Alle kleineren Röhren haben dieselben Endpunkte, mit der Ausnahme, dass die Rolle von "Start" oder "Ende" davon abhängt, ob Sie sie verwendet
-L
oder-R
(bzw.) erstellt haben.(Das haben Sie nicht gesagt, aber ich gehe davon aus, dass der "entfernte" Computer, den Sie erwähnt haben, der sich hinter der Firewall befindet, über Network Address Translation (NAT) auf das Internet zugreifen kann. Dies ist also ziemlich wichtig Bitte korrigieren Sie diese Annahme, wenn sie falsch ist.)
Wenn Sie einen Tunnel erstellen, geben Sie eine Adresse und einen Port an, auf die er antwortet, sowie eine Adresse und einen Port, an die er übermittelt wird. Die
-L
Option weist den Tunnel an, auf der lokalen Seite des Tunnels (dem Host, auf dem Ihr Client ausgeführt wird) zu antworten. Die-R
Option weist den Tunnel an, auf der Remote-Seite (dem SSH-Server) zu antworten.Also ... Um aus dem Internet in eine Maschine hinter einer Firewall SSH zu können, muss die betreffende Maschine eine SSH-Verbindung zur Außenwelt herstellen und einen
-R
Tunnel einschließen, dessen "Eintrittspunkt" die "entfernte" Seite von ist seine Verbindung.Von den beiden oben gezeigten Modellen möchten Sie das rechts.
Vom Firewall-Host:
Dies weist Ihren Client an, einen Tunnel mit einem
-R
Emote-Einstiegspunkt einzurichten. Alles, was an Port 22222 am anderen Ende des Tunnels angeschlossen ist, erreicht tatsächlich "localhost port 22", wobei "localhost" aus der Perspektive des Ausgangspunkts des Tunnels (dh Ihres ssh-Clients) ist.Die anderen Optionen sind:
-f
Weist ssh an, sich nach der Authentifizierung im Hintergrund zu bewegen, damit Sie nicht auf dem Remote-Server herumstehen müssen, um den Tunnel am Leben zu erhalten.-N
gibt an, dass Sie eine SSH-Verbindung benötigen, jedoch keine Remotebefehle ausführen möchten. Wenn Sie nur einen Tunnel erstellen, sparen Sie durch das Einschließen dieser Option Ressourcen.-T
Deaktiviert die Pseudo-Tty-Zuordnung. Dies ist angemessen, da Sie nicht versuchen, eine interaktive Shell zu erstellen.Es wird eine Passwortabfrage geben, es sei denn, Sie haben DSA- oder RSA-Schlüssel für eine passwortlose Anmeldung eingerichtet.
Es wird DRINGEND empfohlen, ein Wegwerfkonto (nicht Ihr eigenes Login) zu verwenden, das Sie nur für diesen Tunnel / Kunden / Server eingerichtet haben.
Stellen Sie nun von Ihrer Shell aus über den Tunnel eine Verbindung zum Firewall-Host her:
Sie erhalten eine Host-Schlüssel-Herausforderung, da Sie diesen Host wahrscheinlich noch nie zuvor getroffen haben. Dann erhalten Sie eine Passwortabfrage für das
username
Konto (es sei denn, Sie haben Schlüssel für die passwortlose Anmeldung eingerichtet).Wenn Sie regelmäßig auf diesen Host zugreifen, können Sie den Zugriff auch vereinfachen, indem Sie Ihrer
~/.ssh/config
Datei ein paar Zeilen hinzufügen :Anpassen
remotehostname
und anpassenremoteusername
. Dasremoteusername
Feld muss mit Ihrem Benutzernamen auf dem Remote-Server übereinstimmen. Esremotehostname
kann sich jedoch auch um einen beliebigen Hostnamen handeln, der zu Ihnen passt. Es muss nichts Auflösbares enthalten.(Um den Reverse-Endpunkt auf einer nicht lokalen Host- IP verfügbar zu machen , lesen Sie diesen Beitrag. )
quelle
Ich habe ein paar Skizzen gezeichnet
Die Maschine, auf der der Befehl ssh tunnel eingegeben wird, heißt »Ihr Host« .
Einführung
lokal:
-L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.
ssh -L sourcePort:forwardToHost:onPort connectToHost
bedeutet: verbinde dich mit ssh zuconnectToHost
und leite alle Verbindungsversuche an den lokalensourcePort
PortonPort
des aufgerufenen Rechners weiterforwardToHost
, der vomconnectToHost
Rechner aus erreichbar ist.Fernbedienung:
-R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.
ssh -R sourcePort:forwardToHost:onPort connectToHost
bedeutet: verbinde dich mit ssh zuconnectToHost
und leite alle Verbindungsversuche an den entferntensourcePort
PortonPort
des angerufenen Rechners weiterforwardToHost
, der von deinem lokalen Rechner aus erreichbar ist.Zusätzliche Optionen
-f
Weist ssh an, sich nach der Authentifizierung im Hintergrund zu bewegen, damit Sie nicht auf dem Remote-Server herumstehen müssen, um den Tunnel am Leben zu erhalten.-N
gibt an, dass Sie eine SSH-Verbindung benötigen, jedoch keine Remotebefehle ausführen möchten. Wenn Sie nur einen Tunnel erstellen, sparen Sie durch das Einschließen dieser Option Ressourcen.-T
Deaktiviert die Pseudo-Tty-Zuordnung. Dies ist angemessen, da Sie nicht versuchen, eine interaktive Shell zu erstellen.Dein Beispiel
Das dritte Bild zeigt diesen Tunnel. Aber der blaue Computer mit dem Namen »Ihr Host« repräsentiert den Computer, auf dem jemand den SSH-Tunnel startet, in diesem Fall die Firewall-Maschine.
Bitten Sie daher jemanden , eine SSH-Tunnelverbindung zu Ihrem Computer herzustellen. Der Befehl sollte im Grunde so aussehen
Jetzt ist der Tunnel geöffnet. Sie können jetzt mit dem Befehl über ssh eine Verbindung zum Firewall-Computer über den Tunnel herstellen
Diese Verbindung wird mit Ihrer eigenen
localhost
(Ihrer Maschine) über den Port hergestellt12345
, der Port12345
wird jedoch über den Tunnel an den Port 22 des lokalen Hosts des Firewall-Computers (dh des Firewall-Computers selbst) weitergeleitet.quelle
Das SSH-Tunneln funktioniert unter Verwendung der bereits eingerichteten SSH-Verbindung zum Senden von zusätzlichem Datenverkehr.
Wenn Sie eine Verbindung zu einem Remote-Server herstellen, haben Sie normalerweise nur 1 Kanal für die normale Benutzerinteraktion (oder 3 Kanäle, wenn Sie STDIN / STDOUT / STDERR separat betrachten). Der lokale oder Remote-SSH-Prozess kann jederzeit zusätzliche Kanäle für die vorhandene Verbindung öffnen. Diese Kanäle senden / empfangen dann den Tunnelverkehr. Beim Senden oder Empfangen von Datenverkehr sagt der ssh-Prozess einfach "Dieser Datenverkehr ist für die Kanal-Fobar".
Es funktioniert im Wesentlichen so:
127.0.0.1
, kann aber geändert werden).Dieser Vorgang ist sowohl für das Vorwärts- als auch für das Rückwärts-Tunneln identisch (tauschen Sie einfach die Wörter 'local' und 'remote' in der obigen Prozedur aus). Jede Seite kann den Tunnel starten. Es muss nicht einmal sein, wenn Sie ssh zum ersten Mal starten. Sie können Tunnel öffnen, während ssh bereits ausgeführt wird (siehe
ESCAPE CHARACTERS
speziell~C
).Für die Rolle der
-R
,-f
,-L
, und-N
, sollten Sie wirklich nur den Mann Seite konsultieren, es gibt Ihnen die bestmögliche Erklärung. Aber ich werde erwähnen-R
und-L
.-R
Weist den Remote-SSH an, auf Verbindungen zu warten, und dass der lokale SSH eine Verbindung zum realen Ziel herstellen soll.-L
Weist den lokalen SSH an, auf Verbindungen zu warten, und dieser Remote-SSH sollte eine Verbindung zum realen Ziel herstellen.Beachten Sie, dass dies eine sehr grobe Beschreibung ist, aber Sie genug Informationen erhalten sollten, um zu wissen, was los ist
quelle
Dies wird im SSH-Handbuch erläutert, insbesondere die Unterschiede zwischen
-L
(lokal) und-R
(remote).-L
Im folgenden Beispiel wird eine IRC-Sitzung vom Clientcomputer
127.0.0.1
(localhost
) über Port 1234 zum Remoteserver getunneltserver.example.com
:Hinweis: Die
-f
Option backgrounds ssh und der Befehl remote werdensleep 10
angegeben, um den zu tunnelnden Dienst für einen bestimmten Zeitraum zu starten.Beispiel:
-N
Nachdem Sie eine Verbindung hergestellt haben, bleiben Sie einfach hängen (es wird keine Shell-Eingabeaufforderung angezeigt).-L 22000
Die Verbindung wird ihren Ursprung auf Port 22000 Ihrer persönlichen, L Ocal Maschinelocalhost:11000
-remote.server.com
wird sicherstellen, dass das andere Ende des Tunnelslocalhost
, Port ist11000
Quelle: Eine illustrierte Anleitung, Tutorial, How-to, zum SSH-Tunneling .
-R
Beispiel:
-N
Nachdem Sie eine Verbindung hergestellt haben, bleiben Sie einfach hängen (es wird keine Shell-Eingabeaufforderung angezeigt).-R
22000 Die Verbindung auf Port 22000 des Ursprung wird R emote Computers (in diesem Fall remote.server.com)localhost:11000
Ihr persönlicher, lokaler Computer stellt sicher, dass das andere Ende des Tunnels derlocalhost
Port ist11000
Quelle: Eine illustrierte Anleitung, Tutorial, How-to, zum SSH-Tunneling .
quelle