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
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.
localhost192.168.0.1:8080Nutze
4. 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 weiterleiten
socat TCP-LISTEN:8001,bind=localhost,reuseaddr,fork TCP:localhost:8080
192.168.0.1:8081
4.5. Optionen erklärt
Standardmäßig beendet socat den Prozess nach einer einzelnen Verbindung. Möchtest du mehrere Clients gleichzeitig bedienen oder nach Verbindungsabbruch einen neuen Versuch ermöglichen, sind folgende Optionen wichtig:
socat TCP-LISTEN:1234,bind=192.168.0.1,reuseaddr,fork TCP:localhost:8080
forkreuseaddr5.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
persistSTDOUTTipp:
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: ZertifikatLokaler -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
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 443
bind=192.168.0.1certkeymethod=TLS1TCP:localhost:8080Ergebnis: 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:1234openssl-connect:192.168.0.10:443method=TLS1Ergebnis: Neue Clients können sich lokalRechner mit socat verbinden,braucht dieserZugriff übernimmtauf diebeide (unsichere) Verbindung zum alten Server.
7. Wichtige Hinweise und Grenzen
Strg+C oder -d -d bekommst du hilfreiche Debug-Ausgaben.