Motion : sécuriser avec stunnel4

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