Disque de serveur noir mat dressé comme une porte de coffre-fort dans un centre de données plongé dans l’obscurité, un sceau en forme de trou de serrure émeraude sur sa face, éclairé par un unique faisceau laser venu du hors-champ
Guide

Chiffrer un disque VPS avec LUKS

Chiffrer un disque, c’est la partie facile. Le faire sur une machine que vous ne pouvez pas toucher physiquement — de sorte qu’elle redémarre quand même à 4 h 00 sans que vous soyez devant une console — voilà ce que la plupart des guides passent sous silence. Et être clair sur ce que le chiffrement vous apporte réellement sur du matériel loué, c’est ce que presque tous passent également sous silence. Ce guide fait les trois : un volume racine LUKS2 installé depuis le mode rescue, déverrouillé à distance en SSH, avec un bilan franc des menaces qu’il arrête et de celles qu’il n’arrête pas.

« Est-ce que mes données sont chiffrées ? » est la question qu’on nous pose le plus souvent, et la réponse honnête est : pas tant que vous ne les chiffrez pas vous-même. Nous ne chiffrons pas vos disques à votre place, et c’est délibéré — une clé que nous détenons est une clé qu’on peut nous contraindre à produire. Notre documentation le dit en une ligne ; ce guide en est la version longue, avec les commandes.

Voici la procédure que nous utilisons réellement : un petit /boot non chiffré, tout le reste dans un conteneur LUKS2, et un minuscule serveur SSH logé dans l’initramfs pour que la phrase de passe puisse être saisie depuis n’importe où dans le monde au démarrage. Cela fonctionne à l’identique sur nos quatre régions — Paris, Reykjavík, Zürich et Bucharest — parce que le matériel est identique. Cela fonctionne aussi chez n’importe quel autre hébergeur qui vous donne accès à un mode rescue. La dernière section pose les limites, parce qu’un guide qui ne vous dit que ce que le chiffrement corrige est en train de vous vendre quelque chose.

Ce que le chiffrement de disque protège réellement sur un VPS

Le chiffrement n’est pas un réglage de confidentialité universel. Il répond à une seule question : quelqu’un peut-il lire ces blocs sans la clé ? Tout le reste — qui sait que vous avez loué ce serveur, si le trafic vous est attribuable, si un tribunal peut contraindre quoi que ce soit — relève d’autre chose.

Sur un VPS, LUKS défend réellement contre :

  • Le matériel retiré du service ou défaillant. Les disques NVMe sont remplacés. L’effacement sécurisé d’un disque défaillant n’est pas toujours possible — parfois l’appareil est mort au point que le contrôleur n’accepte plus aucune commande, et il quitte quand même la baie.
  • Une image hors ligne. Un volume copié pendant que le serveur est éteint — lors d’une saisie, d’une migration, d’une erreur — est du texte chiffré et le reste.
  • Les sauvegardes et instantanés qui voyagent. Tout ce qui quitte la machine part chiffré si c’est extrait de la couche bloc en dessous de votre contrôle, et devrait être chiffré côté client si c’est extrait au-dessus.
  • Les blocs résiduels. Quand vous détruisez un serveur, les extents sous-jacents finissent par être réutilisés. Le chiffrement transforme ce qui reste en bruit plutôt qu’en données.

Il ne défend pas contre une machine en fonctionnement. Tant que votre serveur tourne, la clé maîtresse réside en mémoire noyau, et quiconque peut extraire cette mémoire lit votre disque quelle que soit la phrase de passe. Sur une infrastructure louée, cela désigne l’opérateur de l’hyperviseur. Nous le disons dans notre politique de confidentialité et nous le répétons ici : aucune fonctionnalité de chiffrement de disque, chez aucun hébergeur, y compris chez nous, n’y change quoi que ce soit — et tout hébergeur prétendant le contraire fait du marketing, pas de la cryptographie.

Trois modèles, et celui dont vous avez vraiment besoin

Avant de toucher à un terminal, choisissez le modèle. Ils diffèrent énormément en effort, et la plupart des gens ont besoin du premier.

1. Un volume de données chiffré. Le système démarre normalement, non chiffré ; une seule arborescence — un maildir, une base de données, une archive — vit dans un conteneur LUKS que vous ouvrez à la main après chaque démarrage. Dix minutes de travail, pas de mode rescue, aucun risque de vous verrouiller dehors. Si ce qui compte pour vous est un jeu de données plutôt que la machine entière, arrêtez-vous là ; vous obtenez l’essentiel du bénéfice pour presque aucune fragilité. C’est le schéma que nous recommandons sur la page serveur mail anonyme.

