Einrichtung eines SSH-SOCKS-Proxys über einen Linux-Server

Linux 4 Min. Lesezeit

Wenn Sie über einen SSH-Zugang zu einem Server verfügen, können Sie mit einem einzigen Befehl einen eigenen SOCKS5-Proxy starten: Der Browser leitet Ihren Datenverkehr an einen lokalen Port weiter, SSH überträgt ihn verschlüsselt an den Server, und der Server stellt nun von seiner eigenen IP-Adresse aus die Verbindung zu den Websites her. Dies ist nützlich in öffentlichen WLAN-Netzen (Cafés, Hotels), in Netzwerken, die bestimmte Seiten filtern, oder wenn Sie einen Dienst über die IP-Adresse des Servers erreichen müssen (beispielsweise ein Admin-Panel, das nur von dort aus zugänglich ist).

Wir haben die Schritte unter macOS getestet, wobei wir eine Verbindung zu einem AlmaLinux 10.2-Server hergestellt haben; unter Linux funktioniert es auf dieselbe Weise, unter Windows 10/11 ist dies ebenfalls mit dem integrierten OpenSSH-Client (PowerShell) möglich.

Der Weg des SSH-SOCKS-Proxys: Der Browser sendet die Daten an Port 1337 des eigenen Rechners, von dort werden sie über SSH verschlüsselt an den Server weitergeleitet, und der Server stellt die Verbindung zur Website her.

1. Starten des Tunnels

Auf Ihrem eigenen Rechner, in einem Terminal:

ssh -D 1337 -C -N felhasznalo@szervercime
  • -D 1337: Auf Ihrem eigenen Rechner wird ein SOCKS-Proxy auf Port 1337 geöffnet. Der Port kann beliebig gewählt werden (ein freier Port über 1024); sollte dieser bereits belegt sein, wählen Sie bitte einen anderen.
  • -C: komprimiert die Daten im Tunnel (hilft bei langsamen Verbindungen).
  • -N: Führt keine Befehle auf dem Server aus, sondern hält lediglich den Tunnel aufrecht.

Falls SSH nicht auf Port 22 läuft, geben Sie den Schalter -p an (-p 2255). Der Befehl läuft so lange, bis Sie das Terminal schließen oder ihn mit Ctrl+C beenden. Wenn Sie ihn im Hintergrund ausführen möchten, fügen Sie den Schalter -f hinzu; in diesem Fall müssen Sie den Prozess suchen und beenden (pkill -f "ssh -D 1337").

Der Proxy ist standardmäßig nur von Ihrem eigenen Rechner aus erreichbar (127.0.0.1); andere Rechner im Netzwerk können ihn nicht nutzen; bitte ändern Sie diese Einstellung nicht.

2. Test über die Befehlszeile

Bevor Sie Ihren Browser konfigurieren, überprüfen Sie bitte, ob er funktioniert:

curl -sI --socks5-hostname 127.0.0.1:1337 https://www.awh.hu/ | head -1

Im Test lautete die Antwort „HTTP/2 200“. Der Parameter „--socks5-hostname“ bedeutet, dass die Auflösung des Domainnamens ebenfalls vom Server und nicht von Ihrem eigenen Rechner vorgenommen wird (siehe unten, unter „DNS“).

3. Einrichten des Browsers

Firefox

Firefox verfügt über eigene Proxy-Einstellungen, sodass nur der Datenverkehr des Browsers über den Tunnel geleitet wird. Suchen Sie in den Einstellungen nach dem Begriff „Proxy“, öffnen Sie die Netzwerkeinstellungen und wählen Sie die manuelle Proxy-Einstellung aus:

  • SOCKS-Server: 127.0.0.1, Port: 1337, Typ: SOCKS v5;
  • Aktivieren Sie die Weiterleitung von DNS-Anfragen über einen Proxy (neben SOCKS v5).

Chrome, Edge

