SoCat - Fast start
1. Was ist socat?
Socat steht für (SOcket CAT und) ist ein extremsehr vielseitigesflexibles Kommandozeilen-Tool fürzum dieWeiterleiten Datenübertragungvon Datenströmen zwischen zweiNetzwerk-Ports, Endpunkten.EsDateien, funktioniertPipes, ähnlichUNIX wieSockets
oder netcat("nc"), ist aber deutlich mächtiger und flexibler.Typische Anwendungsfälle:SSL/TLS-Verbindungen.
PortweiterleitungTemporäres(lokalPort-Forwarding zwischen unterschiedlichen Netzen oderübers Netzwerk)InterfacesProtokollübersetzungDebugging & Überbrückung von Netzwerkrestriktionen- Brücke zwischen alten und neuen Protokollen (z.B.
vonaltesTCPTLS zuUDPmodernemoder von alten zu neuen SSL/TLS-Protokollen) Debugging von NetzwerkverbindungenTemporäre Ersatzlösung, wenn keine Firewallregel angepasst werden kannSSL/TLS-"Terminator": Alte Verbindungen mit modernen Zertifikaten sichern (oder andersrum)TLS)
Socat sollte wegen seiner Flexibilität aber nicht als Dauerlösung genutzt werden!Tipp: Für produktiveproduktiven SetupsDauerbetrieb sind spezialisierteReverse-Proxys, Reverse-Proxys wie nginx, stunnelVPNs oder HAProxyFirewalls oftdie besserbessere geeignet.Wahl – socat ist ideal als temporärer Workaround!
2. Installation unter Debian/Linux
Die Installation ist sehr einfach – alle benötigten Pakete sind in den Debian-Repositories enthalten.
apt-get update
apt-get install socat
apt-get update
:AktualisiertPaketquellendie Paketlisten.aktualisieren.apt-get install socat
:InstalliertSocatdassocat-Paket.installieren.
3. GrundlegendeEinfaches Nutzung:Port-Forwarding: Ports192.168.0.1 und→ Daten weiterleitenlocalhost
MitBeispiel: socatDu lassen sich Daten von einem Port anmöchtest einen anderenDienst weiterleitenauf –192.168.0.1:8080
entwederlokal lokal,als überlocalhost:8000
das Netzwerk oder zwischen verschiedenen Protokollen.bereitstellen.
socat TCP-LISTEN:12348000,bind=localhost,reuseaddr,fork TCP:localhost:192.168.0.1:8080
- TCP-LISTEN:
12348000,bind=localhost:WartetLauschtauf eingehende Verbindungenlokal auf Port12348000 (nur aufallen lokalen Interfaces)localhost). - reuseaddr,fork: Mehrere/kurze Verbindungen, sofortige Wiederverwendung.
- TCP:
localhost:192.168.0.1:8080:LeitetWeiterleitungdiezumeingehenden Daten an Port 8080Dienst auflocalhost192.168.0.1:8080weiter..
Nutze4.
diesMehrere z.B.,Ports/Services umvon eine Verbindung zwischen zwei Ports auf demselben Rechner oder zwischen verschiedenen Rechnern im Netzwerk herzustellen.
Tipp: Wenn du nur auf einer bestimmten IP (z.B. 192.168.0.1) lauschen möchtest, ergänze bind=192.168.0.1:
socat TCP-LISTEN:1234,bind=192.168.0.1 zu localhost weiterleitensocat TCP-LISTEN:8001,bind=localhost,reuseaddr,fork TCP:
localhost:8080192.168.0.1:8081
4.5. Optionen erklärt
- fork: Parallele Verbindungen
stabil halten & mehrere Clients unterstützenStandardmäßig beendet socat den Prozess nach einer einzelnen Verbindung. Möchtest dumehrere Clients gleichzeitigbedienen oder nach Verbindungsabbruch einen neuen Versuch ermöglichen, sind folgende Optionen wichtig:- möglich
- reuseaddr: Port
kannsofortneuwiedergenutzt werden, auch wenn vorher noch eine Verbindung offen war.benutzbar forkbind=localhost:JederLauschteingehendenurClientaufbekommt einen eigenen socat-Subprozesslocalhost (erlaubtkeinparalleleLAN-ZugriffVerbindungen).
socat TCP-LISTEN:1234,bind=192.168.0.1,reuseaddr,fork TCP:localhost:8080
fork: Besonders wichtig, wenn du im Testbetrieb mehrere Zugriffe brauchst (z.B. Browser-Reloads oder mehrere Nutzer im LAN).reuseaddr: Hilft, wenn Verbindungen "hängen" und der Port sonst blockiert bleibt.möglich)
5.6. VerbindungenVerbindung nach Abbruch automatisch neuwiederherstellen aufbauen(persist)
Mit der Option
persistkann socat als Client nach einem Verbindungsabbruch immer wieder neue Versuche starten.Achtung:persistmacht nur auf derClient-SeiteSinn (also dort, wo socat aktiv eine Verbindung aufbaut).socat -d -d TCP:192.168.0.1:443,8080,persist STDOUT
persist: Baut Verbindung bei Abbruch erneut auf
- -d -d: Debug-Ausgabe
- STDOUT: Gibt
ausführliche Debug-Ausgaben (optional für Fehlersuche). persist: Baut nach Verbindungsverlust immer wieder automatisch neu auf.STDOUT: Gibt empfangeneDatenaufimder KonsoleTerminal aus (nur als Beispiel, du kannst auch an einen Port oder eine Datei weiterleiten).Beispiel)
Tipp:
7. FürSSL/TLS: Server-SeiteVerbindung (z.B.von Port-Weiterleitungaltem im192.168.0.1-SSL LAN)auf reichtlokalen meist fork
und reuseaddr
.
6. Socat als temporärer SSL-"Proxy": Alte und neue Zertifikate kombinierenDienst
ManchmalBeispiel: mussDienst einauf Client192.168.0.1:8443
odernutzt Server noch altes SSL/TLS (z.B.nur TLS 1.0, TLS 1.1) sprechen, während moderne Browser das nicht mehr unterstützen.
Hier kann socat als temporärer "SSL-Terminator" genutzt werden, der alte Verbindungen entgegennimmt und an einen Zielport mit neuem Zertifikat (oder unverschlüsselt) weiterleitet – oder umgekehrt.
6.1. Selbsterstelltes Zertifikat für socat (schnell & einfach)
Falls du keinmöchtest Zertifikatlokal zurlocalhost:8000
Hand hast, kannst du mit openssl schnell ein selbstsigniertes Zertifikat erstellen:bereitstellen.
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"
socat key.pem:openssl-connect:192.168.0.1:8443,method=TLS1 PrivaterTCP-LISTEN:8000,bind=localhost,reuseaddr,fork
Schlüssel8.
cert.pem:Umgekehrter ÖffentlichesWeg: Zertifikat Lokaler -nodes
:Dienst Ohneauf Passwortlocalhost (praktischnach für temporäre Tests)
-subj
: Setzt den Common Name192.168.0.1 im Zertifikatanderen (z.B.Netz für "localhost")
6.2. Beispiel: Altes SSL abfangen & intern als Klartext oder modernes SSL weiterleiten
Fall: Alter Client (z.B. ein Embedded-Gerät oder Legacy-Software) kann nur TLS 1.0, aber dein Server oder Browser will mindestens TLS 1.2.
socat nimmt die alte Verbindung entgegen und gibt sie intern weiter.
bereitstellen
192.168.0.1:8443
localhost:8000
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"
socat key.pem:openssl-connect:192.168.0.1:8443,method=TLS1 PrivaterTCP-LISTEN:8000,bind=localhost,reuseaddr,fork
-nodes
-subj
socat openssl-listen:443,TCP-LISTEN:8080,bind=192.168.0.1,reuseaddr,cert=cert.pem,key=key.pem,method=TLS1fork TCP:localhost:80808000
9. Hinweise & Tipps
openssl-listen:443:DerLauscht mit SSL/TLS auf Port 443bind=192.168.0.1: Hört nur auf dieser IPcert/key: Das eigene (Test-)Zertifikatmethod=TLS1: Akzeptiert explizit TLS 1.0 (je nach Bedarf auch SSLv3 etc.)TCP:localhost:8080: Gibt Daten an einen lokalen Server weiter (z.B. moderner Webserver auf Port 8080)
Ergebnis: Alte Geräte können sich mit veraltetem Protokoll verbinden, socat "übersetzt" und dein moderner Server/Browser bleibt sicher.
Achtung: Diese Methode ist unsicher und sollte nur im Ausnahme-/Testfall oder als kurzfristiger Workaround genutzt werden!
6.3. Beispiel: Verbindung zu altem Zielserver erzwingen (Client-Seite downgraden)
Fall: Dein System unterstützt nur noch moderne SSL/TLS-Versionen, aber der Zielserver ist alt.Mit socat kannst du von Klartext oder modernem SSL auf alte Protokolle "downgraden".
socat TCP-LISTEN:1234,reuseaddr openssl-connect:192.168.0.10:443,method=TLS1
TCP-LISTEN:1234: Lauscht auf Port 1234 (beliebiger lokaler Port)openssl-connect:192.168.0.10:443: Baut eine verschlüsselte Verbindung zum Zielserver auf (mitaltemProtokoll TLS 1.0)method=TLS1: Erzwingt altes Protokoll
Ergebnis: Neue Clients können sich lokalRechner mit socat verbinden,braucht dieserZugriff übernimmtauf diebeide (unsichere) Verbindung zum alten Server.
7. Wichtige Hinweise und Grenzen
Sicherheit:Altes SSL/TLS ist unsicher. Nutze das wirklich nur, wenn es keine Alternative gibt!IPs/Netze.Fehlerquellen:Achte auf Zertifikate, Port-Freigaben und ggf. Firewalleinstellungen.- Temporärer Einsatz:
SocatNacheignet sich ideal alsSchnellhilfe, für Produktivbetrieb aber unbedingt professionelle Tools verwenden! Beende socat nach dem Einsatz mitNutzungStrg+C
oderdurchTerminalSchließenschließen.- Für
Terminalfensters.längere Nutzung: Reverse-Proxy, VPN oder Firewall bevorzugen. - Mit
-d -d
bekommst du hilfreiche Debug-Ausgaben.