2. Un volume racine chiffré avec déverrouillage à distance. Tout sauf /boot est chiffré, et chaque démarrage marque une pause dans l’initramfs jusqu’à ce que vous vous connectiez en SSH et fournissiez la phrase de passe. C’est le modèle que construit le reste de ce guide. Cela coûte une heure la première fois puis une commande SSH par redémarrage, et c’est le seul modèle où les journaux, les caches de paquets, l’historique du shell et le swap sont couverts eux aussi — les endroits où les données fuient sans que personne ne l’ait décidé.

3. Une racine chiffrée qui se déverrouille elle-même auprès d’un serveur de clés que vous contrôlez. Comme le modèle 2, mais Clevis récupère le matériel de déverrouillage auprès d’un serveur Tang situé sur une machine dans une autre juridiction, si bien que les redémarrages se font sans surveillance. Le compromis est précis et mérite d’être compris : le serveur peut désormais se déchiffrer lui-même tant que votre serveur de clés dit oui, ce qui signifie que vous avez déplacé le secret plutôt que de le supprimer — mais vous avez aussi gagné un interrupteur d’arrêt à distance. Traité plus loin.

Pourquoi nous ne chiffrons pas votre disque à votre place

Beaucoup d’hébergeurs annoncent le « chiffrement au repos » comme une simple case à cocher. Il vaut la peine de préciser ce que cette expression signifie en général, car deux choses très différentes se cachent derrière.

Un chiffrement dont l’hébergeur détient la clé protège contre le vol d’un disque et rien d’autre. Si l’hébergeur peut démarrer votre serveur sans vous demander quoi que ce soit, il peut aussi le déchiffrer sans vous demander quoi que ce soit — et quiconque peut contraindre l’hébergeur le peut également. C’est une protection réelle contre le vol et purement décorative face à une procédure judiciaire.

Un chiffrement dont vous détenez la clé est la version qui compte, et elle rend le redémarrage sans surveillance impossible par construction. Ce n’est pas un défaut à corriger ; c’est la propriété qui fait le travail.

Nous ne proposons que la seconde option, non configurée, et vous laissons décider. Ce que nous détenons de notre côté est plus restreint et documenté : les mots de passe root des serveurs sont stockés chiffrés en AES-256-CBC au niveau de la ligne, nous ne conservons aucun journal de flux ni capture de paquets, et un warrant canary signé est publié selon un calendrier fixe. Rien de tout cela ne remplace votre propre clé — c’est simplement ce dont nous répondons en attendant.

Chiffrement, taille de clé et le piège de la mémoire Argon2

Les valeurs par défaut sont bonnes. Deux d’entre elles méritent d’être modifiées.

Chiffrement. aes-xts-plain64 avec une clé de 512 bits est la valeur par défaut et la bonne réponse — les 512 bits correspondent à deux clés de 256 bits, donc il s’agit bien d’AES-256 en mode XTS, et chaque CPU que nous exploitons dispose d’AES-NI. Sur une machine sans accélération AES, vous préféreriez xchacha20,aes-adiantum-plain64, mais ce n’est pas notre matériel, et probablement pas le vôtre non plus.

Dérivation de clé. LUKS2 utilise par défaut Argon2id, qui est volontairement gourmand en mémoire. cryptsetup teste les capacités de votre machine au moment du formatage et choisit un coût mémoire à partir de la RAM qu’il détecte — et voici le piège à l’origine de la plupart des rapports du type « mon serveur chiffré ne démarre plus » : l’initramfs dispose de moins de mémoire utilisable que le système une fois démarré, et si vous avez formaté le volume dans un environnement rescue disposant de plus de RAM que le plan cible, le déverrouillage peut échouer ou être tué au démarrage. Fixez la valeur explicitement. 1 GiB de mémoire Argon2 représente un coût sérieux pour un attaquant, et reste confortablement à la portée d’un S1 disposant de 4 Go :

cryptsetup luksFormat --type luks2 \
  --cipher aes-xts-plain64 --key-size 512 --hash sha256 \
  --pbkdf argon2id --pbkdf-memory 1048576 --pbkdf-parallel 4 \
  /dev/vda2

