Déchiffrement LUKS à distance
Utilité de dropbear SSH
Le Dropbear SSH permet de redémarrer à distance un serveur avec un disque dur entièrement chiffré (Full Disk Encryption - FDE). Grâce à Dropbear, vous pouvez accéder à un shell SSH lors de la phase de démarrage (initrd). Vous pourrez alors entrer votre passphrase de déchiffrement non seulement physiquement sur le serveur, mais aussi à distance via le réseau.
Prérequis
- Un serveur DHCP qui attribue une adresse IP à votre serveur. Vous pouvez également configurer une IP statique, mais cela ne sera pas couvert ici.
- Avoir installé votre serveur avec le disque dur entièrement chiffré, par exemple via l’assistant d’installation d’Ubuntu ou Debian.
Ce guide a été écrit lors de l’installation de
levkoy
se basant sur une Ubuntu 24.04 LTS (Noble). - Disposer des outils nécessaires pour gérer le pare-feu et le NAT pour le port 22 utilisé par Dropbear. Comme ce serveur SSH est temporaire pendant le démarrage, vous pouvez utiliser les mêmes règles que pour votre serveur SSH habituel, ou utiliser Tailscale.
- Recommandé : Utiliser Tailscale pour accéder à votre serveur. Tailscale est simple à configurer et permet un accès VPN sécurisé. (Il existe également Headscale, une alternative open-source.)
Installation
Les deux outils utilisés ci-dessous sont disponibles sous forme de paquets pour Ubuntu/Debian.
Accès SSH via Dropbear
Installation de dropbear-initramfs
sudo apt update
sudo apt install dropbear-initramfs
Configuration
- Dans le fichier
/etc/dropbear/initramfs/dropbear.conf
, ajoutezDROPBEAR_OPTIONS="-I 180 -j -k -p 22 -s -c cryptroot-unlock"
pour forcer la commande de déverrouillage. Adaptez le port si nécessaire. - Ajoutez votre clé publique SSH dans
/etc/dropbear/initramfs/authorized_keys
. Si vous utilisez Tailscale, cette étape n’est pas nécessaire car nous utiliserons Tailscale SSH. - Régénérez votre initrd avec la commande suivante :
sudo update-initramfs -c -k all
.
Configuration de la machine de déchiffrement à distance
Vous pouvez ajouter la configuration suivante à votre fichier SSH ~/.ssh/config
:
...
# Authentification avec une clé SSH
Host node-initrd
Hostname 5.4.3.2 # IP de votre serveur
Port 22
User root
RequestTTY yes
RemoteCommand cryptroot-unlock
HostKeyAlgorithms ssh-rsa
IdentityFile ~/.ssh/private_key.pem
PubkeyAuthentication yes
UserKnownHostsFile /dev/null
...
Accès sécurisé via Tailscale (optionnel)
Vous pouvez utiliser le projet tailscale-initramfs pour enregistrer votre serveur de manière pérenne dans votre tailnet.
Installation de tailscale-initramfs
Un QR code sera affiché à la fin des instructions suivante, il faut le scanner via votre téléphone et se connecter a votre compte tailscale pour y joindre votre node.
# Ajouter le dépôt
sudo mkdir -p --mode=0755 /usr/local/share/keyrings
curl -fsSL https://raw.githubusercontent.com/lugoues/tailscale-initramfs/gh-pages/public.key | sudo tee /usr/local/share/keyrings/tailscale-initramfs-keyring.asc >/dev/null
echo 'deb [signed-by=/usr/local/share/keyrings/tailscale-initramfs-keyring.asc] https://lugoues.github.io/tailscale-initramfs/repo stable main' | sudo tee /etc/apt/sources.list.d/tailscale-initramfs.list >/dev/null
# Installer tailscale-initramfs
sudo apt update
sudo apt-get install tailscale-initramfs
# Lancer la configuration puis suivez le guide pour configurer vos ACL
sudo setup-initramfs-tailscale --ssh
Régénérez votre initrd avec la commande sudo update-initramfs -c -k all
.
Configuration de la machine de déchiffrement à distance
Ajoutez la configuration suivante à votre fichier SSH ~/.ssh/config
. Avec Tailscale, l’authentification passe par votre tailnet, donc un mot de passe ou une clé SSH ne sont pas nécessaires.
...
# Authentification sans clé via Tailscale SSH
Host node-initrd
Hostname 100.111.10.11 # IP Tailscale de votre serveur
Port 22
User root
RequestTTY yes
RemoteCommand cryptroot-unlock
HostKeyAlgorithms ssh-rsa
UserKnownHostsFile /dev/null
...
Utilisation
Pour déchiffrer le disque dur, il vous suffira d’exécuter la commande ssh node-initrd
, puis d’entrer votre passphrase LUKS.
Pour aller plus loin
- Consultez les pages man de Dropbear :
man dropbear
- Consultez les pages man de Tailscale :
man tailscale
- Exemple de configuration de dévérouillage via tor