Ist es möglich, SSH-Anfragen, die über einen bestimmten Port eingehen, an einen anderen Rechner weiterzuleiten?

StackOverflow https://stackoverflow.com/questions/45230

  •  09-06-2019
  •  | 
  •  

Frage

Ich habe ein kleines lokales Netzwerk.Nur eine der Maschinen steht der Außenwelt zur Verfügung (dies ist nicht einfach zu ändern).Ich möchte es so einrichten können, dass SSH-Anfragen, die nicht über den Standardport eingehen, an einen anderen Computer weitergeleitet werden.Ist das möglich?Wenn das so ist, wie?

Oh, und auf all diesen Maschinen läuft entweder Ubuntu oder OS X.

War es hilfreich?

Lösung

Ein anderer Weg wäre die Verwendung von SSH-Tunneling (was auf der Clientseite geschieht).

Sie würden einen SSH-Befehl wie diesen ausführen:

ssh -L 8022:myinsideserver:22 paul@myoutsideserver

Dadurch werden Sie mit der Maschine verbunden, auf die von außen zugegriffen werden kann (myoutsideserver), und über diese SSH-Verbindung wird ein Tunnel zu Port 22 (dem Standard-SSH-Port) auf dem Server erstellt, auf den nur von innen zugegriffen werden kann.

Dann führen Sie einen weiteren SSH-Befehl wie diesen aus (wobei der erste weiterhin verbunden bleibt):

ssh -p 8022 paul@localhost

Diese Verbindung zu Port 8022 auf Ihrem lokalen Host wird dann über die erste SSH-Verbindung getunnelt, die Sie über myinsideserver führt.

Möglicherweise müssen Sie auf myoutsideserver etwas tun, um die Weiterleitung des SSH-Ports zu ermöglichen.Ich überprüfe das jetzt noch einmal.

Bearbeiten

Hmmm.Die SSH-Manpage sagt Folgendes:**Nur der Superuser kann privilegierte Ports weiterleiten.**

Das bedeutet für mich, dass die erste SSH-Verbindung eine Root-Verbindung sein muss.Vielleicht kann das jemand anders klären.

Es sieht so aus, als wären keine Superuser-Berechtigungen erforderlich, solange der weitergeleitete Port vorhanden ist (in diesem Fall 8022) ist kein privilegierter Port (wie 22).Danke für die Klarstellung Mike Stone.

Andere Tipps

(In diesem Beispiel gehe ich davon aus, dass Port 2222 zu Ihrem internen Host geht.$externalip und $internalip sind die IP-Adressen bzw. Hostnamen der sichtbaren bzw. internen Maschine.)

Je nachdem, wie dauerhaft das Proxying sein soll, haben Sie mehrere Möglichkeiten:

  • Eine Art TCP-Proxy.Unter Linux besteht die Grundidee darin Vor Das eingehende Paket wird verarbeitet, Sie möchten seinen Bestimmungsort ändern– d.h.Ziel-NAT vorab weiterleiten:

    iptables -t nat -A PREROUTING -p tcp -i eth0 -d $externalip --dport 2222 --sport 1024:65535 -j DNAT --to $internalip:22

  • Verwenden von SSH zum Einrichten einer temporären Portweiterleitung.Von hier aus haben Sie wieder zwei Möglichkeiten:

    • Transparenter Proxy, bei dem der Client denkt, dass Ihr sichtbarer Host (auf Port 2222) nur ein normaler SSH-Server ist, und nicht erkennt, dass er durchläuft.Sie verlieren zwar etwas feingranulare Kontrolle, gewinnen aber an Komfort (insbesondere, wenn Sie SSH verwenden möchten, um VNC oder X11 bis zum inneren Host weiterzuleiten).

      • Von der internen Maschine: ssh -g -R 2222:localhost:22 $externalip
      • Dann von der Außenwelt: ssh -p 2222 $externalip

      Beachten Sie, dass sich die „internen“ und „externen“ Maschinen nicht im selben LAN befinden müssen.Auf diese Weise können Sie die Portweiterleitung rund um die Welt durchführen.

    • Erzwingen Sie zunächst die Anmeldung am externen Computer.Dabei handelt es sich um echtes „Weiterleiten“, nicht um „Proxying“.aber die Grundidee ist folgende:Sie zwingen die Leute dazu, sich bei der externen Maschine anzumelden (damit Sie kontrollieren, wer sich wann anmelden kann, und Sie erhalten Protokolle der Aktivität), und von dort aus können sie per SSH nach innen gehen.Es klingt wie eine lästige Pflicht, aber wenn Sie Richten Sie auf dem externen Rechner einfache Shell-Skripte mit den Namen Ihrer internen Hosts ein, gepaart mit passwortlosen SSH-Schlüsselpaaren dann ist es für einen Benutzer sehr einfach, sich anzumelden.Also:

      • Auf dem externen Rechner erstellen Sie ein einfaches Skript, /usr/local/bin/internalhost was einfach läuft ssh $internalip
      • Von außen gesehen tun Benutzer Folgendes: ssh $externalip internalhost und sobald sie sich am ersten Computer anmelden, werden sie sofort an den internen weitergeleitet.

      Ein weiterer Vorteil dieses Ansatzes besteht darin, dass Benutzer keine Probleme mit der Schlüsselverwaltung haben, da die Ausführung von zwei SSH-Diensten auf einer IP-Adresse den SSH-Client verärgert.