--pbkdf-memory s’exprime en KiB, donc 1048576 correspond à 1 GiB. Vérifiez ensuite ce qui a réellement été inscrit dans l’en-tête avec cryptsetup luksDump /dev/vda2 — la section de l’emplacement de clé affiche la mémoire et le nombre d’itérations qui seront utilisés, et une lecture rapide coûte bien moins cher qu’un démarrage raté.

La phrase de passe. Argon2 fait gagner du temps face à une phrase de passe faible ; il n’en rattrape pas une. Utilisez une phrase diceware d’au moins six mots. C’est le seul secret du système, et aucune fonction de dérivation de clé ne compense une phrase de passe médiocre.

Comment fonctionne réellement le déverrouillage à distance

Un démarrage Linux avec une racine chiffrée pose un problème de l’œuf et de la poule : le noyau et l’initramfs doivent se charger avant que quoi que ce soit puisse demander une phrase de passe, et ils résident sur le disque que vous essayez justement de déverrouiller. La réponse standard est une petite partition /boot non chiffrée contenant le noyau, l’initramfs et le chargeur de démarrage. Tout le reste va dans LUKS.

L’initramfs marque alors une pause et demande la phrase de passe. Sur un ordinateur portable, vous la tapez. Sur un serveur situé à trois mille kilomètres, il vous faut l’une de ces deux choses :

  • La console. Chaque serveur de votre tableau de bord dispose d’une console noVNC, et elle fonctionne — mais les frappes clavier traversent notre infrastructure, ce qui est précisément la partie que votre clé est censée exclure. Très bien pour une récupération ponctuelle, à éviter en routine.
  • Un serveur SSH dans l’initramfs. dropbear-initramfs pèse environ 200 Ko, active le réseau, écoute sur un port de votre choix, accepte l’une de vos clés publiques, et vous dépose directement sur l’invite de déverrouillage. La phrase de passe est chiffrée de bout en bout depuis votre ordinateur portable jusqu’à l’initramfs. C’est la bonne réponse.

Deux détails piègent souvent les gens. Le Dropbear de l’initramfs a sa propre clé d’hôte, donc son empreinte diffère de celle de votre démon SSH habituel — c’est normal, ce n’est pas une attaque de l’homme du milieu, et cela mérite son propre fichier known_hosts plutôt que l’habitude de taper yes. Et le nom de l’interface doit être le bon : les cartes réseau virtio sous Debian 13 apparaissent en général comme ens3 ou enp1s0, pas eth0. Vérifiez avec ip -br link avant d’écrire la configuration, car se tromper signifie un initramfs sans réseau et un aller-retour par la console.

Redémarrages sans surveillance avec Clevis et Tang

Si la machine doit revenir seule — après une mise à jour du noyau, un redémarrage de l’hôte, une coupure de courant — taper une phrase de passe n’est pas viable. Clevis lie un emplacement de clé LUKS à une politique externe, et Tang est un minuscule serveur d’échange de clés qui met en œuvre la plus simple des politiques utiles.

# on a small server you control, elsewhere
apt install -y tang
systemctl enable --now tangd.socket

# on the encrypted VPS
apt install -y clevis clevis-luks clevis-initramfs
clevis luks bind -d /dev/vda2 tang '{"url":"http://tang.internal:7500"}'
update-initramfs -u -k all

Au démarrage, l’initramfs effectue un échange McCallum-Relyea avec Tang et récupère la clé sans que le serveur Tang ne l’apprenne jamais ni ne voie la phrase de passe. Ces propriétés méritent d’être énoncées précisément :

  • Le VPS se déchiffre lui-même uniquement tant qu’il peut joindre Tang. Coupez Tang, ou faites tourner ses clés, et le démarrage suivant s’arrête net. C’est un véritable interrupteur d’arrêt à distance — inhabituel et utile.
  • Tang ne doit pas être exposé sur l’internet public. Passez par WireGuard ou par un service onion Tor ; nous couvrons le tunnel dans le guide WireGuard.
  • Placez Tang dans une juridiction différente de celle des données. Nos pages sur les juridictions existent précisément pour ce genre de séparation.
  • Conservez une phrase de passe dans un autre emplacement de clé. Clevis est une couche de confort, pas votre seul moyen d’entrer.

Comprenez bien ce que vous avez construit : une machine sans surveillance détient sa propre clé par procuration, si bien qu’un adversaire qui saisit le VPS pendant qu’il tourne, ou qui peut joindre votre serveur Tang, obtient les données. C’est un réel affaiblissement comparé à une phrase de passe gardée dans votre tête. Choisissez cette option quand la disponibilité compte plus que le dernier degré de secret, pas par défaut.

