Chiffrement serveur transparent avec clevis et tang - 2 - La pratique
Sommaire
Dans le cas suivant on va s'intéresser au déchiffrement automatique d'une partition de données et non du système entier.
Le serveur Tang
Le serveur s'installe avec un paquet (ici par exemple CentOS)
yum install -y tang
-
Changer le port et l'IP sur lesquels le serveur écoute Tang écoute par défaut sur le port 80 ce qui peut entrer en conflit avec d'autre service. Pour changer ce port d'écoute, on peut procéder comme suit:
-
Éditez le socket systemd
systemctl edit tangd.socket
-
Dans le fichier qui s'ouvre, ajoutez :
[Socket] ListenStream= ListenStream=192.168.20.2:7891
Ici par exemple tang écoutera sur le port 7891 de l'IP 192.168.20.2 (à remplacer par vos valeurs)
-
Donnez au serveur l'accès au port par SELinux Si vous utilisez SELinux (ce que nous recommandons) voici comment autoriser tang sur le port choisi
semanage port -a -t http_port_t -p tcp 7891
-
-
Démarrer le socket et le lancer au démarrage
systemctl enable tangd.socket systemctl start tangd.socket
-
Ajoutez au script de votre parefeu
# serveur seveur iptables -A INPUT -i «nom de l'interface» -s «ip qui a le droit d'interroger le serveur» -p tcp --dport «port sur lequel écoute tang» -j ACCEPT
Le serveur est maintenant prêt, passons à la configuration de la machine qui devra s'auto-déchiffrer.
Le cilent Clevis
-
Installer les paquets
yum install clevis clevis-luks clevis-systemd
-
Activer le service au démarrage
systemctl enable clevis-luks-askpass.path
-
Indiquer au client à quel(s) serveur(s) tang se connecter :
CLEVIS_CFG='{"t":1,"pins":{"tang":[{"url":"http://mon.url.fr:7891"},{"url":"http://monautre.url.fr:7891"}]}}' clevis luks bind -d /dev/mapper/«partition luks» -f sss $CLEVIS_CFG
REMARQUE : Ici on voit que l'on indique plusieurs url à clevis. En effet dans un environnement en production il est bon de s'assurer qu'un serveur tang sera toujours disponible pour répondre aux requêtes. On peut également remplacer les URL par des IPs pour éviter que le déchiffrement dépende de la résolutions DNS.
-
Éditer les fichiers définisant vos partitions
-
fichier
/etc/crypttab
partition_chiffree UUID=«uuid-de-la-partition-luks» none _netdev,luks,timeout=10
REMARQUE : ici partition_chiffree est un nom arbitraire, tout autre nom sans espace ou caractère spécial convient (à condition de conserver le même)
-
fichier
/etc/fstab
/dev/mapper/partition_chiffree «point-de-montage-de-la-partition» ext4 defaults,_netdev 1 2
REMARQUE : L'élément impportant ici est _netdev qui indique que la partition doit être montée uniquement une fois le réseau disponible
-
-
Reconstruire initramfs (ici sous CentOS)
dracut -f
-
Tester le montage de la partition
clevis luks unlock -d /dev/mapper/«partition luks» -n partition_chiffree mount «point-de-montage-de-la-partition»