Zu Ihrer Information: Wenn Sie eine SSH-Verbindung zu einem Server herstellen möchten und sich keine Gedanken über Schlüssel machen möchten, tun Sie dies

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

Ich habe in meiner Shell einen Alias ​​namens „nossh“, also kann ich es einfach tun nossh somehost und es werden alle wichtigen Fehler ignoriert.Beachten Sie jedoch, dass Sie dabei Sicherheitsinformationen ignorieren, sodass theoretisch ein Risiko besteht.

Viele dieser Informationen stammen aus einem Vortrag, den ich im Barcamp Bangkok über ausgefallene SSH-Tricks gehalten habe.Du kannst sehen meine Folien, aber ich empfehle das Textversion da die S5-Folien etwas fehlerhaft sind.Schauen Sie sich den Abschnitt „Alles weiterleiten“ an:Weitere Informationen finden Sie unter „Einfache Portweiterleitung“.Außerdem gibt es Informationen zum Erstellen eines SOCKS5-Proxys mit OpenSSH.Ja, das können Sie tun.OpenSSH ist so großartig.

(Wenn Sie häufig in das interne Netzwerk eindringen, sollten Sie darüber nachdenken, ein VPN einzurichten.Es klingt beängstigend, aber OpenVPN ist recht einfach und läuft auf allen Betriebssystemen.Ich würde sagen, dass es nur für SSH übertrieben ist;aber sobald Sie mit der Portweiterleitung über Ihre Portweiterleitungen beginnen, um VNC, HTTP oder andere Dinge in Gang zu bringen;oder wenn Sie sich um viele interne Hosts kümmern müssen, kann es einfacher und wartbarer sein.)

@Mark Biek

Das wollte ich schon sagen, aber du bist mir zuvorgekommen!Wie auch immer, ich wollte nur hinzufügen, dass es auch die Option -R gibt:

ssh -R 8022:myinsideserver:22 paul@myoutsideserver

Der Unterschied besteht darin, mit welcher Maschine Sie eine Verbindung herstellen.Mein Chef hat mir diesen Trick vor nicht allzu langer Zeit gezeigt, und es ist auf jeden Fall sehr schön zu wissen ...Wir befanden uns hinter einer Firewall und mussten externen Zugriff auf eine Maschine gewähren ...Er hat es umgangen, indem er ssh -R auf eine andere Maschine übertragen hat, auf die zugegriffen werden konnte ...dann wurden Verbindungen zu dieser Maschine an die Maschine hinter der Firewall weitergeleitet, Sie müssen also -R oder -L verwenden, je nachdem, auf welcher Maschine Sie sich befinden und zu welcher Sie eine SSH-Verbindung herstellen.

Außerdem bin ich mir ziemlich sicher, dass es für Sie kein Problem ist, einen regulären Benutzer zu verwenden, solange der Port, den Sie weiterleiten (in diesem Fall der 8022-Port), nicht unter dem eingeschränkten Bereich liegt (was meiner Meinung nach 1024 ist, aber ich könnte mich irren). , weil das die „reservierten“ Ports sind.Es spielt keine Rolle, dass Sie es an einen „eingeschränkten“ Port weiterleiten, da dieser Port nicht geöffnet ist (an die Maschine wird lediglich Datenverkehr durch den Tunnel gesendet, sie kennt den Tunnel nicht), der 8022-Port ist IS offen sein und daher als solche eingeschränkt sein.

BEARBEITEN:Denken Sie daran, dass der Tunnel nur so lange geöffnet ist, wie das ursprüngliche SSH geöffnet bleibt. Wenn also eine Zeitüberschreitung auftritt oder Sie ihn verlassen, wird der Tunnel geschlossen.

Hierzu können Sie Port-Weiterleitung nutzen.Schauen Sie hier:

http://portforward.com/help/portforwarding.htm

Auf dieser Seite finden Sie Anweisungen zum Einrichten Ihres Routers für die Portweiterleitungsanforderung:

http://www.portforward.com/english/routers/port_forwarding/routerindex.htm

In Ubuntu können Sie installieren Feuerstarter und dann verwenden Weiterleitungsdienst Funktion zum Weiterleiten des SSH-Verkehrs von einem nicht standardmäßigen Port auf Ihrem Computer mit externem Zugriff auf Port 22 auf dem Computer in Ihrem Netzwerk.

Unter OS X können Sie die bearbeiten /etc/nat/natd.plist Datei, um die Portweiterleitung zu aktivieren.

Ohne mit Firewall-Regeln herumzuspielen, können Sie eine ~/.ssh/config-Datei einrichten.

Angenommen, 10.1.1.1 ist das „Gateway“-System und 10.1.1.2 ist das „Client“-System.

Host gateway
  Hostname 10.1.1.1 
  LocalForward 8022 10.1.1.2:22 

Host client
  Hostname localhost
  Port 8022

Sie können eine SSH-Verbindung zum „Gateway“ öffnen über:

ssh gateway

Öffnen Sie in einem anderen Terminal eine Verbindung zum Client.

ssh client
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top