Le swap, les fichiers temporaires, et les endroits où le clair fuit

Une racine chiffrée couvre l’essentiel de la surface, mais quelques chemins écrivent en dehors ou lui survivent.

  • Le swap. Tout ce qui est en RAM peut être paginé sur disque — clés, corps de messages, tampons déchiffrés. Si le swap réside dans le volume chiffré sous forme de swapfile, il est couvert. Une partition de swap séparée ne l’est pas, sauf si vous l’ajoutez à /etc/crypttab avec une clé aléatoire qui change à chaque démarrage : cryptswap /dev/vda3 /dev/urandom swap,cipher=aes-xts-plain64,size=256. Sur un VPS, le swapfile est plus simple et rien ne justifie de préférer la partition.
  • /tmp. Montez-le en tmpfs (tmpfs /tmp tmpfs defaults,nosuid,nodev,size=512M 0 0) pour qu’il ne touche jamais le disque. Plus rapide, en prime.
  • L’hibernation. Elle écrit toute la RAM, y compris votre clé maîtresse, sur le périphérique de swap. Ne l’activez pas. Elle est désactivée par défaut sur nos images.
  • Le /boot non chiffré. Les noyaux, les images d’initramfs et la configuration de GRUB sont lisibles et, plus grave, modifiables par quiconque a un accès hors ligne au disque. LUKS vous donne la confidentialité, pas l’intégrité du démarrage. Si votre modèle de menace inclut quelqu’un qui altère le chargeur de démarrage, le chiffrement seul ne le détectera pas — enregistrez les empreintes de /boot après chaque mise à jour du noyau et vérifiez-les depuis l’extérieur, ou acceptez cette lacune en connaissance de cause.
  • Les instantanés existants et les anciens volumes. Chiffrer aujourd’hui ne fait rien pour une image prise hier. Si le serveur a déjà tourné sans chiffrement avec des données qui comptent pour vous, considérez ces données comme exposées et faites tourner tout ce qui en dérive.

Performance : ce que ça coûte et ce qu’il faut régler

La surcharge est assez faible pour ne pas dicter la décision, mais elle n’est pas nulle. Mesurez avant de spéculer :

cryptsetup benchmark

Sur nos nœuds EPYC, aes-xts avec une clé de 512 bits se situe, au benchmark, dans les quelques gigaoctets par seconde et par cœur — largement au-dessus de ce qu’un seul volume NVMe exigera. Le coût qui se manifeste réellement porte sur la latence et le CPU lors de petites écritures aléatoires, pas sur le débit.

Deux options de LUKS2 comptent sur NVMe, là où les files d’attente de travail de dm-crypt dans le noyau ajoutent de la latence au lieu d’en retirer. Activez-les et rendez-les persistantes dans l’en-tête :

cryptsetup refresh cryptroot \
  --perf-no_read_workqueue --perf-no_write_workqueue --persistent

La troisième option, --allow-discards, transmet le TRIM au périphérique sous-jacent. Elle limite l’amplification d’écriture sur la durée de vie du volume, au prix de révéler quels blocs sont inutilisés — ce qui laisse fuir la taille et la forme approximatives de vos données à quiconque lit le périphérique brut. Activez-la pour un serveur généraliste ; laissez-la désactivée si le fait qu’un volume soit rempli à 3 % est en soi sensible. Il n’existe pas de réponse universellement juste, seulement une décision que vous devez prendre consciemment.

L’en-tête, les emplacements de clé, et le jour où quelque chose tourne mal

L’en-tête LUKS fait environ 16 Mo en tête de la partition, et il contient les copies chiffrées de la clé maîtresse. Endommagez-le — un dd mal tapé, un outil de partitionnement qui réécrit gentiment le début du périphérique — et tout ce qui se trouve derrière disparaît. Il n’existe aucun service de récupération. Nous n’en avons pas de copie.

# back it up, off the server, before you put data on the volume
cryptsetup luksHeaderBackup /dev/vda2 \
  --header-backup-file luks-header-$(date +%F).img

# add a second passphrase while you still have the first
cryptsetup luksAddKey /dev/vda2

# see what is in the header
cryptsetup luksDump /dev/vda2

