Accueil > Linux > Sécurité > Installation de stunnel4
Installation de stunnel4
samedi 2 février 2008, par
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/certsSauvegarde du fichier exemple de stunnel
cd /etc/stunnel
mv stunnel.conf stunnel.conf.exampleAutoriser 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.pemGé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.certVous 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.certVous 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.confcopier 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 = 23Vous 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.confChangement 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
++++
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.pemGé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.certVous 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.certVous 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.confcert = /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:2023Vous 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.confChangement 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
++++
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)