LUKS-Festplatten-Vollverschlüsselung per SSH entsperren

Aktuell widme ich mich in meiner Freizeit dem Projekt mein Heimnetzwerk ("Homelab") neu aufzusetzen. Hierbei kommt ein kleiner Mini-PC als "Home"-Server zum Einsatz. Wie bei allen meinen Systemen soll eine Festplatten-Vollverschlüsselung mittels LVM on LUKS zum Einsatz kommen. Zudem möchte ich nicht dass der Server 24/7 läuft, sondern ihn immer nur bei Bedarf per Wake On LAN aufwecken. Konkret möchte ich also z.B. von unterwegs mich mittels VPN mit meinem Heimnetzwerk verbinden, per Wake On LAN den Server starten und dann auf dessen Services zugreifen.

Eine Herausforderung ist die während des Bootvorgangs benötigte Eingabe der Passphrase zum Entsperren des mit LUKS voll-verschlüsselten Systems. Eine Lösung, die ich euch in diesem Beitrag zeigen möchte, ist die Verwendung von Dropbear. Hierbei handelt es sich um einen "kleinen" SSH-Server, der ins initramfs integriert werden kann. Hierdurch lässt sich bereits während des Bootvorgangs eine SSH-Verbindung zum Server aufbauen und so aus der Ferne (Remote) die Passphrase zum Entsperren des Systems eingeben.

Folgende Geräte bzw. Software wurde verwendet:
  • VM mit Debian v12
  • dropbear-initramfs v2022.83-1

Dropbear installieren & einrichten

dropbear-initramfs installieren

Als erstes installieren wir Dropbear für die Integration ins initramfs wie folgt:

sudo apt install dropbear-initramfs
Terminal / Konsole

dropbear-initramfs konfigurieren

Im nächsten Schritt öffnet /etc/dropbear/initramfs/dropbear.conf und passt die Konfigurationsdatei an:

DROPBEAR_OPTIONS="-I 180 -j -k -p 33333 -s -c cryptroot-unlock"
Datei: /etc/dropbear/initramfs/dropbear.conf

Die einzelnen Parameter haben dabei folgende Bedeutung:

  • -I 180: Schließt die SSH-Verbindung nach 180s Inaktivität.
  • -j -k: Deaktiviert Local- und Remote-Portwarding.
  • -p 33333: Der SSH-Server lauscht auf Port 33333.
  • -s: Deaktiviert SSH-Logins mittels Passwort.
  • -c cryptroot-unlock: Beschränkt die SSH-Verbindung/-Session auf Ausführung des Befehls cryptroot-unlock. Kann bei Bedarf auch weggelassen und manuell eingegeben werden.

SSH-Schlüssel hinterlegen

Für eine erfolgreiche Anmeldung per SSH müsst ihr nun noch euren SSH-Public-Key in die Datei /etc/dropbear/initramfs/authorized_keys kopieren.

initramfs neu erzeugen

Zuguterletzt muss das initramfs neu generiert werden. Hierfür führt folgenden Befehl aus:

sudo update-initramfs -u
Terminal / Konsole
Hinweis Optional: IP-Konfiguration via initramfs

Für den Fall, dass euer Server keine IP via DHCP zugewiesen bekommt, könnt ihr die IP-Konfiguration auch in der /etc/initramfs-tools/initramfs.conf vornehmen.

Beim nächsten Neustart eures Servers sollten nun zusätzlich zur Abfrage der LUKS-Passphrase weitere Informationen bzgl. der IP-Konfiguration angezeigt werden und der SSH-Server somit laufen.

SSH-Verbindung herstellen und System entsperren

Auf eurem Notebook/PC stellt nun eine Verbindung zu eurem Server her (ersetzt localhost durch die entsprechende IP eures Servers). Direkt nach erfolgreicher Anmeldung per SSH werdet ihr aufgefordert die LUKS-Passphrase zum Entsperren eures Server-Systems einzugeben.

ssh -p 33333 root@localhost
Please unlock disk vda2_crypt:
cryptsetup: vda2_crypt set up successfully
Connection to localhost closed.
Terminal / Konsole

Wenn alles geklappt hat, habt ihr nun euer Server-System entschlüsselt und die SSH-Verbindung wird automatisch geschlossen. Anschließend könnt ihr ganz normal auf eure Server-Dienste zugreifen.

Fazit

Im Rahmen von Zero Trust lassen sich auch mit LUKS verschlüsselte Systeme bei Bedarf problemlos aus der Ferne entsperren bzw. entschlüsseln.

Feedback

Für Feedback zum Beitrag, seien es Fragen, Korrigierungen und/oder Anregungen, könnt ihr mir gerne eine Nachricht per E-Mail oder Mastodon schreiben (siehe Kontakt).