Deux choses à savoir sur cette sauvegarde. Elle est aussi sensible que le disque : elle contient les emplacements de clé, si bien qu’un ancien en-tête restauré après un changement de phrase de passe acceptera avec plaisir l’ancienne. Conservez-la comme vous conservez la phrase de passe, et détruisez les copies périmées à chaque rotation. Ensuite, LUKS2 vous offre 32 emplacements de clé — utilisez-en au moins deux, le second étant une longue phrase de passe aléatoire conservée ailleurs que votre phrase de passe quotidienne. La panne que cela évite est banale et fréquente : vous faites tourner la phrase de passe, vous la tapez deux fois de façon identique mais erronée, et vous ne le découvrez qu’au redémarrage suivant plutôt qu’à la prochaine connexion.

Ayez aussi un moyen de rentrer. Le mode rescue démarre le serveur depuis notre ISO avec vos clés SSH injectées et le volume chiffré intact, ce qui veut dire que vous pouvez faire cryptsetup open /dev/vda2 rescue && mount /dev/mapper/rescue /mnt et réparer un crypttab cassé ou un mauvais initramfs sans perdre les données. Testez cela une fois, délibérément, pendant que tout va bien.

Ce que le chiffrement ne peut pas faire, dit franchement

La chose la plus utile qu’un guide comme celui-ci puisse faire, c’est de tracer ses propres limites.

  • Il ne protège pas un serveur en fonctionnement. La clé maîtresse reste en mémoire noyau du déverrouillage jusqu’à l’arrêt. Un accès mémoire au niveau de l’hyperviseur le met en échec. Le chiffrement de la mémoire — AMD SEV-SNP et équivalents — est la seule technologie qui change réellement la donne, et nous ne la proposons pas aujourd’hui ; un hébergeur qui prétend que votre VM en fonctionnement lui est opaque, sans SEV, se trompe ou ment.
  • Il ne vous rend pas anonyme. Un disque chiffré à Zürich a quand même une IP, une trace de facturation et une session SSH qui a bien démarré quelque part. C’est un problème différent, et nous avons détaillé les façons dont cela tourne mal dans les erreurs qui vous déanonymisent.
  • Il ne change rien à ce qu’un tribunal peut ordonner. La juridiction régit la contrainte ; le chiffrement régit la lisibilité. Dans certaines juridictions, vous pouvez être personnellement sommé de divulguer une phrase de passe. Notre guide sur les procédures judiciaires couvre ce que nous appliquons et ce que nous n’appliquons pas.
  • Il ne survit pas à une phrase de passe perdue. C’est voulu, et cela mérite d’être répété, car le ticket de support nous demandant de l’aide arrive environ une fois par mois, et la réponse est toujours la même.
  • Il n’authentifie pas la chaîne de démarrage. La confidentialité n’est pas l’intégrité. /boot est lisible et modifiable hors ligne.

