$./proxies
Le port X parle au port Y. Avec TLS si tu veux.
Un relais n’est pas un produit. C’est un processus. Login : ssh user@kire.net. Bind là où on t’a dit que tu peux binder. Le hostname d’exemple plus bas est shell.kire.net — remplace-le depuis le mail de bienvenue / l’espace client.
Ce que cette page est. Le shell comme forward TCP, et comme proxy qui enveloppe ou termine le TLS. socat, ncat, stunnel, hitch, nginx stream, haproxy — si le binaire est là. Sinon, demande, ou compile dans $HOME. On ne va pas bénir une version précise dans un billet de blog.
Pour qui. Tu as besoin que le port X du shell parle au port Y ailleurs, ou de TLS devant un service TCP en clair que tu fais déjà tourner. Si SSH -L / -D le fait déjà, arrête de lire et va sur ./ssh-forwarding.
$why-a-kire-shell
IPv4 et IPv6 stables. Un PTR qui n’est pas ton modem câble. Le DDoS devant. identd a déjà répondu. Le capot du portable est fermé. Ce n’est toujours pas une ferme de proxys résidentiels, et on ne fera pas semblant.
$cheat-sheet
| chose | ce que ça fait | quand s’en servir |
|---|---|---|
SSH -L / -D | tunnel dans la session que tu as déjà | premier essai. souvent assez |
| forward TCP bête | des octets entrent, des octets sortent, pas de TLS | deux ports en clair, le même monde |
| enveloppe TLS | service en clair + TLS dehors | tu as un cert, le client attend des choses en forme de 6697 |
| terminaison TLS | TLS à l’entrée, clair à la sortie | le backend est localhost et paresseux |
| WireGuard | overlay, pas un proxy de port | seulement si un tunnel ne suffit pas. ./vpn |
$for-beginners
Vérifie ce qui existe avant de compiler un autel :
command -v socat ncat stunnel nginx haproxy hitch
Les ports privilégiés (< 1024) ne sont pas à toi. Bind haut, ou demande au staff. Les limites de processus restent des limites de processus.
Il me faut le port X du shell qui parle au port Y ailleurs
socat, s’il est là. Écoute sur le shell, connecte plus loin. Exemple : 9000 local → un hôte en 6667. Remplace les hôtes.
socat TCP-LISTEN:9000,bind=127.0.0.1,fork,reuseaddr TCP:irc.example.net:6667
bind=127.0.0.1 veut dire que seul le shell peut taper dessus. C’est le bon défaut. Couple avec SSH -L depuis chez toi si toi tu dois taper dessus. Binder le vhost en public, c’est comme ça que naissent les open proxies. Non.
Il me faut du TLS devant un service TCP en clair
stunnel (ou hitch, ou nginx stream) enveloppe ou termine. Les certs sont ton problème. Un cert auto-signé va pour un client que tu contrôles ; pas pour des inconnus.
# stunnel.conf — TLS in front of a local plain port
foreground = no
pid = /home/user/stunnel.pid
[wrap]
accept = 127.0.0.1:6697
connect = 127.0.0.1:6667
cert = /home/user/certs/fullchain.pem
key = /home/user/certs/privkey.pem
Puis stunnel ~/stunnel.conf si le binaire est là. Garde l’adresse d’accept en loopback sauf si tu as une raison et une idée.
$for-people-who-already-know-the-flags
Un forward TCP bête n’est pas un proxy SSL. L’un copie des octets. L’autre parle un handshake. Ne log pas le handshake dans un fichier lisible par tous. Ne log pas les identifiants. Fais tourner ce que tu logues.
SNI : si tu termines plus d’un nom sur un port, le proxy doit regarder le ClientHello. nginx stream + ssl_preread, haproxy ssl, maps SNI de stunnel — choisis un binaire et lis son man. On ne va pas re-documenter OpenSSL.
Certs client : possible. En général plus de cérémonie que ce pour quoi un shell KIRE est fait. Si tu as besoin de mTLS, tu as déjà un fichier de config.
PROXY protocol : seulement si le saut suivant le comprend. L’envoyer dans un ircd stock fera un dégât. Timeouts d’inactivité : règle-les. Les relais à moitié ouverts, c’est comme ça qu’on découvre les limites de descripteurs.
SO_REUSEPORT si tu empiles des workers. systemd --user pour le processus si tu y tiens ; ça compte quand même comme un processus. Pas de CAP_NET_BIND_SERVICE sauf si le staff l’a dit.
IPv4 et IPv6 existent ici. Bind la famille que tu voulais. Un PTR de vhost ne rend pas magiquement un mauvais bind correct.
Si le boulot est « mon navigateur sur le Wi-Fi du café », c’est SSH -D, pas cette page. Si le boulot est « un réseau routé pour la maison », c’est ./vpn et probablement non.
$dont
- Open proxy. Relais public. « SOCKS pour les amis des amis. » Le texte du site le dit depuis toujours.
- Minage, scanners, spam, services qui ne sont pas à toi.
- Binder 25/465/587 comme MX surprise. Non.
- Logger des clés TLS complètes « pour debug » et les laisser dans
~/tmp.
Texte complet : AUP / TOS. Pas sûr qu’un processus soit approuvé : demande avant que ce soit un ticket sur un kill.