Configurer stunnel

,

stunnel

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é.

Commentaires

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.