Ce qu’il fait vraiment, c’est supprimer toute une classe d’exposition — tout ce qui arrive à un disque quand il ne tourne pas, ce qui représente l’essentiel de ce qui arrive aux disques. Cela vaut bien une heure. Combinez-le avec une inscription no-KYC, un paiement en Monero et une juridiction choisie exprès, et chaque couche couvre une défaillance différente. Aucune ne les couvre toutes.

  1. Déployez le serveur et démarrez-le en mode rescue

    Déployez n’importe quel plan et n’importe quelle région avec une image Debian 13 standard — le système installé est sur le point d’être remplacé, donc le choix de l’image importe à peine. Allez ensuite dans Server → Recovery → Boot into rescue. L’environnement rescue injecte les clés SSH déjà présentes sur votre compte et laisse le disque intact, si bien que vous obtenez un shell root avec /dev/vda démonté et libre. Notez que l’empreinte de la clé d’hôte du rescue diffère de celle du système installé ; c’est normal.

  2. Partitionnez le disque : un petit /boot en clair, un grand conteneur LUKS

    Deux partitions. Un gigaoctet pour /boot — largement suffisant pour plusieurs noyaux — et le reste pour le volume chiffré.

    sgdisk --zap-all /dev/vda
    sgdisk -n1:0:+1G   -t1:8300 -c1:boot   /dev/vda
    sgdisk -n2:0:0     -t2:8309 -c2:crypt  /dev/vda
    partprobe /dev/vda && lsblk /dev/vda

    Le type 8309 marque la seconde partition comme un volume Linux LUKS. Si votre serveur démarre en mode UEFI, faites de la partition 1 un ESP (-t1:ef00, formaté en FAT32 et monté sur /boot/efi) et ajoutez un /boot séparé d’1 Go ; l’agencement BIOS ci-dessus est celui que nos images utilisent par défaut.

  3. Créez le volume LUKS2 et ouvrez-le

    Fixez explicitement le coût mémoire d’Argon2 pour que l’initramfs puisse se le permettre plus tard.

    cryptsetup luksFormat --type luks2 \
      --cipher aes-xts-plain64 --key-size 512 --hash sha256 \
      --pbkdf argon2id --pbkdf-memory 1048576 --pbkdf-parallel 4 \
      /dev/vda2
    
    cryptsetup open /dev/vda2 cryptroot
    mkfs.ext4 -L root /dev/mapper/cryptroot
    mkfs.ext2 -L boot /dev/vda1

    Utilisez une phrase de passe d’au moins six mots diceware et notez-la quelque part sur support physique avant de continuer. Personne ne peut la récupérer à votre place — c’est précisément ce que vous payez.

  4. Installez Debian dans le volume chiffré

    Montez la nouvelle racine, installez-y un système de base avec debootstrap, et liez les systèmes de fichiers du noyau pour que le chroot se comporte correctement.

    mount /dev/mapper/cryptroot /mnt
    mkdir -p /mnt/boot && mount /dev/vda1 /mnt/boot
    
    debootstrap --arch=amd64 trixie /mnt http://deb.debian.org/debian
    
    for d in dev dev/pts proc sys run; do mount --bind /$d /mnt/$d; done
    chroot /mnt /bin/bash

    Dans le chroot, installez les éléments qui rendent une racine chiffrée démarrable et joignable :

    apt update && apt install -y linux-image-amd64 grub-pc \
      cryptsetup cryptsetup-initramfs dropbear-initramfs \
      openssh-server ifupdown ca-certificates locales
  5. Rédigez crypttab, fstab et la configuration réseau de l’initramfs

    crypttab indique à l’initramfs quel périphérique déverrouiller ; initramfs.conf lui indique comment se connecter au réseau au préalable. Utilisez l’UUID LUKS, jamais /dev/vda2 — les noms de périphériques changent.

    echo "cryptroot UUID=$(blkid -s UUID -o value /dev/vda2) none luks,discard" \
      > /etc/crypttab
    
    cat > /etc/fstab <<'EOF'
    /dev/mapper/cryptroot  /      ext4  defaults,noatime  0 1
    LABEL=boot             /boot  ext2  defaults          0 2
    tmpfs                  /tmp   tmpfs defaults,nosuid,nodev,size=512M 0 0
    EOF
    
    # DHCP on the virtio NIC. Confirm the name with `ip -br link` first.
    echo 'IP=:::::ens3:dhcp' >> /etc/initramfs-tools/initramfs.conf
    echo 'DEVICE=ens3'       >> /etc/initramfs-tools/initramfs.conf

    Retirez ,discard de la ligne crypttab si vous préférez ne pas révéler quels blocs sont inutilisés. Pour une adresse statique plutôt que du DHCP, l’ordre des champs est IP=<ip>::<gateway>:<netmask>::<iface>:off.

  6. Placez votre clé de déverrouillage dans l’initramfs et verrouillez Dropbear

    Seule la clé que vous placez ici peut déverrouiller la machine au démarrage. Gardez-la séparée de votre clé SSH habituelle, pour que perdre l’une ne fasse pas perdre les deux.

    install -d -m 0755 /etc/dropbear/initramfs
    cat > /etc/dropbear/initramfs/authorized_keys <<'EOF'
    ssh-ed25519 AAAAC3Nza... unlock@laptop
    EOF
    chmod 0600 /etc/dropbear/initramfs/authorized_keys
    
    cat > /etc/dropbear/initramfs/dropbear.conf <<'EOF'
    DROPBEAR_OPTIONS="-p 2222 -s -j -k -I 180 -c cryptroot-unlock"
    EOF
    
    update-initramfs -u -k all
    dropbearkey -y -f /etc/dropbear/initramfs/dropbear_ed25519_host_key | grep -i fingerprint

    -p 2222 maintient le service de déverrouillage hors du port 22, pour qu’il n’entre jamais en collision avec le sshd du système en fonctionnement ; -s interdit les connexions par mot de passe, -j et -k désactivent la redirection de ports, -I 180 coupe les sessions inactives, et -c cryptroot-unlock fait que toute connexion réussie mène directement à l’invite de phrase de passe. Notez cette empreinte dès maintenant — c’est ainsi que vous saurez que vous parlez bien à votre propre initramfs. Sur Debian 11 et les versions antérieures, ces fichiers résident plutôt dans /etc/dropbear-initramfs/.

  7. Installez le chargeur de démarrage, définissez un mot de passe root, redémarrez

    GRUB s’installe sur le disque, pas sur la partition. Comme /boot n’est pas chiffré, GRUB_ENABLE_CRYPTODISK n’est pas nécessaire.

    grub-install /dev/vda
    update-grub
    passwd root
    echo 'cryptovps' > /etc/hostname
    exit                    # leave the chroot
    
    umount -R /mnt
    cryptsetup close cryptroot
    reboot

    Faites ensuite sortir le serveur du mode rescue depuis le tableau de bord pour qu’il démarre depuis le disque. Gardez la console noVNC ouverte pour ce premier démarrage — si l’initramfs démarre sans réseau, vous le verrez là, et vous pourrez corriger le nom de l’interface au lieu de le deviner.

  8. Déverrouillez à distance et vérifiez que le volume est bien chiffré

    Patientez trente secondes, puis connectez-vous à l’initramfs sur le port 2222. Épinglez sa clé d’hôte dans un fichier qui lui est propre, pour qu’elle ne se mélange jamais avec votre known_hosts habituel.

    ssh -p 2222 -o UserKnownHostsFile=~/.ssh/known_hosts.initramfs \
        -i ~/.ssh/id_ed25519_unlock root@<server-ip>
    # the passphrase prompt appears immediately; type it, the session closes,
    # and the machine finishes booting into the decrypted root.
    
    # once you are in the running system:
    lsblk -o NAME,FSTYPE,MOUNTPOINT
    cryptsetup status cryptroot
    cryptsetup luksDump /dev/vda2 | head -20

    cryptsetup status doit indiquer type: LUKS2, cipher: aes-xts-plain64 et keysize: 512 bits. Faites maintenant les deux choses que tout le monde remet à plus tard : sauvegardez l’en-tête LUKS hors du serveur, et ajoutez un second emplacement de clé. Puis redémarrez une fois de plus, exprès, pour prouver que le chemin de déverrouillage fonctionne quand vous ne vous attendez pas à ce qu’il échoue.

