Déchiffrement LUKS à distance

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, ajoutez DROPBEAR_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