Der Unterschied in einer Tabelle
| Jump-Host | Bastion-Host | |
|---|---|---|
| Was der Begriff beschreibt | Eine Rolle: ein Server, über den Sie gehen | Eine Maschine, die nur für diese Rolle gebaut ist |
| Wo er steht | Überall: ein Entwicklungsrechner, eine Admin-VM, ein anderer Server | Am Rand, erreichbar aus dem Internet oder aus dem Büro |
| Was sonst darauf läuft | Oft weitere Dienste | Nichts außer SSH |
| Wer sich anmelden darf | Jeder mit einem Konto | Namentliche Benutzer, oft nur mit Weiterleitung und ohne Shell |
| Private Server | Meist auch auf anderen Wegen erreichbar | Akzeptieren SSH nur vom Bastion |
| Protokolle | Was der Server eben aufbewahrt | Jede Verbindung protokolliert, Protokolle außerhalb der Maschine |
Die Frage ist also nicht, welchen von beiden Sie wählen. Ein Bastion ist ein Jump-Host, der zur einzigen Tür gemacht und entsprechend abgesichert wurde. Weitere Namen für dasselbe sind Jump-Server, Jump-Box und SSH-Gateway.
Wie SSH durch beide hindurchgeht
Auf Ihrer Seite sieht die Verbindung in beiden Fällen gleich aus. Es gibt zwei gute Wege und einen, den Sie meiden sollten:
# ProxyJump, OpenSSH 7.3 and later
ssh -J user@bastion user@10.0.0.5
# ProxyCommand with -W, the older equivalent
ssh -o ProxyCommand="ssh -W %h:%p user@bastion" user@10.0.0.5
# Two separate logins: avoid
ssh -A user@bastion
ssh user@10.0.0.5
Bei den ersten beiden öffnet der Jump-Host nur eine TCP-Verbindung zum Ziel und reicht die Bytes weiter. Ihre SSH-Sitzung zu 10.0.0.5 ist ab Ihrem Rechner verschlüsselt, und Ihr Schlüssel wird von Ihrem Rechner aus verwendet. Beim dritten bekommen Sie eine Shell auf dem Jump-Host und starten von dort ein neues ssh. Dann liegt entweder Ihr privater Schlüssel auf dieser Maschine, oder Ihr Agent wird dorthin weitergeleitet. Jeder mit Root-Rechten auf dieser Maschine kann ihn dann nutzen.
Die Formen für die Konfigurationsdatei, mehrere Sprünge und die Optionen, die den Jump-Host nicht erreichen, finden Sie unter ProxyJump und Jump-Host mit Beispielen.
ProxyJump oder ProxyCommand?
Nehmen Sie ProxyJump, wenn der Sprung ein SSH-Server ist. Es ist kürzer, lässt sich mit Kommas verketten, und jeder Sprung ist ein normaler Host mit eigenem Benutzer, Port und Schlüssel:
ssh -J bastion-eu,admin-gw db-internal
Nehmen Sie ProxyCommand, wenn der Zugang kein reines SSH ist: ein HTTP- oder SOCKS-Proxy über nc oder das Kommandozeilenwerkzeug eines Cloud-Anbieters, das die Sitzung für Sie öffnet. ssh startet den Befehl und spricht über dessen Standardeingabe und Standardausgabe.
Die beiden Optionen konkurrieren: Es gilt die zuerst gesetzte, und ein -o auf der Kommandozeile kommt vor der Konfigurationsdatei. Welche für einen Host gilt, verrät Ihnen ssh:
ssh -G db-internal | grep -i '^proxy'
proxyjump bastion-eu,admin-gw
Was aus einem Jump-Host einen Bastion macht
- Eine einzige Aufgabe. Ein kleiner Server mit SSH und sonst nichts: keine Datenbank, keine Website, keine Build-Werkzeuge.
- Die einzige Tür. Private Server akzeptieren Port 22 nur von der Adresse des Bastion, per Firewall oder Sicherheitsgruppe.
- Keine Schlüssel darauf, kein Agent Forwarding. Benutzer springen mit
ProxyJumphindurch. - Nur Weiterleitung. Die meisten Benutzer brauchen dort keine Shell. Ein
Match Group-Block mitPermitOpenbegrenzt, wohin sie dürfen. - Starke Anmeldung. Nur Schlüssel, auf Wunsch mit einem zweiten Faktor per TOTP.
- Protokolle an anderer Stelle. Verbindungsprotokolle verlassen die Maschine, damit ein Eindringling sie nicht löschen kann.
- Oft aktualisiert. Er steht im Internet, also spielen sich Sicherheitsupdates automatisch ein.
Die vollständige sshd-Konfiguration mit den Befehlen, um Abgelehntes zu testen, steht in einen SSH-Bastion-Host einrichten.
Brauchen Sie noch einen Bastion?
Ein Bastion löst genau ein Problem: Menschen über einen einzigen, überwachten Zugang zu privaten Servern zu lassen. Andere Werkzeuge lösen dasselbe Problem auf andere Weise:
- Ein VPN oder ein privates Overlay-Netz holt Ihren Rechner ins private Netz, und Sie verbinden sich direkt mit den Servern.
- Der Sitzungsdienst eines Cloud-Anbieters öffnet eine Shell oder einen Tunnel über die API des Anbieters, ganz ohne offenen SSH-Port.
- Ein identitätsbasierter Zugriffs-Proxy prüft bei jeder Verbindung, wer Sie sind, und zeichnet Sitzungen zentral auf.
Jedes davon verlegt die einzige Tür an einen anderen Ort. Der Bastion bleibt die einfachste Wahl, wenn Sie reines OpenSSH wollen, ohne Agent auf den Servern und ohne zusätzlichen Dienst, den Sie betreiben müssen.
Fragen
Sind Jump-Server und Bastion-Host dasselbe?
Im Alltag meistens ja, und Jump-Box meint dasselbe. Genau genommen beschreibt Jump-Server oder Jump-Host die Rolle, also das Durchreichen, während Bastion eine gehärtete Maschine am Rand des Netzes bezeichnet, die nur diese Aufgabe hat.
Kann der Bastion meine SSH-Sitzung mitlesen?
Nicht mit ProxyJump oder ProxyCommand ssh -W. Er leitet nur den verschlüsselten Datenstrom weiter und sieht, wer sich wann zu welcher Adresse und welchem Port verbunden hat. Alles mitlesen kann er nur, wenn Sie dort eine Shell öffnen und von da aus erneut ssh starten.
Sollte ich Agent Forwarding über einen Bastion nutzen?
Nein. Nutzen Sie ProxyJump. Mit ssh -A zum Bastion kann jeder mit Root-Rechten dort Ihre Schlüssel verwenden, solange Sie verbunden sind. Siehe Risiken von Agent Forwarding.
Brauche ich mit einem VPN noch einen Bastion?
Nicht immer. Ein VPN oder ein privates Overlay-Netz kann ihn als Zugang ersetzen. Viele Teams behalten trotzdem einen Bastion als einzigen SSH-Zugang, weil sich eine einzelne Maschine leicht überwachen, protokollieren und sperren lässt.
Quellen
- ssh(1), -J und -W, OpenBSD-Handbuch
- ssh_config(5), ProxyJump und ProxyCommand, OpenBSD-Handbuch
- sshd_config(5), Weiterleitung und Match, OpenBSD-Handbuch
- OpenSSH 7.3 Release Notes, ProxyJump