Comparatif

Trois façons de chiffrer, et ce que chacune vous coûte

Les trois modèles pratiques de chiffrement de disque sur un VPS, comparés sur la question qui les départage : ce qui se passe au prochain redémarrage.
ModèleCe qui est chiffréAu prochain redémarrageEffort de mise en placeIdéal pour
Volume de données chiffréUne arborescence dans un conteneur LUKSLe serveur démarre normalement ; vous ouvrez le conteneur à la main~10 minutes, sans mode rescueUn seul jeu de données sensible — maildir, base de données, archive
Racine chiffrée + déverrouillage à distance en SSHTout sauf /boot — journaux, swap, caches, historiqueLe démarrage marque une pause dans l’initramfs jusqu’à ce que vous vous connectiez en SSH et tapiez la phrase de passe~1 heure, installation depuis le mode rescueUne machine dont tout l’état est sensible et dont vous pouvez surveiller les redémarrages
Racine chiffrée + Clevis/TangTout sauf /bootSe déverrouille seul tant qu’il peut joindre votre serveur Tang ; s’arrête net dans le cas contraire~1 heure, plus un second serveur que vous contrôlezMachines sans surveillance où la disponibilité prime sur le dernier degré de secret
FAQ

Questions qui méritent une réponse

CryptoVpsHost peut-il lire les données sur mon serveur ?

Sur un serveur en fonctionnement, oui en principe — et c’est aussi vrai pour n’importe quel hébergeur d’infrastructure virtualisée, y compris ceux qui prétendent le contraire. La clé maîtresse d’un volume LUKS déverrouillé réside en mémoire noyau, et l’hyperviseur possède cette mémoire. Ce que LUKS supprime, c’est tout le reste : un volume éteint, un disque retiré du service, une image copiée, une sauvegarde. Nous ne chiffrons pas les disques à votre place précisément parce qu’une clé que nous détenons est une clé qu’on peut nous contraindre à produire, et nous préférons le dire franchement plutôt que de vendre une case à cocher. Si votre modèle de menace inclut l’opérateur d’une machine en fonctionnement, aucune fonctionnalité de chiffrement de disque, chez qui que ce soit, ne résout ce problème.

