← retour aux snippets

socat: proxy TCP et tunnel TLS rapide

Créer un proxy TCP local et terminer TLS vers une cible distante avec vérification SNI.

bash network #socat#tcp#tls

objectif

Exposer un port local qui chiffre/déchiffre vers une cible TLS avec SNI, utile pour tester des services sécurisés.

code minimal

# proxy local 127.0.0.1:8443 -> cible TLS data.pm:443 avec SNI
socat -v TCP-LISTEN:8443,reuseaddr,fork OPENSSL:data.pm:443,verify=1,snihost=data.pm

utilisation

# vérifier un service TLS sans curl
printf 'GET / HTTP/1.1\r\nHost: data.pm\r\n\r\n' | nc 127.0.0.1 8443

# proxy TCP simple (sans TLS) vers un backend
socat -v TCP-LISTEN:7000,reuseaddr,fork TCP:127.0.0.1:7001

variante(s) utile(s)

# forcer un CA custom (PKI interne)
socat TCP-LISTEN:8443,reuseaddr,fork OPENSSL:data.pm:443,verify=1,snihost=data.pm,cafile=/etc/ssl/certs/ca-bundle.crt

# passerelle inverse (connecter sortant via proxy)
socat - PROXY:proxy.local:destination:443,proxyport=3128

notes

  • verify=1 vérifie la chaîne TLS; utilisez cafile/capath pour CA custom.
  • -v inscrit les transferts sur stderr; retirez en production.
  • préférez des règles firewall pour restreindre l’accès au port exposé.