stunnel chiffre en TLS une connexion TCP qui ne l’est pas. Il peut aussi aider à franchir un pare-feu : on peut par exemple faire passer dans stunnel un VPN, tant que celui-ci utilise TCP. L’exemple ci-dessous protège un service Telnet (port 23), avec authentification mutuelle : le serveur n’accepte que le client dont il connaît le certificat, et inversement.
Génération des certificats
Sur une machine disposant d’OpenSSL, créez un certificat autosigné pour le serveur et un pour le client :
openssl req -x509 -newkey rsa:3072 -sha256 -days 825 -nodes \ -subj "/CN=stunnel-serveur" -keyout serveur.key -out serveur.crt openssl req -x509 -newkey rsa:3072 -sha256 -days 825 -nodes \ -subj "/CN=stunnel-client" -keyout client.key -out client.crt
Copiez sur le serveur : serveur.key, serveur.crt et client.crt. Sur le client : client.key, client.crt et serveur.crt. Les clés privées doivent rester lisibles par root uniquement (chmod 600).
Serveur (Debian/Ubuntu)
apt install stunnel4 vi /etc/stunnel/services.conf
cert = /etc/stunnel/serveur.crt key = /etc/stunnel/serveur.key ; seul le certificat du client est accepté CAfile = /etc/stunnel/client.crt verifyPeer = yes sslVersionMin = TLSv1.2 [telnet] ; port exposé sur Internet accept = 4443 ; service local à protéger connect = 127.0.0.1:23
Le paquet Debian fournit un modèle d’unité : l’instance services lit /etc/stunnel/services.conf.
systemctl enable --now stunnel@services journalctl -u stunnel@services
Autorisez le port 4443/TCP sur le pare-feu (et redirigez-le sur le routeur si le serveur est derrière du NAT).
Client Debian/Ubuntu
apt install stunnel4 vi /etc/stunnel/services.conf
client = yes cert = /etc/stunnel/client.crt key = /etc/stunnel/client.key ; seul le certificat du serveur est accepté CAfile = /etc/stunnel/serveur.crt verifyPeer = yes sslVersionMin = TLSv1.2 [telnet] ; le client Telnet local se connecte ici accept = 127.0.0.1:2323 connect = IP_PUBLIQUE_DU_SERVEUR:4443
systemctl enable --now stunnel@services
Client Windows
Téléchargez stunnel, lancez l’installeur, puis placez client.crt, client.key et serveur.crt dans le dossier config du répertoire d’installation. Ajoutez au fichier stunnel.conf de ce dossier la même configuration que ci-dessus, avec des chemins relatifs :
client = yes cert = client.crt key = client.key CAfile = serveur.crt verifyPeer = yes sslVersionMin = TLSv1.2 [telnet] accept = 127.0.0.1:2323 connect = IP_PUBLIQUE_DU_SERVEUR:4443
Test
Depuis le client, ouvrez une session Telnet vers 127.0.0.1, port 2323. Le trafic entre les deux machines passe chiffré dans le tunnel. En cas d’échec, les journaux (journalctl sous Linux, fenêtre de log sous Windows) indiquent si le certificat du pair a été refusé.

Laisser un commentaire
Vous devez vous connecter pour publier un commentaire.