tsocks : proxyfions
Le tunnel SSH donne un SOCKS (l’article tunneling
), mais ssh -D ne proxyfque que ce qui parle SOCKS: les navigateurs, curl avec --proxy. Les programmes qui ne connaissent pas SOCKS (apt, telnet, le client MySQL) restent en direct. tsocks résout ça par LD_PRELOAD.
Le principe
tsocks est une bibliothèque partagée qui intercepte les appels système réseau (connect(), send(), recv()) via LD_PRELOAD. Quand un programme essaye d’ouvrir une connexion TCP, tsocks redirige vers le proxy SOCKS à sa place. Le programme ne sait pas qu’il passe par un proxy.
La conf
# /etc/tsocks.conf
server = 127.0.0.1
server_type = 5
server_port = 1080
Un seul serveur SOCKS, type 5 (SOCKS v5), port 1080 (le tunnel SSH).
L’usage
# Un programme en mode proxy
tsocks apt-get update
# Un shell entier en mode proxy
tsocks bash
# Vérifier que ça marche
tsocks telnet checkip.dyndns.org 80
GET / HTTP/1.0
Si le telnet traverse le tunnel et que le IP qui répond est celle du serveur distant, tsocks marche.
Ce que ça ne fait pas
tsocks ne proxifie pas les connexions UDP (seulement TCP), ne proxifie pas les programmes qui utilisent des sockets raw (les scripts Perl qui font socket(PF_INET, SOCK_RAW, ...)) et ne marche pas avec les programmes setuid (le kernel ignore LD_PRELOAD pour les binaire setuid, pour raisons de sécurité évidentes).
[edit: 2026] tsocks a été remplacé dans la pratique par proxychains-ng (plus de features, plus de protocoles, rotation de proxy), mais le concept LD_PRELOAD reste le même: intercepter les appels système réseau au niveau de la libc. proxychains-ng a gagné le mode strict (échouer si le proxy est injoignable) et le mode quiet (ne pas polluer le stderr). tsocks a mérité sa place dans l’historique du proxy-forcing.