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
  1. 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:

    1. Éditez le socket systemd

       systemctl edit tangd.socket
      
    2. 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)

    1. 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
      
  2. Démarrer le socket et le lancer au démarrage

     systemctl enable tangd.socket
     systemctl start tangd.socket
    
  3. 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

  1. Installer les paquets

     yum install clevis clevis-luks clevis-systemd
    
  2. Activer le service au démarrage

     systemctl enable clevis-luks-askpass.path
    
  3. 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.

  1. É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

  2. Reconstruire initramfs (ici sous CentOS)

     dracut -f
    
  3. Tester le montage de la partition

     clevis luks unlock -d /dev/mapper/«partition luks» -n partition_chiffree
     mount «point-de-montage-de-la-partition»