Stunnel permet de chiffrer / déchiffrer par SSL la communication entre un client distant (mon PC quand je suis connecté par internet) avec mon serveur local (à la maison). Dans mon cas, l’envoi d’une identification par mot de passe ne peut pas être interceptée.
D’une manière générale, stunnel permet par un jeu avec les ports tcp/ip, de chiffrer les échanges d’une application qui n’est pas conçue avec cette fonction. Par exemple :
un serveur mail qui écoute sur le port 25 un traffic non chiffré, et des clients qui envoient du traffic mail sur le port 465. Stunnel écoute sur le port 465, déchiffre le traffic, puis le transmet sur le port 25, ou le serveur mail peut écouter.
Installer stunnel4 :
root@bananapi ~ # apt-get install stunnel [...] Setting up stunnel4 (3:5.06-2+deb8u1) ... Warning: The home dir /var/run/stunnel4 you specified can't be accessed: No such file or directory Adding system user `stunnel4' (UID 109) ... Adding new group `stunnel4' (GID 115) ... Adding new user `stunnel4' (UID 109) with group `stunnel4' ... Not creating home directory `/var/run/stunnel4'. SSL tunnels disabled, see /etc/default/stunnel4 apt-get install stunnel 5.81s user 2.21s system 35% cpu 22.521 total
Configurer stunnel4 :
À lire les commentaires de l’installation, il n’est pas activé. Pour l’activer, éditer /etc/default/stunnel4 :
nano /etc/default/stunnel4
et l’activer avec :
ENABLED=1
Sur Rasbpian, un README dans /etc/stunnel explique la suite de la configuration :
Stunnel 4 configuration files. Files found under the /etc/stunnel directory that end with .conf are used by the stunnel4 service as configuration files, and each will be used to start a daemon process setting up a tunnel with the given configuration. Note that this directory is initially empty, as the settings you may want for your tunnels are completely system dependent. In order to have the tunnels start up automatically on system boot you must *also* set ENABLED to 1 in /etc/default/stunnel4 A sample configuration file with defaults may be found at /usr/share/doc/stunnel4/examples/stunnel.conf-sample
Mais avant, il faut configurer SSL.
Générer les clefs & certificats pour SSL
Stunnel a besoin d’une clef privée pour chiffrer les données.
Aller dans le répertoire de configuration de stunnel, qui contiendra les clefs & certificats :
cd /etc/stunnel/
Générer la clef privée
Utiliser openssl pour générer une clef RSA privée 2048-bit :
openssl genrsa -out key.pem 2048 Generating RSA private key, 2048 bit long modulus ...................................................................................+++ .............................................+++ e is 65537 (0x10001)
Générer la le certificat auto-signé associé
Pour utiliser SSL, un serveur stunnel doit disposer d’un certificat SSL, qui requiert une clef privée et une signature. Il faut donc générer un certificat, et utiliser notre clef privée pour le signer. Pour ce faire :
openssl req -new -x509 -key key.pem -out cert.pem -days 365
Je dispose maintenant de ma clef privée dans le fichier key.pem et du certificat de mon serveur associé à cette clef dans cert.pem :
/etc/stunnel # ll total 12 -rw-r--r-- 1 root root 1342 Dec 20 17:10 cert.pem -rw-r--r-- 1 root root 1675 Dec 20 17:04 key.pem -rw-r--r-- 1 root root 615 Jun 28 07:29 README
Rassembler ces deux fichiers key.pem et cert.pem dans un seul fichier pour stunnel :
cat key.pem cert.pem >> /etc/stunnel/stunnel.pem
Configurer stunnel
stunnel doit tourner sur le serveur et sur le client qui se connecte à distance.
Configuration du serveur
Créer un fichier de configuration à partir du modèle :
cp /usr/share/doc/stunnel4/examples/stunnel.conf-sample /etc/stunnel/stunnel.conf
Editer le fichier stunnel.conf avec :
output = /var/log/stunnel4/stunnel.log pid = /var/run/stunnel4.pid cert=/etc/stunnel/stunnel.pem key = /etc/stunnel/stunnel.pem
Voici la configuration pour SSH dans ce même fichier. Elle permet d’orienter les connections SSL entrantes vers le serveur stunnel sur le port 443 (il est possible de spécifier l’adresse IP avant le port), puis de les router une fois déchiffrées vers le port 22 de localhost.
[ssh] accept = 443 connect = 127.0.0.1:22
Commenter les services suivants, qui peuvent générer des erreurs :
; Example SSL server mode services ;[pop3s] ;accept = 995 ;connect = 110 ;[imaps] ;accept = 993 ;connect = 143 ;[ssmtp] ;accept = 465 ;connect = 25
Configuration du client
Il s’agit de la machine distante, qui accède au serveur
A COMPLÉTER