Zum Inhalt springen
BeoHosting
BeoHosting
Technik

Was ist ein SSH-Tunnel und wie nutzen Sie ihn

BeoHosting Team··11 Min. Lesezeit Lesezeit
Was ist ein SSH-Tunnel und wie nutzen Sie ihn

Einführung in SSH-Tunneling

Ein SSH-Tunnel ist eine Technik, die das SSH-Protokoll verwendet, um eine verschlüsselte Verbindung zwischen zwei Computern herzustellen, meistens zwischen Ihrem Computer und einem VPS-Server, durch die Netzwerkverkehr weitergeleitet werden kann. SSH-Tunneling, auch bekannt als SSH-Portweiterleitung, ermöglicht den Zugriff auf Dienste, die normalerweise vom Internet aus nicht erreichbar sind, oder den Schutz von Daten, die über ein unsicheres Netzwerk reisen. Diese Technik ist ein grundlegendes Werkzeug für Systemadministratoren, Programmierer und alle, die mit entfernten Servern arbeiten.

Das Grundprinzip des SSH-Tunnels ist einfach. Anstatt sich direkt mit einem Dienst zu verbinden, der Sicherheitsrisiken ausgesetzt sein kann, erstellen Sie einen verschlüsselten SSH-Kanal, durch den Sie den Verkehr leiten. Alle Daten, die durch den Tunnel laufen, sind mit AES-Verschlüsselung verschlüsselt, was bedeutet, dass selbst wenn jemand den Netzwerkverkehr abfängt, er den Inhalt der Kommunikation nicht lesen kann. SSH-Tunnel sind besonders nützlich, wenn Sie mit Datenbanken, Administrationspanels oder internen Diensten arbeiten, die nicht öffentlich zugänglich sein sollen.

Wie das SSH-Protokoll funktioniert

Authentifizierung

SSH verwendet asymmetrische Verschlüsselung zur Authentifizierung von Client und Server. Wenn Sie sich zum ersten Mal mit einem Server verbinden, überprüft der SSH-Client den Fingerabdruck des Serverschlüssels und fragt Sie, ob Sie ihm vertrauen. Nach Bestätigung speichert der Client den Schlüssel in der known_hosts-Datei und bei jeder folgenden Verbindung verifiziert er automatisch die Identität des Servers. Dies verhindert Man-in-the-Middle-Angriffe, bei denen sich ein Angreifer als Ihr Server ausgeben könnte.

Zur Benutzerauthentifizierung unterstützt SSH Passwörter und SSH-Schlüssel. SSH-Schlüssel sind die empfohlene Methode, da sie sicherer und praktischer sind. Ein Schlüsselpaar besteht aus einem privaten Schlüssel, den Sie auf Ihrem Computer aufbewahren, und einem öffentlichen Schlüssel, den Sie auf dem Server platzieren. Der private Schlüssel verlässt niemals Ihren Computer und kann zusätzlich mit einer Passphrase geschützt werden. Wenn Sie sich verbinden, verwendet der Server Ihren öffentlichen Schlüssel, um zu verifizieren, dass Sie den entsprechenden privaten Schlüssel besitzen, ohne dass geheime Daten ausgetauscht werden.

Verschlüsselter Kanal

Nach erfolgreicher Authentifizierung stellt SSH einen verschlüsselten Kanal mit symmetrischer Verschlüsselung, normalerweise AES-256, her. Alle Daten, die durch diesen Kanal laufen, einschließlich Befehle, Dateien und weitergeleiteten Verkehrs, sind vor Abhören geschützt. SSH verwendet auch HMAC zur Datenintegritätsprüfung, was bedeutet, dass jede Modifikation der Daten während der Übertragung erkannt wird. Datenkomprimierung ist optional, kann aber die Leistung bei langsameren Verbindungen verbessern.

Lokaler SSH-Tunnel (Local Port Forwarding)

Konzept

Ein lokaler SSH-Tunnel leitet den Verkehr von einem Port auf Ihrem lokalen Computer über die SSH-Verbindung zu einem Port auf einem entfernten Server oder Netzwerk weiter. Dies ist der am häufigsten verwendete Tunneltyp und dient zum Zugriff auf Dienste, die nur auf dem entfernten Server oder in seinem lokalen Netzwerk verfügbar sind. Der Befehl zum Erstellen eines lokalen Tunnels lautet ssh -L lokaler_port:ziel:zielport benutzer@server.

Wenn Sie zum Beispiel eine MySQL-Datenbank auf dem Server haben, die nur auf localhost an Port 3306 lauscht, können Sie einen Tunnel mit ssh -L 3307:localhost:3306 benutzer@server erstellen. Danach können Sie sich auf Ihrem Computer mit localhost:3307 verbinden und der Verkehr wird zu MySQL auf dem Server weitergeleitet. Verwenden Sie einen anderen lokalen Port, wenn Sie bereits MySQL lokal laufen haben. Der Tunnel bleibt aktiv, solange die SSH-Sitzung offen ist.