Le chiffrement intégral du disque ralentit-il un VPS ?

À peine, sur du matériel équipé d’AES-NI — ce qui est le cas de tout notre matériel. Lancez cryptsetup benchmark et vous verrez aes-xts se situer dans les quelques gigaoctets par seconde et par cœur, bien au-dessus de ce que demande un seul volume NVMe. Le coût mesurable, c’est un peu de latence et de CPU en plus sur les petites écritures aléatoires, pas sur le débit. Sur NVMe, régler --perf-no_read_workqueue et --perf-no_write_workqueue avec --persistent élimine l’essentiel de ce qui reste.

Que se passe-t-il si je perds ma phrase de passe ?

Les données sont perdues. Il n’y a aucune récupération possible, aucune clé maîtresse conservée sous séquestre, et aucun ticket de support n’y changera quoi que ce soit — nous n’en avons jamais eu de copie. C’est précisément ce que vous payez, et c’est pourquoi ce guide répète à deux reprises de sauvegarder l’en-tête LUKS hors du serveur et d’ajouter un second emplacement de clé avec une longue phrase de passe différente avant de mettre de vraies données sur le volume. Une phrase de passe conservée à un seul endroit, y compris uniquement dans votre tête, est un point de défaillance unique.

Le /boot est-il chiffré lui aussi ?

Non, et c’est normal. Le noyau et l’initramfs doivent être lisibles avant que quoi que ce soit puisse demander une phrase de passe, donc ils résident sur une petite partition en clair. GRUB peut lire un /boot chiffré avec GRUB_ENABLE_CRYPTODISK, mais cela ne fait que déplacer le problème — l’étape du chargeur de démarrage qui précède reste en clair. La formulation honnête est que LUKS vous donne la confidentialité des données au repos, pas l’intégrité de la chaîne de démarrage. Si l’altération hors ligne de /boot fait partie de votre modèle de menace, calculez son empreinte après chaque mise à jour du noyau et vérifiez-la depuis l’extérieur de la machine.

Le serveur peut-il redémarrer sans que je tape quoi que ce soit ?

Seulement si vous lui donnez un moyen d’obtenir la clé, ce qui affaiblit forcément la garantie. La version propre consiste à lier Clevis à un serveur Tang sur une machine que vous contrôlez, dans une autre juridiction : le VPS se déverrouille seul tant qu’il peut joindre Tang, et s’arrête net dans le cas contraire — ce qui fait aussi office d’interrupteur d’arrêt à distance. Joignez Tang via WireGuard ou un service onion Tor plutôt que par l’internet public, et gardez une phrase de passe dans un second emplacement de clé pour que Clevis ne soit jamais votre seul moyen d’entrer.

Est-ce possible sur n’importe quelle image d’OS, ou seulement sous Debian ?

N’importe quelle image Linux dotée d’un mode rescue fonctionne ; les commandes ici sont pour Debian 13 et se transposent directement sur Ubuntu 24.04. Sur Rocky, Alma et Fedora, l’outillage repose sur dracut plutôt que sur initramfs-tools, donc le déverrouillage à distance utilise le module dracut-crypt-ssh ou un initramfs dracut compatible réseau à la place de dropbear-initramfs — le côté LUKS est identique. Si vous préférez ne pas partir d’un shell rescue du tout, téléversez une image ISO personnalisée allant jusqu’à 4 GiB et utilisez l’installateur de votre distribution, qui proposera le LVM chiffré comme option standard ; vous ajoutez ensuite le déverrouillage à distance après coup.

Faut-il choisir le chiffrement ou une autre juridiction ?

Ils résolvent des problèmes différents, et la question repose sur un faux choix. Le chiffrement décide si les blocs sont lisibles ; la juridiction décide qui peut contraindre quoi, et à quelle vitesse. Un volume LUKS à Paris et un volume en clair à Zürich échouent de façons complètement différentes. La plupart des gens qui posent cette question veulent les deux, plus une inscription no-KYC pour qu’il n’y ait rien à divulguer dès le départ — chaque couche comble une brèche que les autres laissent ouverte. Les pages sur les juridictions détaillent ce que chacune de nos quatre régions offre réellement.

Deploy your offshore server.

Choisissez une région. Choisissez un plan. Collez une clé. Payez. Les 47 prochaines secondes sont pour nous.