Accueil > Linux > Sécurité > Installation de stunnel4

Installation de stunnel4

samedi 2 février 2008, par michael

Mise en place du ssl sur un protocole ne supportant pas nativement le ssl (pop, smtp, imap, vnc...). Les explications données ci-dessous permettent de créer un tunnel ssl grâce à stunnel.

Le tutoriel monte un tunnel ssl avec échange de clés publiques. Si le serveur n’a pas la clé publique du client celui ci n’acceptera pas la connexion, même si le client a la clé publique du serveur. Et inversement, si le serveur a la clé publique du client mais que le client n’a pas la clé publique du serveur, la connexion sera refusée aussi. Chaque partie doit avoir la clé publique de l’autre. Aucun échange automatique n’est effectué.

L’exemple est de "ssliser" un serveur telnet. Je suppose que le serveur telnet est installé.

On peut tout à fait ssliser tout autre serveur, la seule contrainte est que le serveur soit en TCP. Par contre, le ftp ne peux pas être "sslisé" avec cette méthode. Voir le man de stunnel pour plus d’info.

L’installation a été testée sous Debian avec la version 4.21 de stunnel. Cela devrait fonctionner avec d’autres distributions.

I - Pré-requis

Installation des packages nécessaires

aptitude install stunnel4 openssl

Mise en place de l’arborescence

Nous stockerons notre clef privée et notre certificat public dans /var/lib/stunnel4/. Les certificats publics reçus, dans /var/lib/stunnel4/certs/

mkdir -p /var/lib/stunnel4/certs
chown stunnel4:stunnel4 /var/lib/stunnel4/certs

Sauvegarde du fichier exemple de stunnel

cd /etc/stunnel
mv stunnel.conf stunnel.conf.example

Autoriser stunnel à démarrer, pour ce faire éditer /etc/default/stunnel4 et modifier ENABLED=0 par ENABLED=1

L’installation est divisée en deux parties :
Si vous êtes le serveur suivez le tuto ici.
Si vous êtes le client suivez le tuto ici

++++

II - Serveur

Se placer dans le répertoire qui contiendra notre clé privée

cd /var/lib/stunnel4/

2.1 - Génération de la clé

La clé sera valable 1 an. Si vous vous voulez générer une clé sans durée de validité mettre -days 0

openssl req -newkey rsa:2048 -x509 -nodes -days 365 -out stunnel-serveur.pem -keyout stunnel-serveur.pem

(Pour laisser en blanc les demandes d’infos mettre un . (point), le code pays est obligatoire)

Changement des droits et du propriétaire sur la clé

chmod 600 stunnel-serveur.pem
chown stunnel4:stunnel4 stunnel-serveur.pem

Génération du paramètre DH

dd if=/dev/urandom count=2 | openssl dhparam -rand - 512 >> stunnel-serveur.pem

Création du certificat public

openssl x509 -in stunnel-serveur.pem -out stunnel-serveur.cert
chown stunnel4:stunnel4 stunnel-serveur.cert

Vous devez maintenant envoyer votre certificat public stunnel-serveur.cert à vos clients par tous moyens à votre convenance.

A la réception du certificat de vos clients, les copier dans /var/lib/stunnel4/certs/

cd /var/lib/stunnel4/certs/
chown stunnel4:stunnel4 stunnel-client.cert

Vous pouvez renommer le certificat pour plus de lisibilité dans votre répertoire /var/lib/stunnel4/certs/ surtout si vous stockez beaucoup de certificats.

mv stunnel-client.cert client-tintin.cert

Création d’un lien symbolique sur notre fichier

Le lien symbolique est obligatoire pour que les certificats puissent être vu par stunnel.

ln -s client-tintin.cert <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+b3BlbnNzbCB4NTA5IC1oYXNoIC1ub291dCAtaW4gY2xpZW50LXRpbnRpbi5jZXJ0PC9jb2RlPg=="></span>.0

2.2 - Configuration

Création du fichier de configuration. Pour plus de simplicité, le fichier de configuration, porte le nom du service que je vais mettre à disposition. La seule contrainte est qu’il doit être dans /etc/stunnel/ et qu’il est l’extension .conf

cd /etc/stunnel/
vi telnet-serveur.conf

copier le contenu suivant dans telnet-serveur.conf

cert = /var/lib/stunnel4/stunnel-serveur.pem

RNDfile = /dev/urandom

chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4

pid = /stunnel4.pid

socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

verify = 3

CApath = /certs

; Si vous souhaitez disposer de log, décommentez les 2 lignes
;debug = 7
;output = /var/log/stunnel4/stunnel.log

[telnet-ssl]
accept  = 2023
connect = 23

Vous pouvez aussi récupérer le même fichier de conf ici. Pour l’installer faites ceci :

cd /etc/stunnel/
wget http://vdrbox.lautre.net/fichiers/stunnel4/telnet-serveur.conf

Changement des droits sur le fichier telnet-serveur.conf

chown stunnel4:stunnel4 telnet-serveur.conf

Vous pouvez maintenant démarrer stunnel :