Praktische Beispiele

Der Zugriff auf ein Administrationspanel, das nur auf dem localhost des Servers lauscht, ist ein häufiges Szenario. Wenn Sie eine Webanwendung an Port 8080 haben, die nur lokal auf dem Server verfügbar ist, ermöglicht der Befehl ssh -L 8080:localhost:8080 benutzer@server, http://localhost:8080 im Browser auf Ihrem Computer zu öffnen. Dies ist sicherer als das Öffnen eines Ports in der Firewall, da nur die Person mit SSH-Zugriff auf den Server Zugang hat.

Der Zugriff auf einen Dienst in einem privaten Netzwerk hinter dem Server ist ein weiteres wichtiges Szenario. Wenn der Server Zugriff auf ein internes Netzwerk hat, in dem sich eine Datenbank an der Adresse 10.0.0.5:5432 befindet, können Sie einen Tunnel mit ssh -L 5432:10.0.0.5:5432 benutzer@server erstellen. Jetzt können Sie sich von Ihrem Computer aus mit localhost:5432 verbinden und auf die PostgreSQL-Datenbank im privaten Netzwerk zugreifen. Dies ist eine sichere Alternative zu einem VPN für den Zugriff auf einzelne Dienste.

Entfernter SSH-Tunnel (Remote Port Forwarding)

Konzept

Ein entfernter Tunnel funktioniert umgekehrt zum lokalen. Er leitet den Verkehr von einem Port auf dem entfernten Server zu einem Port auf Ihrem lokalen Computer oder Netzwerk weiter. Der Befehl lautet ssh -R entfernter_port:ziel:zielport benutzer@server. Dies ist nützlich, wenn Sie einen Dienst von Ihrem lokalen Computer auf dem Server oder von außen verfügbar machen möchten. Zum Beispiel, wenn Sie eine Webanwendung lokal an Port 3000 entwickeln und sie einem Kunden ohne Deployment zeigen möchten.

Der Befehl ssh -R 8080:localhost:3000 benutzer@server macht Ihre lokale Anwendung an server:8080 verfügbar. Damit dies für externen Zugriff funktioniert, muss die GatewayPorts-Option in der sshd_config auf dem Server aktiviert sein. Entfernte Tunnel sind nützlich für Entwicklung, Tests und Situationen, in denen Ihr Computer keine öffentliche IP-Adresse hat, Sie aber Zugriff auf einen Dienst darauf geben müssen.

Sicherheitsüberlegungen

Entfernte Tunnel erfordern Aufmerksamkeit, da sie einen Port auf dem Server öffnen, der von außen zugänglich sein kann. Standardmäßig bindet SSH den entfernten Port nur an localhost des Servers, was bedeutet, dass er nur vom Server selbst zugänglich ist. Wenn Sie GatewayPorts aktivieren, wird der Port von jeder Adresse aus zugänglich und Sie sollten Firewall-Regeln zur Zugriffsbeschränkung verwenden. Lassen Sie einen entfernten Tunnel niemals länger aktiv als nötig und verwenden Sie spezifische IP-Adressen anstelle von Wildcard-Bindung.

Dynamischer SSH-Tunnel (SOCKS-Proxy)

Konzept

Ein dynamischer Tunnel erstellt einen SOCKS-Proxyserver auf Ihrem lokalen Computer, der den gesamten Verkehr durch die SSH-Verbindung weiterleitet. Im Gegensatz zu einem lokalen Tunnel, der den Verkehr für einen spezifischen Port weiterleitet, kann ein dynamischer Tunnel den Verkehr für jedes Ziel weiterleiten. Der Befehl lautet ssh -D lokaler_port benutzer@server. Zum Beispiel erstellt ssh -D 1080 benutzer@server einen SOCKS-Proxy an Port 1080.

Nach dem Erstellen eines dynamischen Tunnels konfigurieren Sie den Browser oder das Betriebssystem so, dass es den SOCKS-Proxy an localhost:1080 verwendet. Der gesamte Internetverkehr läuft dann durch den verschlüsselten SSH-Tunnel zum Server und verlässt das Internet mit der IP-Adresse des Servers. Dies ist nützlich zum Schutz des Verkehrs in öffentlichen WiFi-Netzwerken, zum Zugriff auf geo-eingeschränkte Inhalte oder zur Anonymisierung des Surfens. Firefox hat eingebaute Unterstützung für SOCKS-Proxy in den Netzwerkeinstellungen.

Wann einen dynamischen Tunnel verwenden

