linux-rhel-centos-fedora security encryption luks clevis tang rhel

NBDE: Network-Bound Disk Encryption (Artikel 086)

Automatisierte Entschlüsselung von LUKS-Partitionen in sicheren Netzwerken. Implementierung von Network-Bound Disk Encryption (NBDE) mittels Tang und Clevis.

# NBDE: Automatisierte Festplatten-Verschlüsselung im Enterprise-Netz

TL;DR / Management Summary Festplatten-Verschlüsselung (LUKS) ist auf Servern oft mühsam, da bei jedem Reboot ein Passwort händisch eingegeben werden muss. Network-Bound Disk Encryption (NBDE) löst dieses Problem für RHEL-Umgebungen. Mittels Clevis (Client) und Tang (Server) wird die Festplatte automatisch entschlüsselt, solange der Server im Firmennetzwerk steht und den Tang-Server erreicht. Wird der Server aus dem RZ entfernt, bleiben die Daten sicher verschlüsselt.


# 1. Einführung & Architektur

Sicherheit ohne manuelles Passwort.

NBDE nutzt das Prinzip der “gebundenen Verschlüsselung”. Der Schlüssel liegt nicht auf der Disk, sondern wird kryptografisch aus Informationen des lokalen Netzwerks (Tang-Server) abgeleitet.

# Die Architektur-Kette (Mermaid)

graph LR
    A[Encrypted RHEL Server] -->|Boot: Request Key| B[Internal Network]
    B --> C[Tang Server: Key Provider]
    C -->|Verified Token| A
    A -->|Auto-Unlock| D[LUKS Partition]
    subgraph "Untrusted Environment (Theft)"
        E[Encrypted Disk] -.-x|No Tang Access| F[Locked Data]
    end

# 2. Server-Side: Tang Setup

Den Schlüssel-Server bereitstellen.

Ein Tang-Server ist zustandslos und extrem leichtgewichtig.

# Installation & Start

# Auf dem dedizierten Security-Server
sudo dnf install tang
sudo systemctl enable --now tangd.socket

# 3. Client-Side: Clevis Setup

Den Server an das Netzwerk binden.

# Pakete installieren

sudo dnf install clevis clevis-luks clevis-dracut

# Disk an Tang-Server binden

# Bindet /dev/sdb1 an den Tang Server
sudo clevis luks bind -d /dev/sdb1 tang '{"url":"http://tang-server.company.com"}'

Sie müssen beim einmaligen Binden das aktuelle LUKS-Passwort eingeben. Clevis fügt einen neuen Key-Slot hinzu.

# Boot-Integration (für Root-Partitionen)

Wenn die Root-Partition verschlüsselt ist, muss das Initramfs aktualisiert werden:

sudo dracut -f

# 4. Day-2 Operations: Hochverfügbarkeit

Was, wenn der Tang-Server down ist?

# SSS (Shamir’s Secret Sharing)

Binden Sie eine Disk an mehrere Tang-Server. So kann der Server auch booten, wenn einer der Key-Server gewartet wird.

sudo clevis luks bind -d /dev/sdb1 sss \
    '{"t":1, "pins":{"tang":[{"url":"http://tang1"},{"url":"http://tang2"}]}}'

(t:1 bedeutet: Einer von beiden Servern reicht aus).


# 5. Troubleshooting & “War Stories”

Wenn der Bootvorgang hängen bleibt.

# Story 1: “Der DNS-Loop”

Symptom: Der Server bootet nicht und fragt nach dem Passwort, obwohl der Tang-Server läuft. Ursache: Clevis versucht den Tang-Server via Hostnamen zu erreichen, aber das Netzwerk/DNS ist im Initramfs-Stadium noch nicht bereit. Lösung: Nutzen Sie immer die IP-Adresse des Tang-Servers in der Clevis-Konfiguration oder stellen Sie sicher, dass das Netzwerk via Cloud-Init/Static-IP im Bootloader korrekt gesetzt ist.

# Story 2: “Das abgelaufene Zertifikat”

Symptom: Plötzlich schlägt die automatische Entschlüsselung fehl. Ursache: Der Tang-Server hat seine Schlüssel rotiert, aber der Client hat den neuen Key noch nicht als vertrauenswürdig eingestuft. Lösung: Führen Sie eine Neubindung durch oder nutzen Sie clevis luks report, um den Status zu prüfen.


# 6. Fazit & Empfehlung

  • Sicherheit: NBDE ist perfekt für Server in Außenstellen (Edge) oder gemieteten Racks.
  • Fallback: Behalten Sie immer ein manuelles Passwort in einem der 8 LUKS-Slots für den Notfall (Netzwerkausfall).
  • Monitoring: Überwachen Sie die Erreichbarkeit des Tang-Servers (Port 80/TCP).

# Anhang: Cheatsheet

Aufgabe Befehl
Bindung prüfen clevis luks list -d /dev/sda2
Bindung entfernen clevis luks unbind -d /dev/sda2 -s 1
Tang Keys anzeigen curl http://tang-server/adv
Manual Unlock Test clevis luks unlock -d /dev/sda2
Dracut Update dracut -f --add clevis