/etc/init.d/stunnel4 start

Si vous êtes derrière un routeur pensez à ouvrir le port spécifié à la ligne accept. Dans mon cas, le port 2023 devra être redirigé sur la machine hébergeant stunnel

Conclusion

++++

III - Client

Se placer dans le répertoire qui contiendra notre clé privée

cd /var/lib/stunnel4/

3.1 - Génération de la clé

La clé sera valable 1 an. Si vous vous voulez générer une clé sans durée de validité mettre -days 0

openssl req -newkey rsa:2048 -x509 -nodes -days 365 -out stunnel-client.pem -keyout stunnel-client.pem

(Pour laisser en blanc les demandes d’infos mettre un . (point), le code pays est obligatoire)

Changement des droits et du propriétaire sur la clé

chmod 600 stunnel-client.pem
chown stunnel4:stunnel4 stunnel-client.pem

Génération du paramètre DH

dd if=/dev/urandom count=2 | openssl dhparam -rand - 512 >> stunnel-client.pem

Création du certificat public

openssl x509 -in stunnel-client.pem -out stunnel-client.cert
chown stunnel4:stunnel4 stunnel-client.cert

Vous devez maintenant envoyer votre certificat public stunnel-client.cert à votre serveur par tous moyens à votre convenance.

A la réception du certificat du serveur, le copier dans /var/lib/stunnel4/certs/

cd /var/lib/stunnel4/certs/
chown stunnel4:stunnel4 stunnel-serveur.cert

Vous pouvez renommer le certificat pour plus de lisibilité dans votre répertoire /var/lib/stunnel4/certs/ surtout si vous stockez beaucoup de certificats.

mv stunnel-serveur.cert serveur-tartampillon.cert

Création d’un lien symbolique sur notre fichier

Le lien symbolique est obligatoire pour que les certificats puissent être vu par stunnel.

ln -s serveur-tartampillon.cert <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+b3BlbnNzbCB4NTA5IC1oYXNoIC1ub291dCAtaW4gc2VydmV1ci10YXJ0YW1waWxsb24uY2VydDwvY29kZT4="></span>.0

3.2 - Configuration

Création du fichier de configuration. Pour plus de simplicité, le fichier de configuration, porte le nom du service que je vais mettre à disposition. La seule contrainte est qu’il doit être dans /etc/stunnel/ et qu’il ait l’exention .conf

cd /etc/stunnel/
vi telnet-client.conf
cert = /var/lib/stunnel4/stunnel-client.pem

RNDfile = /dev/urandom

chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4

pid = /stunnel4.pid

socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1

verify = 3

CApath = /certs

; Si vous souhaitez disposer de log, décommentez les 2 lignes
;debug = 7
;output = /var/log/stunnel4/stunnel.log

client = yes

[telnet-ssl]
accept  = 127.0.0.1:4023
connect = hostnameserveur:2023

Vous pouvez aussi récupérer le même fichier de conf ici.

Pour l’installer faites ceci :

cd /etc/stunnel/
wget http://vdrbox.lautre.net/fichiers/stunnel4/telnet-client.conf

Changement des droits sur le fichier telnet-client.conf

chown stunnel4:stunnel4 telnet-client.conf

Il sera nécessaire de modifier le hostnameserveur par le nom DNS du serveur ou par son adresse IP.

Vous pouvez maintenant démarrer stunnel :

/etc/init.d/stunnel4 start

et vous connectez au serveur telnet en utilisant stunnel :

telnet 127.0.0.1 4023

Conclusion

++++

IV - Conclusion

Un fichier de conf stunnel légèrement documenté est disponible ici. Voir aussi le man de stunnel

man stunnel4

Voici un petit schéma de la transaction sans stunnel, toujours avec notre exemple de client/serveur telnet. Entre parenthèses est indiqué le port de la transaction.

En rouge : Transaction Internet

Client telnet (23) <—> Flux non chiffré <—> Serveur telnet (23)

On voit donc que les transactions entre le client et le serveur ne sont pas chiffrées et qu’une personne peut sniffer la transaction et ainsi récupérer le mot de passe.

La transaction avec stunnel.

Client telnet (23) <—> Flux non chiffré <—> (23) stunnel client (2023) <—> Flux chiffré <—> (2023) stunnel serveur (23) <—> Flux non chiffré <—> Serveur telnet (23)

A présent seul la partie en réseau local est non chiffrée. Si stunnel et le serveur (ou le client) tourne sur la même machine, cela reste en localhost donc aucun risque. La partie la plus exposée, (Internet) est maintenant chiffrée grâce à stunnel.

V - Remerciements

Merci à eRen pour ses tests et son aide à la rédaction du tuto.
Merci à un anonyme pour ses tests et les corrections.


Mise à jour :
 Changement d’hébergeur (08.05.2008)
 Divers corrections (16.07.2008)
 Changement typographie (20.12.2008)
 Corrections des liens interne (21.12.2008)

Un message, un commentaire ?

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par les responsables.

Qui êtes-vous ?
Se connecter
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Ajouter un document