Öffentliche WiFi-Netzwerke in Cafés, Hotels und Flughäfen sind für Sicherheitsrisiken bekannt. Ein dynamischer SSH-Tunnel verschlüsselt Ihren gesamten Internetverkehr und verhindert das Abhören in einem unsicheren Netzwerk. Im Gegensatz zu kommerziellen VPN-Diensten, bei denen Sie dem Anbieter vertrauen müssen, verwendet ein SSH-Tunnel Ihren eigenen Server, wodurch Sie die volle Kontrolle über die Infrastruktur haben. Dies ist besonders wichtig für die Arbeit mit sensiblen Geschäftsdaten außerhalb des Büros.

Erweiterte Optionen und Konfiguration

Hintergrundtunnel

Die Option -f sendet SSH nach der Authentifizierung in den Hintergrund und -N teilt SSH mit, keine entfernten Befehle auszuführen. Die Kombination ssh -fN -L 3306:localhost:3306 benutzer@server erstellt einen Tunnel im Hintergrund, ohne eine interaktive Sitzung zu öffnen. Für den automatischen Start des Tunnels nach einem Systemneustart verwenden Sie das Tool autossh, das den Tunnel automatisch wiederherstellt, wenn die Verbindung unterbrochen wird. Es wird mit apt install autossh oder yum install autossh installiert.

Die SSH-Config-Datei in ~/.ssh/config ermöglicht die Definition von Tunneln, die beim Verbinden mit einem Server automatisch erstellt werden. Zum Beispiel stellt die Zeile LocalForward 3306 localhost:3306 in der Host-Sektion für Ihren Server automatisch jedes Mal einen Tunnel her, wenn Sie sich verbinden. Dies eliminiert die Notwendigkeit, einen langen Befehl zu merken, und reduziert die Möglichkeit von Fehlern. Mehrere Tunnel können für denselben Host definiert werden.

Verbindungsmultiplexing

Die SSH ControlMaster-Option ermöglicht das Teilen einer einzelnen SSH-Verbindung für mehrere Sitzungen und Tunnel. Die erste Verbindung wird normal hergestellt und alle folgenden verwenden dieselbe Verbindung, was die Verbindung beschleunigt und die Serverlast reduziert. Die Konfiguration in der SSH-Config-Datei umfasst ControlMaster auto, ControlPath ~/.ssh/sockets/%r@%h-%p und ControlPersist 600 zum Halten der Verbindung 10 Minuten nach Schließen der letzten Sitzung.

Sicherheitsempfehlungen für SSH-Tunnel

Zugriffsbeschränkung

Begrenzen Sie auf Produktionsservern, welche Benutzer Tunnel erstellen können, mit der AllowTcpForwarding-Option in sshd_config. Sie können nur lokale Weiterleitung mit AllowTcpForwarding local zulassen oder Tunnel mit AllowTcpForwarding no für Benutzer, die sie nicht benötigen, vollständig deaktivieren. Die PermitOpen-Option begrenzt, an welche Ziele der Tunnel den Verkehr weiterleiten kann, zum Beispiel erlaubt PermitOpen localhost:3306 nur einen MySQL-Tunnel.

Verwenden Sie fail2ban zum Schutz des SSH-Dienstes vor Brute-Force-Angriffen und beschränken Sie den SSH-Zugriff nur auf bekannte IP-Adressen mithilfe der Firewall. Ändern Sie den Standard-SSH-Port von 22 auf einen nicht standardmäßigen Port, was automatische Scans reduziert. Auf BeoHosting-Servern ist der SSH-Zugriff standardmäßig mit modernen Sicherheitseinstellungen geschützt und unser Team kann bei der Konfiguration von Tunneln für spezifische Anforderungen Ihrer Infrastruktur helfen.

Fazit

SSH-Tunnel sind ein leistungsstarkes Werkzeug für sichere Kommunikation, das den Zugriff auf entfernte Dienste, den Schutz des Verkehrs in unsicheren Netzwerken und die Erstellung sicherer Verbindungen zwischen Systemen ermöglicht. Lokale Tunnel für den Zugriff auf entfernte Dienste, entfernte Tunnel zum Bereitstellen lokaler Dienste und dynamische Tunnel als Proxy sind die drei grundlegenden Typen, die die meisten Szenarien abdecken. Das Verständnis von SSH-Tunneling ist eine wesentliche Fähigkeit für jeden, der mit Servern arbeitet. Erfahren Sie mehr über virtuelle Server und Netzwerkinfrastruktur.

BeoHosting Team

10+ Jahre Erfahrung — Spezialisten für Webhosting und Infrastruktur

  • Web Hosting
  • WordPress Hosting
  • VPS
  • Dedicated Serveri
  • Domeni
  • SSL
  • cPanel
  • LiteSpeed
  • Linux administracija
  • DNS

Zuletzt aktualisiert: