L'auto-hébergement avec Proxmox sur partitions chiffrées

Après des années à héberger mes services sur un Raspberry Pi 3 puis 4, j’ai décidé d’investir dans une machine plus sérieuse: un Lenovo Thinkcentre Tiny.

Le serveur

Voici ses atouts:

  • Un processeur Celeron G3900T double cœur peu gourmand
  • Une architecture x86-64
  • Avec VT-x pour la virtualisation!!
  • Un disque mécanique SATA de 500Go
  • RAM amovible (4Go passées à 16Go)
  • Un port ethernet 1Gbps
  • Des ports USB3
  • Une consommation mesurée à la prise de 11 Watts

Évidemment on est loin d’une machine pour datacenter mais je cherchais une machine économe, silencieuse et compacte. J’ai trouvé ce modèle à 40€ sur un site de petites annonces populaire, j’en ai pris deux et j’ai également acheté 16Go de RAM histoire de pouvoir faire tourner plusieurs machines virtuelles dessus (avant que les prix flambent).

Il est relativement compliqué de voler un serveur dans un datacenter, mais les vols chez les particuliers ne sont pas si rares. Dans le cas où ça arriverait je préfèrerais ne pas avoir à me poser de question par rapport à la sécurité des données présentes sur le serveur. Il faut donc chiffrer les données.

Il faut pouvoir entrer la clé de déchiffrement des disques sans forcément avoir un accès physique à la machine. Il existe plusieurs solutions à cela, celle que j’ai choisie est de me connecter par SSH à la machine pour entrer la clé de déchiffrement des disques avant que le système principal ne démarre.

L’image d’installation de Proxmox ne permet pas de chiffrer les disques, il faut utiliser l’installateur Debian NetiInstall puis installer Proxmox. Il est également possible de chiffrer un système existant mais c’est bien plus compliqué.

Il est préférable de lancer l’installeur Debian en mode avancé afin de paramétrer le système avec une adresse IP fixe: c’est nécessaire pour Proxmox et ça évite d’avoir à corriger la configuration réseau par la suite.

Lorsque c’est demandé, donnez un mot de passe à root (Proxmox en a besoin par exemple pour la gestion des clusters) et créez un utilisateur basique.

Lors de la configuration des disques choisissez “Utiliser tout un disque avec LVM chiffré” (ou adaptez à vos besoins).

Les seuls paquets à installer sont les utilitaires usuels du système et le serveur SSH (décocher l’environnement de bureau).

Quand le système est installé et a redémarré, on peut passer à la suite.

Actuellement votre machine est accessible avec SSH avec authentification par mot de passe ce qui n’est pas très sûr. Configurez l’authentification par clés et désactivez l’authentification par mot de passe. La clé publique vous servira pour la suite.

Le wiki d’Ubuntu-fr détaille bien comment faire: Authentification par clés. Le principe reste le même pour les autres distributions.

Installez les paquets nécessaires:

apt install cryptsetup-initramfs dropbear-initramfs

Dans /etc/dropbear/initramfs/dropbear.conf remplissez cette ligne:

`DROPBEAR_OPTIONS="-s -c cryptroot-unlock"`

Dropbear est un serveur SSH léger. Cette configuration force l’utilisation de clés SSH et executera uniquement la commande permettant de déchiffrer les disques (l’utilisateur ne pourra pas envoyer d’autre commande).

Créez le fichier /etc/dropbear/initramfs/authorized_keys dans lequel vous placerez votre ou vos clés SSH publiques, une clé par ligne.

Vérifiez le nom de l’interface réseau du serveur avec ip link, chez moi c’est eno1. Il faut que l’image de démarrage du système ait une adresse IP fixe; celle-ci doit être différente de celle de votre système principal pour éviter les alertes de sécurité SSH. Pour cela, ajoutez l’option ip dans /etc/default/grub comme ceci:

GRUB_CMDLINE_LINUX_DEFAULT="quiet ip=192.168.42.43::192.168.42.1:255.255.255.0::eno1:none"

Dans cette ligne on retrouve:

  • l’adresse IP 192.168.42.43
  • la passerelle 192.168.42.1 (indispensable pour se connecter depuis Internet)
  • le masque de sous-réseau 255.255.255.0
  • l’interface eno1

Attention à bien respecter l’espacement des : !

La configuration est prête, il faut maintenant générer l’image de démarrage et mettre à jour le menu de GRUB:

update-initramfs -c -k all
update-grub

Il ne reste plus qu’à tester! Redémarez le serveur puis connectez vous en SSH: vous entrerez d’abord le mot de passe de votre clé SSH puis la phase de passe permettant de déchiffrer votre système. La connexion va alors s’interrompre et le système va démarrer.

lkiefer@pc:~$ ssh root@192.168.42.43
Enter passphrase for key '/home/lkiefer/.ssh/id_ed25519': 
Please unlock disk sda3_crypt: 
cryptsetup: sda3_crypt set up successfully
Connection to 192.168.42.43 closed.

Si tout se passe comme prévu, vous pouvez passer à l’installation de Proxmox. On aurait également pu installer Proxmox avant Dropbear-initramfs, l’avantage est que maintenant vous pouvez installer Proxmox et redémarrer le serveur à distance.

Le wiki de Proxmox a une page détaillée pour cette partie, l’utilisation d’un système chiffré n’influe pas sur cette étape.

Install Proxmox VE on Debian 13 Trixie