Diese nutzen die Proxy-Einstellungen des Systems, was sich auf alle Programme des Computers auswirkt. Es ist einfacher, den Browser in einer eigens für diesen Zweck gestarteten Instanz mit einem Befehlszeilenparameter zu starten, beispielsweise unter macOS:

"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --proxy-server="socks5://127.0.0.1:1337" --user-data-dir=/tmp/chrome-proxy

Unter Windows können dieselben Schalter hinter „chrome.exe“ angegeben werden. Durch den separaten Parameter „--user-data-dir“ wird diese Instanz nicht mit Ihrem üblichen Profil vermischt.

Überprüfung

Öffnen Sie vor und nach der Aktivierung des Proxys eine Seite mit der Frage „Wie lautet meine IP-Adresse?“: Bei aktiviertem Proxy sollte die IP-Adresse des Servers angezeigt werden. Wenn der Tunnel unterbrochen ist, gibt der Browser eine Fehlermeldung aus und wechselt nicht unbemerkt zur direkten Verbindung: Im Test hat Chrome nach der Unterbrechung des Tunnels die Seite mit dem Fehler „ERR_PROXY_CONNECTION_FAILED“ nicht geladen.

Was ist verschlüsselt und was nicht?

  • Der gesamte Datenverkehr zwischen Ihrem eigenen Rechner und dem Server ist verschlüsselt; die Verschlüsselung erfolgt über SSH. Dieser Datenverkehr ist für den Betreiber des lokalen Netzwerks (z. B. das WLAN eines Cafés) nicht einsehbar und kann von diesem nicht verändert werden.
  • Der Datenverkehr zwischen dem Server und der Website ist nur dann verschlüsselt, wenn die Seite HTTPS verwendet; bei einfachem HTTP ist der Datenverkehr auf dieser Strecke lesbar.
  • DNS: Wenn Sie im Browser (oder bei curl mit dem Schalter „--socks5-hostname“) die Weiterleitung über den DNS-Proxy aktivieren, werden die Domainnamen ebenfalls vom Server aufgelöst. Ist dies nicht der Fall, kann das lokale Netzwerk sehen, welche Seiten Sie aufrufen, auch wenn der Datenverkehr selbst über den Tunnel läuft.

Ein SOCKS-Proxy ist kein VPN: Er wird nur von dem Programm genutzt, in dem Sie ihn eingerichtet haben. Alle anderen Programme sowie Instanzen des Browsers, die ohne den Proxy gestartet werden, stellen weiterhin eine direkte Verbindung her.

Falls es nicht funktioniert

  • curl: (97) connection to proxy closed, Verbindungsfehler im Browser: Die Weiterleitung ist möglicherweise auf dem Server deaktiviert. Genau dies ist im Test mit der Einstellung „AllowTcpForwarding no“ geschehen. Überprüfen Sie dies auf dem Server: sudo sshd -T | grep allowtcpforwarding; der Standardwert lautet „yes“.
  • bind [127.0.0.1]:1337: Address already in use (Port bereits belegt): Der Port ist bereits belegt (häufig durch einen zuvor mit dem -f-Parameter gestarteten Tunnel). Wählen Sie einen anderen Port oder beenden Sie den bisherigen.
  • Das Netzwerk blockiert auch SSH: Bestimmte Unternehmens- und öffentliche Netzwerke lassen nur Web-Ports zu. In diesem Fall kann der SSH-Server auf einem zusätzlichen Port lauschen, beispielsweise auf Port 443, sofern dort kein Webserver läuft. Das Hinzufügen des Ports (SELinux, Firewall) wird im Artikel „Sicherheitseinstellungen des SSH-Servers“ beschrieben.

Für einen eigenen Proxy reicht bereits ein kleiner KVM-VPS aus; der Datenverkehr wird über die IP-Adresse des Rechenzentrums geleitet.

Zurück: Linux-Artikel (62)