Midterms 2026Wer nach unseren Maßstäben Ihre Stimme verdientZum Leitfaden →
GESCHRIEBEN IN KLAREM DEUTSCH.
CLAY TRIBUNE.
Anzeige

Eigener HTTP-Tunnel mit SSH und Nginx erstellen – ohne Cloud-Dienst

Der Trick eines französischen Ingenieurs: SSH und nginx leiten einen localhost-Port mit einem gehashten Token weiter, ein kostenloser persönlicher Tunnel.

Von mitch·4 Min. Lesezeit
A glowing server room with a laptop displaying code for an SSH tunnel and nginx proxy.

Der Autor eines Blogbeitrags hat einen Trick konstruiert: ein persönlicher Server leitet einen localhost-Port über SSH weiter, dann proxy’t nginx den Datenverkehr zurück, wobei ein gehashtes Token den Zugriff schützt. Die Methode erfordert nicht mehr als OpenSSH und nginx.

Wie der Port weitergeleitet wird

Der Trick beginnt mit einem SSH-Befehl, der einen Remote-Tunnel öffnet. Der Autor verbindet sich mit einem Server namens web02.luffy.cx und weist ihn an, jede Verbindung, die auf einen freien Port ankommt, zurück zu localhost:8080 auf seinem Rechner weiterzuleiten.

Der Befehl sieht wie folgt aus:

Anzeige

ssh -N -R 0:localhost:8080 web02.luffy.cx

Der Server weist einen freien Port automatisch zu. Im Beispiel des Autors landet er bei 41535. Diese Zahl wird zum öffentlichen Gesicht des gesamten Setups.

Was Nginx damit macht

Sobald der Port zugewiesen ist, übernimmt nginx. Der Autor konfiguriert es so, dass es auf HTTPS über alle Adressen hört und Anfragen von https://p41535.ssh.luffy.cx im Hintergrund zu http://127.0.0.1:41535 weiterleitet.

Die Konfiguration beinhaltet auch ein DNS-Setup. Der Autor fügt einen CNAME-Eintrag hinzu, der *.ssh.luffy.cx auf web02.luffy.cx verweist, und ein Wildcard-Zertifikat über Let’s Encrypt, wobei acme.luffy.cx die DNS-01-Herausforderungen behandelt.

Das Ergebnis ist ein funktionierender Tunnel, den jeder erreichen kann, indem er die zugewiesene Nummer in die URL eingibt.

Warum das Token wichtig ist

Der freigegebene Port ist das einzige Geheimnis des Systems. Jeder, der die Zahl errät, könnte auf den Inhalt zugreifen. Der Autor löst dies, indem er die URL in ein gehashtes Token einbettet, das ein Geheimnis, einen Ablaufzeitstempel und den Port selbst enthält.

Er verwendet das ngx_http_secure_link_module, um den Hash zu berechnen. Das Token erscheint als Benutzername in der URL, gefolgt vom Ablaufzeitstempel. Hier ist die Aufschlüsselung:

https://6J3jK1WmB15c6WmjW_X-Wg--1789928654@p41535.ssh.luffy.cx/

Der Client sendet den Benutzernamen mit HTTP-Basic-Authentifizierung. Nginx überprüft den Hash gegen einen gespeicherten Wert, der den Zeitstempel, den Port und ein festes Geheimnis beinhaltet.

Das Modul gibt seinen Status in einer Variablen zurück. Eine leere Antwort bedeutet, dass die Hashes nicht übereinstimmen. Eine Null bedeutet, dass der Link abgelaufen ist. Alles andere bedeutet, dass das Token gültig ist.

Eine leere Antwort bedeutet, dass die Hashes nicht übereinstimmen. Eine Null bedeutet, dass der Link abgelaufen ist.

Das Hilfsskript

Der Token-Ansatz funktioniert, ist aber umständlich. Der Autor räumt dies ein. Er bietet ein Hilfsskript an, das den zugewiesenen Port findet, das Token generiert und die funktionierende URL anzeigt.

Das Skript sucht nach den übergeordneten sshd-Session-Prozessen, um die Portnummer zu finden, da OpenSSH den Port nicht in einer Umgebungsvariablen ausgibt. Es berechnet dann den MD5-Hash, kodiert ihn und formatiert die Ausgabe.

Der finale Befehl erzeugt das Token direkt:

$ printf '%s %s %s' "$expires" "$port" "$secret" \
| openssl md5 -binary \
| openssl base64 \
| tr +/ -_ | tr -d =

Der Autor installiert das Skript auf dem Server und fügt einen Eintrag zu ~/.ssh/config hinzu, sodass Benutzer es einfach aufrufen können.

Unsere Sicht auf den Trick

Dies ist ein cleverer Hack. Er verwendet Standardwerkzeuge in einer cleveren Kombination. Die Token-Schicht fügt echte Sicherheit hinzu, ohne einen speziellen Client oder einen kommerziellen Dienst zu benötigen.

Der Nachteil ist der Reibungsverlust. Das manuelle Generieren eines Tokens ist umständlich, und das Hilfsskript verlangt zwar die Ausführung von Befehlen auf dem Server, ist aber dennoch effektiv.

Aber die Kernidee hält stand. Ein persönlicher Server, ein freier Port und eine gehashte URL können kommerzielle Tunneldienste vollständig ersetzen. Der Autor hat gezeigt, wie man ihn selbst aufbaut, und die Methode ist für jeden, der eine temporäre Freigabe eines localhost-Dienstes benötigt, erwähnenswert.

Der Trick funktioniert, weil er die Portnummer als Geheimnis behandelt und den Hash darüber legt. Das Skript erleichtert die manuelle Berechnung. Die Methode des Autors ist ein praktisches Beispiel dafür, was man mit OpenSSH und nginx allein bauen kann.

Quellenmaterial: „Self-hosted HTTP tunnels with SSH and Nginx“, bernat.ch.

Das Notizbuch

Das Notizbuch abonnieren.

Die besten Geschichten des Tages und jedes neue Urteil, in klarem Deutsch, um sieben im Postfach. Eine Mail am Tag, nicht mehr.

Wir schicken eine Bestätigungsmail. Jede Ausgabe hat einen Abmeldelink, ein Klick genügt.

Anzeige

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Als Amazon-Partner verdient Clay Tribune an qualifizierten Verkäufen.