Home » Linux » SSH, sFTP oder FTP Dienste hinter DS Lite verfügbar machen
|

SSH, sFTP oder FTP Dienste hinter DS Lite verfügbar machen

Heute befassen wir uns damit, wie wir hinter einem DS Lite Anschluss wir auf unseren Heimserver zugreifen können, sei es per SSH, sFTP, FTP, und wie wir diese für externe Verbindungen zugänglich machen. In einem vorherigen Tutorial haben wir bereits gezeigt, wie Webdienste hinter einem DS-Lite-Anschluss verfügbar gemacht werden können. Nun widmen wir uns weiteren Möglichkeiten, um zusätzliche Dienste einzubinden.

Anforderungen

Wireguard installieren

Das Tutorial basiert wie bereits erwähnt auf dem Vorgänger-Artikel welchen ihr hier findet. Installiert euch einen Wireguard Server wie beschrieben, und richtet euch, für euren Dienst eine Konfiguration ein. Auf dem zu erreichenden Dienst, muss natürlich der Wireguard Client ebenso installiert sein, und erfolgreich mit dem Wireguard Server verbunden sein.

Ports öffnen

Ausserdem müssen natürlich die entsprechenden Ports, die ihr öffnen möchtet, in der Firewall des VPS Server geöffnet werden.

Zwischen Socat oder iptables auswählen

Ihr könnt bei solchen Diensten theoretisch und praktisch einfach iptables verwenden, da die Dienste immer einen anderen Port verwenden.

Einfach und praktisch ist aber auch ein bidirektionaler Relay Dienst wie Socat.

Nginx funktioniert hier nicht, da es auf der Anwendungsschicht (Layer 7 im OSI-Modell) arbeitet, und es deshalb nur mit Anwendungsprotokollen umgehen kann, die auf HTTP oder HTTPS basieren. Protokolle wie FTP oder SSH arbeiten jedoch auf der Transportschicht (Layer 4) und verwenden kein HTTP, wodurch Nginx solche Verbindungen nicht versteht.

Was ist iptables und Konfigurations-Beispiel anhand SSH/sFTP

iptables ist ein Kommandozeilenwerkzeug zur Konfiguration der Netfilter-Firewall im Linux-Kernel. Es arbeitet auf Layer 3/4 (Netzwerk- und Transportschicht) und ermöglicht Routing, Paketfilterung und NAT (Network Address Translation).

Anwendungsfälle von iptables

  • Weiterleitung von Ports und Diensten.
  • Paketfilterung und Zugangsbeschränkungen.
  • NAT und Routing über verschiedene Netzwerke.

Beispiel: SFTP-Weiterleitung mit iptables

Für Verbindungen mit SSH/SFTP müsst ihr Anfragen auf einen anderen Port als 22 weiterleiten, da der Port 22 bereits durch eure Verbindung zur VPS benötigt wird. Ihr könnt z.B Port 8022 des VPS an einen internen Server (10.7.0.2:22) weiterleiten. Mit iptables würde das zum Beispiel so aussehen:

iptables -t nat -A PREROUTING -p tcp --dport 8022 -j DNAT --to-destination 10.7.0.2:22
iptables -t nat -A POSTROUTING -j MASQUERADE

Erklärung:

  • PREROUTING: Leitet eingehende Anfragen (Port 8022) an den internen Server weiter.
  • DNAT: Destination NAT ändert das Ziel der Anfrage.
  • POSTROUTING/MASQUERADE: Stellt sicher, dass Rückantworten über den VPS laufen.

Vorteile von iptables

  1. Leichtgewichtig und performant: Läuft direkt im Kernel.
  2. Persistent: Regeln bleiben bestehen, wenn sie mit Tools wie iptables-persistent gespeichert werden.
  3. Flexibel: Unterstützt alle TCP/UDP-Protokolle und bietet viele Optionen (z. B. Port-Translation, SNAT/DNAT).

Nachteile von iptables

  1. Komplexität: Erfordert Kenntnisse der Netzwerkebene.
  2. Keine Protokollanalyse: Arbeitet nur mit Ziel-IP und -Port, keine Layer-7-Analyse.
  3. Keine einfache Fehlerbehebung: Fehlkonfigurationen können schwierig zu diagnostizieren sein.

Was ist socat und Konfigurations-Beispiel Anhand sFTP/SSH

socat ist ein vielseitiges Werkzeug, das Verbindungen auf Layer 4 herstellt. Es agiert wie ein "Schweizer Taschenmesser" für Netzwerke und kann Verbindungen zwischen Ports, Sockets und Streams herstellen.

Anwendungsfälle von Socat

  • Direkte Weiterleitung von Diensten (z. B. SSH, SFTP, HTTP, etc.).
  • Einfaches Prototyping von Netzwerklösungen.
  • Erstellen eines TCP/UDP-Proxies.

Beispiel: SFTP-Weiterleitung mit Socat

Angenommen, der interne Server mit SFTP oder SSH läuft auf 10.7.0.2:22 und ihr möchtet ihn über den VPS auf Port 8022 zugänglich machen:

socat TCP-LISTEN:8022,reuseaddr,fork TCP:10.7.0.2:22

Erklärung

  • TCP-LISTEN:8022: Öffnet Port 8022 auf dem VPS.
  • reuseaddr: Erlaubt, dass der Port mehrfach verwendet werden kann.
  • fork: Erlaubt mehrere parallele Verbindungen.
  • TCP:10.7.0.2:22: Weiterleitung an den internen SFTP-Server.

Vorteile von Socat

  1. Einfach zu konfigurieren: Ein einzelnes Kommando reicht aus.
  2. Flexibel: Unterstützt nicht nur TCP und UDP, sondern auch andere Protokolle wie Unix-Sockets.
  3. Kein Root-Zugriff erforderlich: Kann von normalen Benutzern gestartet werden (sofern der Port > 1024 ist).

Nachteile von Socat

  1. Nicht persistent: Läuft nicht automatisch nach einem Neustart weiter, es sei denn, wir nutzen systemd oder einen Daemon.
  2. Keine Protokollanalyse: Arbeitet auf Layer 4 und bietet keine Funktionen wie Load-Balancing oder SSL-Terminierung.
  3. Performance: Weniger effizient bei hohen Lasten im Vergleich zu iptables.

Socat systemd Service aufsetzen

Wie bereits beschrieben, muss socat dauerhaft laufen, damit es die Verbindungen jederzeit weiterleiten kann. Dazu erstellen wir ein systemd Service, welches wir bei Bedarf aktivieren, und auch wieder einfach deaktivieren könnten. Für unsere SSH Verbindung zum Client erstellen wir beispielsweise folgenden Eintrag. Zuerst erstellen wir eine systemd Service:

sudo nano /etc/systemd/system/socat-ssh.service

Darin kommt folgender Inhalt:

[Unit]
Description=Socat SSH Forwarding
After=network.target

[Service]
ExecStart=/usr/bin/socat TCP-LISTEN:8022,reuseaddr,fork TCP:10.7.0.2:22
Restart=always

[Install]
WantedBy=multi-user.target

Den Dienst starten wir mit:

sudo systemctl daemon-reload
sudo systemctl enable socat-ssh.service
sudo systemctl start socat-ssh.service

Stoppen können wir den Dienst, und damit auch die Verbindungen sofort wieder mit:

sudo systemctl stop socat-ssh.service

Weitere Dienste weiterleiten

Um weitere Dienste weiterleiten zu können zum Beispiel einen eigenen öffentlichen DNS Server erstellt ihr neue iptable Rules, oder für socat ganz einfach einen neuen systemd Service mit den angepassten Ports. Ein DNS Server zum Beispiel muss direkt via Port 53 erreichbar sein, also müsste der Systemd Service dementsprechend aussehen:

[Unit]
Description=Socat DNS UDP Forwarder
After=network.target

[Service]
ExecStart=/usr/bin/socat -T15 -u UDP-LISTEN:53,reuseaddr,fork UDP:10.7.0.2:53
Restart=always

[Install]
WantedBy=multi-user.target

Für IP Tables sehe das so aus:

iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 10.7.0.2:53
iptables -t nat -A POSTROUTING -p udp --dport 53 -j MASQUERADE

Fazit

Die Herausforderung, Dienste hinter einem DS Lite-Anschluss (Dual-Stack Lite) im Internet verfügbar zu machen, lässt sich effektiv lösen, indem ein VPS (Virtual Private Server) als Brücke genutzt wird. Dabei ist WireGuard eine ausgezeichnete Wahl, um eine sichere Verbindung zwischen eurem lokalen Netzwerk und dem VPS herzustellen. Für die eigentliche Weiterleitung der Dienste gibt es mehrere Ansätze, darunter iptables und socat, die je nach Anwendungsfall Vor- und Nachteile haben:

Featuresocatiptables
EinsatzzweckPort- und DienstweiterleitungNAT, Portweiterleitung, Firewall
ProtokollanalyseNeinNein
FlexibilitätSehr flexibel (Streams, Sockets, etc.)Beschränkt auf Layer 3/4
EinfachheitEinfach zu startenEher komplex
PerformanceWeniger effizientSehr effizient (Kernel-basiert)
PersistenzErfordert zusätzliche KonfigurationKann persistent gespeichert werden
SicherheitKeine Firewall-FunktionenIntegrierte Paketfilterung
Zusatztools nötig?Ja, z. B. systemd für PersistenzNein, direkt persistent möglich

Mit WireGuard als Tunnel und den vielseitigen Werkzeugen wie iptables oder socat könnt ihr nahezu jeden Dienst hinter einem DSLite-Anschluss verfügbar machen. Die Wahl zwischen iptables und socat hängt von euren spezifischen Anforderungen ab: Effizienz und Stabilität mit iptables oder Flexibilität und Einfachheit mit socat. Beide Optionen bieten robuste Lösungen, um die Einschränkungen eines DS-Lite-Netzwerks effektiv zu umgehen.

Ähnliche Beiträge

Schreibe einen Kommentar

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