Déchiffrement LUKS auto avec Clevis et Tang

Auteur :
Première publication :

Cet article a pour but de décrire le dispositif de déchiffrement automatique de volumes chiffrés avec LUKS. Il ne décrit pas la manière de créer un volume chiffré, ni le déchiffrement manuel (qui restera possible en plus du déchiffrement automatique).

Contexte

Lorsqu’un serveur démarre, ses volumes chiffrés ne sont pas déchiffrés et pas montés. Par défaut, si les partitions ne sont pas en montage automatique il faut faire les actions à la main après le démarrage, et si les partitions sont configurées pour un montage auto alors il faut saisir la passphrase au démarrage.

Dans notre cas (chez Evolix), ce déchiffrement n’est pas fait automatiquement car nous n’avons pas mis en place de moyen de déchiffrement stocké localement de manière sécurisée.

En revanche, en utilisant le binôme « Clevis + Tang » il est possible de faire ce déchiffrement automatiquement grace à un moyen de déchiffrement distant et sécurisé.

Clevis + Tang

Clevis est un outil qui permet d’automatiser le déchiffrement. Parmi les méthodes possibles il y a l’utilisation d’une ressource réseau pour obtenir des éléments de déchiffrement.

Tang est cette ressource réseau (un très simple serveur HTTP) qui stocke et communique des éléments qui seront utilisés par Clevis pour le déchiffrement.

C’est un peu comme si on stockait la passphrase ailleurs sur le réseau pour éviter de la stocker localement. En réalité ça n’est pas la passphrase elle-même mais une partie d’une information qui va autoriser le déchiffrement. Si le serveur qui a son volume chiffré (et Clevis configuré) est séparé (en termes de réseau) du serveur Tang, alors le déchiffrement automatique ne peut pas avoir lieu.

Il est important de préciser que la partie Tang doit être protégée, car si on arrive à extraire à la fois le volume chiffré et les données de Tang, il devient possible de déchiffrer le volume.

Par exemple, si la partie Clevis et la partie Tang sont physiquement proches (dans la même baie ou salle de datacenter, ou dans 2 serveurs virtuels gérés par le même hyperviseur) il faut que les données de Tang soient stockées de manière chiffrées elles-aussi. On retrouve alors le problème de départ : comment déchiffrer le volume qui contient ces données ?

Jusque-là nous avons accepté les contraintes d’un déchiffrement manuel pour Tang, en estimant que ça sera suffisamment rare pour ne pas être problématique. Mais on peut envisager de déchiffrer automatiquement les données de Tang grâce un autre serveur Tang qui ne souffre pas des limites de proximité. On ne fait que reporter le problème, mais ça reste envisageable si on a plusieurs frontières réseau et physiques disponibles.

Il est aussi conseillé de protéger Tang au niveau réseau ; si possible avec des restrictions d’interfaces d’écoute (uniquement sur un LAN…), et à minima avec des restrictions d’IP source pour ne pas que n’importe qui puisse récupérer en HTTP les informations de Tang.

Scenarios opérationnels

Si le serveur Tang est le seul à redémarrer (pour une maintenance…), alors il faut s’y connecter (en console ou SSH), déverrouiller/monter le volume chiffré pour Tang. Et c’est tout. Tang ne doit être disponible qu’au moment du déchiffrement automatique.

Si un serveur avec Clevis redémarre et le serveur Tang est disponible, alors le déchiffrement du volume et le montage de la partition va se faire automatiquement. Il n’y a aucune action manuelle à faire.

Si un serveur avec Clevis redémarre et le serveur Tang n’est pas disponible, alors on peut faire le déchiffrement manuellement, ou bien rendre le serveur avec Tang disponible et déclencher le déverrouillage par Clevis.