Raspberry Pi 4 (8 GB) als Proxmox VE Test-Node
Raspberry
Installation Pi 4 –von Debian 13,13 LUKS2,(Trixie) DropbearARM64 undauf Proxmox VE
Diese Anleitung beschreibt die Einrichtung eineseinem Raspberry Pi 4 mit 8 GB RAMRAM. als verschlüsselten Proxmox-Testserver auf Basis von Debian 13 (Trixie).
Debian wird direkt von einem Linux-PC aus mit debootstrap installiert. Die Konfiguration erfolgt innerhalb einer ARM64-chroot-Umgebung.
Das Root-Dateisystem wird mit LUKS2 verschlüsselt.verschlüsselt Währendund desbeim SystemstartsBooten ermöglichtüber DropbearDropbear-SSH entsperrt.
Die Einrichtung erfolgt von einem Linux-PC mit debootstrap und einer ARM64-chroot-Umgebung. Das System erhält eine Entsperrungfeste überIP-Adresse, SSHautomatische mitZeitsynchronisierung einemund separateneine Schlüssel.deutsche UTF-8-Locale.
1. Voraussetzungen
- Raspberry Pi 4 mit 8 GB RAM
- USB-SSD mit mindestens 64 GB
- Debian-13-Linux-PC
- Ethernet-Verbindung
Feste IPv4-Adresse und Gateway- USB-Boot-fähige Raspberry-Pi-Firmware
- SSH-
ClientSchlüsselunterfürLinuxAdministration und LUKS-Entsperrung
DatenträgeraufbauNetzwerkkonfiguration
Hostname | darkside |
IP-Adresse | 10.100.0.61 |
Netzmaske | 255.255.0.0 (/16) |
Gateway | 10.100.0.1 |
DNS | 1.1.1.1 |
Interface | eth0 |
Zeitzone | Europe/Berlin |
Locale | de_DE.UTF-8 |
2. Datenträger vorbereiten
Die SSD besteht aus einer unverschlüsselten Boot-Partition und einer mit LUKS2 verschlüsselten Root-Partition.
Partition | Format | Verwendung |
|---|---|---|
Partition 1 | FAT32 | /boot/firmware |
Partition 2 | LUKS2 |
|
cryptroot | ext4 |
|
DieAlle Boot-Partitionfolgenden bleibtadministrativen unverschlüsselt,Befehle dawerden dieals Raspberry-Pi-Firmwareroot sieausgeführt.
Benötigte können muss. Die Verschlüsselung schützt DatenPakete auf dem ausgeschalteten Datenträger, verhindert jedoch keine Manipulation an der Boot-Partition.
2. SSH-Schlüssel erzeugen
Auf dem Linux-Client zwei voneinander unabhängige SSH-Schlüssel erstellen.
Schlüssel zur LUKS-Entsperrung
ssh-keygen -t ed25519 -a 100 \
-f ~/.ssh/id_pi4_unlock \
-C "Pi4 LUKS Unlock"Administrationsschlüssel
ssh-keygen -t ed25519 -a 100 \
-f ~/.ssh/id_pi4_admin \
-C "Pi4 Administration"Beide privaten Schlüssel mit einer eigenen Passphrase schützen.
Öffentliche Schlüssel anzeigen:
cat ~/.ssh/id_pi4_unlock.pub
cat ~/.ssh/id_pi4_admin.pubDie öffentlichen Schlüssel werden später in Debian hinterlegt. Die privaten Schlüssel verbleiben ausschließlich auf dem Client.
3. Linux-PC vorbereiten
Root-Shell öffnen:
su -Paketlisten aktualisieren:installieren:
apt update
apt full-upgradeBenötigte Pakete installieren:
apt install -y \
debootstrap \
debian-archive-keyring \
qemu-user \
qemu-user-binfmt \
binfmt-support \
cryptsetup \
parted \
dosfstools \
e2fsprogs \
kmod \
ca-certificates \
curl \
git
QEMU ermöglicht die Ausführung der ARM64-Programme auf einem Linux-PC mit anderer Prozessorarchitektur.
QEMU-Registrierung prüfen:
cat /proc/sys/fs/binfmt_misc/qemu-aarch64Auf einem x86-64-Host muss der Interpreter aktiviert sein. Bei einem nativen ARM64-Host wird keine CPU-Emulation benötigt.
chroot begrenzt die CPU-Kernzahl nicht. Parallele Programme können mehrere Kerne verwenden. Die Paketinstallation selbst ist allerdings nicht vollständig parallelisiert.
4. USB-SSD auswählen
Angeschlossene Datenträger anzeigen:identifizieren:
lsblk -o NAME,SIZE,MODEL,TYPE,MOUNTPOINTS
Im folgenden Beispiel istwird /dev/sdb dieals gewünschteZielgerät SSD.verwendet. DerDie GerätenameGerätebezeichnung mussunbedingt anhandprüfen. Alle Partitionen der tatsächlichen Laufwerksinformationen angepasst werden.
Zieldatenträger festlegen:
DISK=/dev/sdbGerät kontrollieren:
lsblk "$DISK"
findmnt /Die ausgewählte SSD darf nicht das laufende System enthalten. Sämtliche Partitionen des Zielgeräts müssen ausgehängt sein.
Achtung: Die nächstenfolgenden Befehle löschen sämtliche Daten auf dem ausgewählten Datenträger.
PartitionstabelleBei erstellen:einem bereits installierten System diesen Abschnitt überspringen.
DISK=/dev/sdb
parted -s "$DISK" mklabel msdos
Boot-Partition mit 1 GiB erstellen:
parted -s "$DISK" mkpart primary fat32 1MiB 1025MiB
Root-Partition erstellen:
parted -s "$DISK" mkpart primary 1025MiB 100%
Boot-Flag setzen:
parted -s "$DISK" set 1 boot on
partprobe "$DISK"
udevadm settle
PartitionsnamenPartitionen bestimmen:festlegen:
case "$DISK" in
*[0-9])
BOOT="${DISK}p1"/dev/sdb1
ROOT="${DISK}p2"
;;
*)
BOOT="${DISK}1"
ROOT="${DISK}2"
;;
esac
lsblk "$DISK"/dev/sdb2
5.3. LUKS2-Verschlüsselung einrichten
Boot-Partition formatieren:
mkfs.vfat -F32 -n PVEBOOT "$BOOT"
LUKS2
Root-Partition mit AES-256-XTS und Argon2id
Die folgende Konfiguration nutzt AES-XTS mit zwei AES-256-Schlüsseln sowie Argon2id zur Ableitung des Schlüssels aus der Passphrase.verschlüsseln:
cryptsetup luksFormat \
--type luks2 \
--cipher aes-xts-plain64 \
--key-size 512 \
--pbkdf argon2id \
--pbkdf-memory 524288 \
--pbkdf-parallel 2 \
--iter-time 2000 \
--verify-passphrase \
"$ROOT"
Parameterübersicht:
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Die Werte sind ein Ausgangspunkt für den Raspberry Pi 4 mit 8 GB RAM. Cryptsetup kalibriert die tatsächlichen Argon2-Parameter werden auf dem einrichtenden Rechner.Rechner Insbesonderekalibriert beiund Verwendungmüssen vonspäter QEMUauf oderdem einemRaspberry schnellerenPi Hostgetestet können sich die späteren Entsperrzeiten deutlich unterscheiden.werden.
Eine zufällige, lange Passphrase verwenden, beispielsweise sieben oder mehr unabhängig ausgewählte Diceware-Wörter.
Keine kurzen Kennwörter, Gerätebezeichnungen, Geburtsdaten oder wiederverwendeten Passwörter nutzen.
Die gewählten Parameter müssen im Raspberry-Pi- Initramfs ausreichend RAM zur Verfügung haben. Höhere Argon2-Werte sind nicht automatisch besser.
SSD-Discard beziehungsweise TRIM für das verschlüsselte Dateisystem zunächst nicht aktivieren. Discard kann Informationen über belegte Datenbereiche preisgeben.
Gespeicherte LUKS-Parameter prüfen:
cryptsetup luksDump "$ROOT"Insbesondere PBKDF, Memory, Time cost und Threads kontrollieren.
VerschlüsselungPartition öffnen:
cryptsetup open "$ROOT" cryptroot
Ext4-Dateisystem erstellen:
mkfs.ext4 -L pve-root /dev/mapper/cryptroot
Status anzeigen:
cryptsetup status cryptroot6. UUIDs dokumentieren
Die UUIDs vor dem Betreten der chroot-Umgebung ermitteln und für die Konfiguration notieren.
LUKS-UUID:notieren:
cryptsetup luksUUID "$ROOT"
Boot-UUID:
blkid -s UUID -o value "$BOOT"
Die
4. LUKS-UUIDDebian bezeichnet die verschlüsselte Partition. Die Boot-UUID bezeichnet das FAT32-Dateisystem.
7. Dateisysteme einhängeninstallieren
Verschlüsselte Root-PartitionDateisysteme einhängen:
mkdir -p /mnt/Temp/1
mount /dev/mapper/cryptroot /mnt/Temp/1
Firmware-Verzeichnis vorbereiten:
mkdir -p /mnt/Temp/1/boot/firmware
Boot-Partition einhängen:
mount "$BOOT" /mnt/Temp/1/boot/firmware
Mountpoints überprüfen:
findmnt /mnt/Temp/1
findmnt /mnt/Temp/1/boot/firmware8. Debian 13 installieren
Debian wird direkt auf der verschlüsselten Root-Partition installiert.installieren:
debootstrap \
--arch=arm64 \
--keyring=/usr/share/keyrings/debian-archive-keyring.gpg \
trixie \
/mnt/Temp/1 \
https://deb.debian.org/debian
Anschließend werden die Partitionen dauerhaft in der neuen Installation konfiguriert.
Crypttab erstellenkonfigurieren
nano /mnt/Temp/1/etc/crypttab
Eintrag:
cryptroot UUID=LUKS-UUID none luks,initramfs
LUKS-UUID durch die zuvor ermittelte UUID der verschlüsselten Partition ersetzen.
Fstab konfigurieren
nano /mnt/Temp/1/etc/fstab
Einträge:Inhalt:
/dev/mapper/cryptroot / ext4 defaults,noatime 0 1
UUID=BOOT-UUID /boot/firmware vfat defaults,umask=0077 0 2
BOOT-UUID durch die zuvor ermittelte UUID der FAT32-Partition ersetzen.
9.5. ARM64-chroot vorbereitenbetreten
Systemdateisysteme einbinden:
for DIR in dev proc sys run; do
mount --rbind "/$DIR" "/mnt/Temp/1/$DIR"
mount --make-rslave "/mnt/Temp/1/$DIR"
done
DNS-Konfiguration übernehmen:für die Installation:
cp -L /etc/resolv.conf /mnt/Temp/1/etc/resolv.conf
ARM64-chroot starten:betreten:
chroot /mnt/Temp/1 /bin/bash
Architektur überprüfen:prüfen:
dpkg --print-architecture
ErwarteteDie Ausgabe:
muss arm64 sein. Die folgenden SchritteBefehle werden innerhalb der chroot-Umgebung ausgeführt.
10.6. Debian-Basissystem
APT-Paketquellen einrichten
Paketquellen öffnen:prüfen:
nano /etc/apt/sources.list
FolgendeDie folgenden Debian-Quellen verwenden. BereitsGleichwertige vorhandene gleichwertige Einträge unter /etc/apt/sources.list.d nicht duplizieren.
deb https://deb.debian.org/debian trixie main non-free-firmware
deb https://deb.debian.org/debian trixie-updates main non-free-firmware
deb https://security.debian.org/debian-security trixie-security main non-free-firmware
PaketlistenPakete aktualisieren:installieren:
apt update
11. Kernel und Basissystem installieren
Benötigte Systempakete installieren:
apt install -y \
linux-image-arm64 \
raspi-firmware \
initramfs-tools \
cryptsetup-initramfs \
dropbear-initramfs \
openssh-server \
ifupdown2 \
systemd-sysv \
systemd-timesyncd \
locales \
tzdata \
ca-certificates \
curl \
git \
nano \
less \
localesbusybox
7. busyboxLocale \konfigurieren
Das \System e2fsprogserhält die deutsche UTF-8-Locale. Die Locale muss erzeugt werden, bevor sie von Shell, SSH und Programmen verwendet werden kann.
Locale-Konfiguration öffnen:
nano /etc/locale.gen
Folgende Zeile aktivieren:
de_DE.UTF-8 UTF-8
Falls ein Kommentarzeichen vor der Zeile steht, dieses entfernen.
Locale erzeugen:
locale-gen
Systemsprüngliche Locale setzen:
update-locale LANG=de_DE.UTF-8
Verfügbare Locales prüfen:
locale -a
Erwartete Ausgabe enthält:
de_DE.utf8
LC_ALL wird nicht dauerhaft gesetzt. Programme erhalten die gewünschten Kategorieeinstellungen über LANG oder spezifische LC_-Variablen.
Zeitzone einstellen
Zeitzone konfigurieren:
ln -sfn /usr/share/zoneinfo/Europe/Berlin /etc/localtime
echo Europe/Berlin > /etc/timezone
Zeitzone prüfen:
date
In einer chroot-Umgebung stammt die aktuelle Uhrzeit vom Linux-Host. Die eigentliche Netzwerkzeitsynchronisierung erfolgt später auf dem Raspberry Pi.
8. NTP-Zeitsynchronisierung konfigurieren
Der Raspberry Pi besitzt normalerweise keine batteriegepufferte Echtzeituhr. Nach einem Neustart kann die Systemzeit deshalb falsch sein.
Eine falsche Uhrzeit kann HTTPS-Verbindungen und die Zertifikatsüberprüfung von APT verhindern.
Als Zeitdienst wird systemd-timesyncd verwendet.
Konfigurationsverzeichnis erstellen:
mkdir -p /etc/systemd/timesyncd.conf.d
Konfiguration bearbeiten:
nano /etc/systemd/timesyncd.conf.d/10-ntp.conf
Folgenden Inhalt eintragen:
[Time]
NTP=162.159.200.1 162.159.200.123 time.cloudflare.com 0.de.pool.ntp.org 1.de.pool.ntp.org
PollIntervalMinSec=32
PollIntervalMaxSec=2048
SaveIntervalSec=60
Die ersten beiden Adressen sind NTP-Server von Cloudflare. Sie sind auch ohne DNS-Auflösung erreichbar.
Für NTP muss ausgehender UDP-Verkehr auf Port 123 erlaubt sein.
Zeitdienst für den Systemstart aktivieren:
systemctl enable systemd-timesyncd.service
systemd-timesyncd wird beim regulären Systemstart aktiviert. Innerhalb von chroot wird kein laufender Zeitdienst benötigt.
Der Dienst speichert regelmäßig einen Zeitstempel, damit die Systemzeit bei späteren Neustarts nicht immer auf einen sehr alten Wert zurückfällt.
9. Netzwerk dauerhaft konfigurieren
Die Netzwerkverbindung im Initramfs ist unabhängig von der normalen Debian- Netzwerkkonfiguration.
Deshalb muss eth0 auch im installierten Debian-System eingerichtet werden.
Netzwerkdatei öffnen:
nano /etc/network/interfaces
Folgende Konfiguration verwenden:
# Loopback
auto lo
iface lo inet loopback
# Ethernet
auto eth0
iface eth0 inet static
address 10.100.0.61/16
gateway 10.100.0.1
# Weitere Interfaces
source /etc/network/interfaces.d/*
Die Management-IP liegt zunächst direkt auf eth0. Eine Linux-Bridge für virtuelle Maschinen wird erst nach erfolgreicher Einrichtung des Basissystems konfiguriert.
Die gleiche Management-IP darf später nicht gleichzeitig auf eth0 und vmbr0 liegen.
Netzwerkdienst aktivieren:
systemctl enable networking.service
DNS konfigurieren
DNS-Konfiguration öffnen:
nano /etc/resolv.conf
Inhalt:
nameserver 1.1.1.1
Diese Konfiguration setzt voraus, dass /etc/resolv.conf als reguläre Datei verwaltet wird und kein anderer Netzwerkdienst ihren Inhalt automatisch ersetzt.
Für die Namensauflösung muss DNS über UDP beziehungsweise TCP Port 53 erreichbar sein.
10. Hostname setzen:konfigurieren
Hostname bearbeiten:
nano /etc/hostname
Inhalt:
pve-pi4darkside
Hosts-Datei bearbeiten:
nano /etc/hosts
Beispiel:Folgende Einträge verwenden:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
10.100.0.261 pve-pi4.darkside.home.arpa pve-pi4darkside
Der Hostname muss auf die tatsächliche Management-IP des Servers auflösbar sein.
11. SSH-Zugang einrichten
Root-Passwort setzen:
passwd
Für rootden eineSSH-Zugang eigenewird starkeein Passphraseeigener verwenden,Ed25519-Administrationsschlüssel nicht die LUKS-Passphrase.verwendet.
SSH-DienstDen aktivieren:öffentlichen Schlüssel auf dem administrierenden Linux-Client erzeugen:
systemctlssh-keygen enable-t sshed25519 -a 100 \
-f ~/.ssh/id_pi4_admin \
-C "Pi4 Administration"
12.
Den SSHprivaten absichern
Die reguläre SSH-Administration verwendetSchlüssel ausschließlich denauf zuvordem erzeugtenLinux-Client Administrationsschlüssel.speichern.
SSH-VerzeichnisAuf erstellen:dem Raspberry-Pi-Dateisystem:
install -d -m 0700 /root/.ssh
nano /root/.ssh/authorized_keys
Den vollständigen öffentlichen Schlüssel aus id_pi4_admin.pub einfügen.eintragen.
Dateirechte setzen:
chmod 0600 /root/.ssh/authorized_keys
SSH-HärtungKonfiguration konfigurieren:erstellen:
nano /etc/ssh/sshd_config.d/10-pi4-security.conf
Inhalt:
PermitRootLogin prohibit-password
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
PermitTunnel no
MaxAuthTries 3
LoginGraceTime 30
DieseSSH-Hostkeys Konfigurationerzeugen, istfalls aufsie die Administration des Hosts ausgerichtet. Für spätere SSH-basierte Clusterfunktionen oder Migrationen müssen die Weiterleitungsregeln passend überprüft werden.fehlen:
ssh-keygen -A
SSH-Konfiguration prüfen:
sshd -t
DerSSH-Dienst Befehl darf keine Konfigurationsfehler melden.aktivieren:
systemctl enable ssh.service
13.12. Initramfs-Netzwerk konfigurieren
Beispielnetzwerk:
|
|
|
|
|
|
| die LUKS-Entsperrung wird eth0 |
|
|
Diebereits Adresseninnerhalb andes dasInitramfs eigene Netzwerk anpassen. Die Management-IP sollte dauerhaft reserviert sein.aktiviert.
NetzwerkkonfigurationDatei öffnen:
nano /etc/network/interfacesinitramfs-tools/initramfs.conf
Inhalt:Folgende Werte setzen:
autoMODULES=most
lo
iface lo inet loopback
iface DEVICE=eth0 inet manual
auto vmbr0
iface vmbr0 inet static
address 10.100.0.2/16
gateway 10.100.0.1
bridge-ports eth0
bridge-stp off
bridge-fd 0
NetzwerkdienstDie aktivieren:statische IP-Adresse wird über einen Kernelparameter konfiguriert.
Datei öffnen:
systemctlnano enable networking/etc/default/raspi-extra-cmdline
FürFolgende dieZeile DNS-Auflösungeintragen:
ip=10.100.0.61::10.100.0.1:255.255.0.0:darkside:eth0:none
Die dauerhafte DNS-VerwaltungZeile darf nachkeine demzusätzlichen erstenZeilenumbrüche Boot nicht mit einem anderen aktiven Netzwerkmanager in Konflikt stehen.enthalten.
14.13. Raspberry-Pi-Boot konfigurierenFirmware
Firmware-Konfiguration bearbeiten:öffnen:
nano /etc/default/raspi-firmware
Folgende VariablenWerte aktivieren beziehungsweise ergänzen:setzen:
ROOTPART="/dev/mapper/cryptroot"
KERNEL="auto"
INITRAMFS="auto"
Die Debian-Firmware-Hooksbestehende verwendenKonfiguration diesedes EinstellungenFirmwarepakets zuransonsten Erstellung der Bootdateien.beibehalten.
ZusätzlicheAuf Kernelparametereinem hinterlegen:
nanoPi /etc/default/raspi-extra-cmdline4 Inhaltmit alsUSB-SSD einekönnen einzelnezusätzliche Zeile:
rootwait ip=10.100.0.2::10.100.0.1:255.255.0.0:pve-pi4:eth0:noneDie Adresse dient dem NetzwerkzugriffUSB-Treiber im Initramfs vor der Entsperrung.
15. Initramfs vorbereiten
Konfiguration öffnen:
nano /etc/initramfs-tools/initramfs.confFolgende Einstellungen setzen:
MODULES=most
DEVICE=eth0
IP=10.100.0.2::10.100.0.1:255.255.0.0:pve-pi4:eth0:noneDas Initramfs benötigt diewerden, Treiberinsbesondere für den USB-Controller, die SSD und den Ethernet-Port.reset_raspberrypi.
Kernel-VersionenDatei anzeigen:
ls /lib/modulesDie tatsächlich installierte Kernel-Version auswählen:
KVER=$(ls /lib/modules | sort -V | tail -n 1)
echo "$KVER"Zusätzliche Module konfigurieren:öffnen:
nano /etc/initramfs-tools/modules
BeimDas Raspberrybenötigte PiModul 4ergänzen, istsofern insbesonderees reset_raspberrypibeim fürinstallierten denKernel USB-Controllerals relevant.Modul Benötigte Storage- und Netzwerktreiber ebenfalls berücksichtigen.
Beispielsweise folgende Module anhand ihrer tatsächlichen Verfügbarkeit prüfen:vorliegt:
modinfo -k "$KVER" reset_raspberrypi
modinfo -k "$KVER" bcmgenet
modinfo -k "$KVER" usb_storage
modinfo -k "$KVER" uas
Verfügbare
14. undDropbear benötigtefür Module in /etc/initramfs-tools/modules eintragen. Fest in den Kernel eingebaute Treiber benötigen keinen zusätzlichen Moduleintrag.
16. Dropbear-SSHLUKS konfigurieren
DropbearEin stelltseparater währendSSH-Schlüssel wird für die Entsperrung der Initramfs-PhaseLUKS-Partition eineverwendet.
Schlüssel auf diedem EntsperrfunktionLinux-Client beschränkt.erzeugen:
ssh-keygen -t ed25519 -a 100 \
-f ~/.ssh/id_pi4_unlock \
-C "Pi4 LUKS Unlock"
KonfigurationsverzeichnisDropbear-Verzeichnis erstellen:
install -d -m 0700 /etc/dropbear/initramfs
SchlüsseldateiAuthorized-Keys-Datei bearbeiten:öffnen:
nano /etc/dropbear/initramfs/authorized_keys
Den öffentlichen Schlüssel aus id_pi4_unlock.pubEntsperrschlüssel mit folgenden Optionen eintragen:
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/cryptroot-unlock" ssh-ed25519 SSH-PUBLIC-KEY
SSH-PUBLIC-KEY durch den vollständigen öffentlichen Ed25519-Schlüssel ersetzen. Der gesamte Eintrag muss in einer Zeile stehen.
Der Schlüssel ist damit für die Entsperrung vorgesehen, nicht für eine frei nutzbare Initramfs-Shell.
Dateirechte setzen:
chmod 0600 /etc/dropbear/initramfs/authorized_keys
Dropbear-KonfigurationDropbear öffnen:konfigurieren:
nano /etc/dropbear/initramfs/dropbear.conf
Inhalt:
DROPBEAR_OPTIONS="-p 2222 -s -j -k -I 120"
Dropbear verwendetakzeptiert damit nur Schlüsselauthentifizierung auf Port 2222. Passwortzugriff und SSH-Portweiterleitungen sind deaktiviert.
17. SSH-Hostkeys kontrollieren
Dropbear und der reguläre SSH-Dienst verwenden unterschiedliche Hostkeys.
Dropbear-Hostkey prüfen:
ls -l /etc/dropbear/initramfs/dropbear_ed25519_host_keyFalls kein entsprechender Schlüssel existiert:
dropbearkey -t ed25519 \
-f /etc/dropbear/initramfs/dropbear_ed25519_host_keyDropbear-Hostkey anzeigen:
dropbearkey -y \
-f /etc/dropbear/initramfs/dropbear_ed25519_host_keyRegulären SSH-Hostkey anzeigen:
ssh-keygen -y \
-f /etc/ssh/ssh_host_ed25519_key
Die beiden öffentlichen Hostkeys sichervon dokumentieren.Dropbear Sie werden auf dem SSH-Clientmüssen vor dem ersten Verbindungsaufbau hinterlegt.sicher dokumentiert und auf dem SSH-Client verifiziert werden.
15. Initramfs erstellen
Installierte Kernel-Version ermitteln:
ls /lib/modules
Die gewünschte Kernel-Version auswählen und das passende Initramfs erstellen.
Wichtig: Der private Dropbear-Hostkey befindet sich später im unverschlüsselten Initramfs. Physischer Zugriff auf die Boot-Partition ermöglicht daher auch den Zugriff auf diesen Schlüssel. Die Boot-Integrität ist eine separate Sicherheitsanforderung.
18. Initramfs und Firmware erzeugen
Kernel-Version erneut festlegen:Beispiel:
KVER=$(ls /lib/modules | sort -V | tail -n 1)
Initramfsif aktualisieren:
-f "/boot/initrd.img-$KVER" ]; then
update-initramfs -u -k "$KVER"
Fallselse
noch kein Initramfs für die ausgewählte Version existiert, stattdessen eines erstellen:
update-initramfs -c -k "$KVER"
fi
Beide Varianten sind alternativ zu verwenden, nicht nacheinander für dieselbe bereits existierende Datei.
Bootdateien anzeigen:
ls -lh /boot/firmwareBoot-Konfiguration prüfen:
cat /boot/firmware/config.txt
cat /boot/firmware/cmdline.txt
config.txt muss den passenden ARM64-Kernel und das zugehörige Initramfs laden.
cmdline.txt muss dieauf verschlüsselte Root-Partition referenzieren:
root=/dev/mapper/cryptroot Außerdemverweisen mussund derden zuvor festgelegtestatischen ip-Parameter vorhanden sein.enthalten.
Initramfs-Inhalt anzeigen:überprüfen:
lsinitramfs "/boot/initrd.img-$KVER" | less
WichtigeBesonders Bestandteile:
CryptsetupCryptsetup-Komponenten,undDropbear,Deviceauthorized_keys,MapperArgon2-UnterstützungDropbearcryptroot-unlock,und der SSH-Hostkeyauthorized_keyscryptroot-unlock- USB- und
Storage-Treiber - Ethernet-Treiber
Ext4-Unterstützung
Die verschlüsselte SSD darf erst eingesetzt werden, wenn die erforderlichen Komponenten und Bootdateien vorhanden sind.kontrollieren.
19.16. Installation abschließen
chroot verlassen:
exit
Dateisysteme anzeigen:kontrollieren:
findmnt -R /mnt/Temp/1
Alle Ziel-Mountpoints aushängen:
umount -R /mnt/Temp/1
LUKS-ContainerLUKS schließen:
cryptsetup close cryptroot
Schreibvorgänge abschließen:
sync
Die USB-SSD anschließendist mitjetzt dem Raspberry Pi verbinden undfür den Bootvorgangersten starten.Boot vorbereitet.
20. SSH-Hostkeys auf dem Client hinterlegen
Auf dem Linux-Client separate Known-Hosts-Dateien für Dropbear und OpenSSH erstellen.
Dateien vorbereiten:
install -m 600 /dev/null ~/.ssh/known_hosts_pi4_unlock
install -m 600 /dev/null ~/.ssh/known_hosts_pi4_adminInitramfs-Hostkey eintragen:
nano ~/.ssh/known_hosts_pi4_unlockDen zuvor dokumentierten öffentlichen Dropbear-Hostkey im folgenden Format eintragen:
[10.100.0.2]:2222 ssh-ed25519 HOSTKEYRegulären SSH-Hostkey hinterlegen:
nano ~/.ssh/known_hosts_pi4_adminFormat:
10.100.0.2 ssh-ed25519 HOSTKEYHOSTKEY jeweils durch das korrekte öffentliche Schlüsselmaterial ersetzen.
21. SSH-Client konfigurieren
SSH-Konfiguration öffnen:
nano ~/.ssh/configFolgende Hosts ergänzen:
Host pi4-unlock
HostName 10.100.0.2
User root
Port 2222
IdentityFile ~/.ssh/id_pi4_unlock
IdentitiesOnly yes
RequestTTY force
StrictHostKeyChecking yes
UserKnownHostsFile ~/.ssh/known_hosts_pi4_unlock
Host pi4
HostName 10.100.0.2
User root
Port 22
IdentityFile ~/.ssh/id_pi4_admin
IdentitiesOnly yes
StrictHostKeyChecking yes
UserKnownHostsFile ~/.ssh/known_hosts_pi4_adminDateirechte setzen:
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/id_pi4_unlock
chmod 600 ~/.ssh/id_pi4_admin22.17. LUKS über SSH entsperren
SobaldNach dem Start sollte Dropbear im Initramfs gestartetauf ist,Port kann2222 dieerreichbar Entsperrungsein.
SSH-Verbindung herstellen:
ssh pi4-unlock-t \
-p 2222 \
-i ~/.ssh/id_pi4_unlock \
root@10.100.0.61
DieDen SSH-Hostkey mit dem zuvor dokumentierten Fingerprint vergleichen.
Anschließend die LUKS-Passphrase eingeben.
Nach erfolgreicher Entsperrung öffnetstartet das Initramfs die Root-Partition und der normale Debian-Bootvorgang wird fortgesetzt.System.
DebianReguläre anschließend administrieren:SSH-Verbindung:
ssh pi4-i ~/.ssh/id_pi4_admin root@10.100.0.61
SSH-Verbindungen
18. mitErsten falschemSystemstart Hostkey dürfen nicht bestätigt oder durch Abschalten der Hostkey-Prüfung erzwungen werden.
23. Debian prüfenüberprüfen
Root-Dateisystem anzeigen:
findmnt /Verschlüsselung überprüfen:
cryptsetup status cryptroot
Netzwerk kontrollieren:
ip -br address
ip route show default
KernelErwartete Netzwerkkonfiguration:
eth0 UP 10.100.0.61/16
Namensauflösung prüfen:
getent ahostsv4 deb.debian.org
Zeitsynchronisierung kontrollieren
Systemzeit anzeigen:
unamedate
-rtimedatectl status
SSH-KonfigurationZeitdienst aktivieren:
systemctl enable --now systemd-timesyncd
Synchronisierungsstatus anzeigen:
timedatectl timesync-status
timedatectl show -p NTPSynchronized
Erwarteter Status nach erfolgreicher Synchronisierung:
NTPSynchronized=yes
Erst nach erfolgreicher Zeitsynchronisierung Paketdownloads und größere Systemupdates durchführen.
19. Fehlerbehebung: HTTPS-Zertifikate
Folgende Fehlermeldung kann auftreten, wenn die Systemzeit falsch ist:
SSL connection failed:
certificate verify failed
Aktuelle Zeit überprüfen:
sshddate -tu
Die Root-Partition muss über /dev/mapper/cryptroot eingebunden sein.
Vor weiteren Paketinstallationen einen vollständigen Neustart einschließlich erneuter SSH-Entsperrung durchführen.
24. Proxmox-Pakete vorbereiten
Die angepassten Proxmox-Komponenten werden über das Community-Projekt PXVIRT bereitgestellt.
Das vollständige Installationsskript build.sh wird nicht verwendet, da es Partitionen und Netzwerkkonfiguration automatisch verändern kann.
Repository herunterladen:
cd /root
git clone https://github.com/topa-LE/pve-arm64-rpi-control.git
cd pve-arm64-rpi-controlVerwendeten Commit dokumentieren:
git rev-parse HEADInstallationsskripte überprüfen:
less scripts/06_add_proxmox_repo.sh
less scripts/07_install_proxmox_ve.shBesondere Aufmerksamkeit gilt externen Paketquellen, APT-Signaturschlüsseln, Kernel-Paketen und automatischen Änderungen an der Bootkonfiguration.
Das PXVIRT-Repository ist ein zusätzlicher Vertrauensbereich. Ein gültiger APT-Schlüssel bestätigt nur die Signatur des jeweiligen Herausgebers, nicht die Sicherheit des Codes.
Ohne unabhängige Bestätigung des erwarteten Signaturschlüssel-Fingerprints sollte die Paketquelle nicht hinzugefügt werden.
Nach Überprüfung des Repositories und des Installationsskripts:
bash scripts/06_add_proxmox_repo.shAPT-Pakete kontrollieren:
apt update
apt-cache policy proxmox-ve25. Proxmox installieren
Vor der tatsächlichen Installation eine Simulation durchführen:
apt-get -s install proxmox-veFolgende Pakete müssen erhalten bleiben:
Raspberry-Pi-kompatibler Linux-Kernelraspi-firmwarecryptsetup-initramfsdropbear-initramfsinitramfs-toolsOpenSSH-Server
Die Simulation muss außerdem auf unerwartete Änderungen an Netzwerkpaketen und dem Virtualisierungsstack überprüft werden.
Wenn die Abhängigkeiten kompatibel sind und die Paketquelle als vertrauenswürdig bewertet wurde:
apt install proxmox-veInstallierte Version anzeigen:
pveversion -vWebdienstNTP-Dienst kontrollieren:
systemctl status pveproxysystemd-timesyncd --no-pager
timedatectl timesync-status
Falls NTP noch nicht zur Verfügung steht und die Uhr stark falsch geht, kann die Uhrzeit vorübergehend manuell auf einen vertrauenswürdigen aktuellen UTC-Wert gesetzt werden.
Beispiel mit dem aktuellen UTC-Zeitwert des Linux-Clients:
date -u -s "JAHR-MONAT-TAG STUNDE:MINUTE:SEKUNDE"
Die Community-PaketePlatzhalter könnenmüssen zusätzlichedurch Anpassungeneine benötigen.tatsächlich Sollteaktuelle dieUTC-Zeit Installationersetzt Abhängigkeiten oder Boot-Komponenten ersetzen wollen, nicht mit erzwungener Paketinstallation fortfahren.werden.
26. Bootkonfiguration nach Updates prüfen
Nach ÄnderungenKorrektur amder Kernel,Uhrzeit Cryptsetupkann APT erneut verwendet werden:
apt update
Falls der TLS-Fehler weiterhin besteht, anschließend CA-Zertifikate, Paketquellen und mögliche TLS-Interception prüfen.
Die HTTPS-Zertifikatsprüfung darf nicht deaktiviert werden.
20. Fehlerbehebung: Locale
Bei folgender Meldung fehlt die gewünschte Locale oder Dropbeardie dasSSH-Umgebung Initramfsverwendet aktualisieren.nicht unterstützte Locale-Werte:
setlocale: LC_CTYPE:
cannot change locale (de_DE.UTF-8)
Verfügbare Locales überprüfen:
locale -a
Locale-Konfiguration öffnen:
nano /etc/locale.gen
Folgende Zeile aktivieren:
de_DE.UTF-8 UTF-8
Locale neu erzeugen:
locale-gen
Standardeinstellung aktualisieren:
update-initramfslocale -u -k allLANG=de_DE.UTF-8
Boot-KonfigurationAnschließend kontrollieren:eine neue SSH-Sitzung öffnen. Die setlocale-Warnungen sollten verschwinden.
21. Fehlerbehebung: Netzwerk
Falls das Netzwerk im Initramfs funktioniert, aber nach der LUKS-Entsperrung ausfällt, die reguläre Netzwerkkonfiguration prüfen.
cat /boot/firmware/config.txtetc/network/interfaces
catip /boot/firmware/cmdline.txt-br address
ip route
Prüfen,/etc/network/interfaces obmuss Kernel,die Initramfs,statische root=/dev/mapper/cryptrootKonfiguration von eth0 enthalten.
Bei einem beschädigten oder unvollständigen System kann die verschlüsselte SSD auf einem anderen Linux-PC entschlüsselt und derdie statischeKonfigurationsdatei ip-Parameterrepariert weiterhinwerden.
22. Proxmox VE vorbereiten
Erst wenn Debian, LUKS, SSH, Netzwerk und Zeitsynchronisierung zuverlässig funktionieren, wird die Virtualisierungsplattform eingerichtet.
EinProxmox Kernel-UpdateVE darf9 nichtstellt ungeprüftARM64-Pakete aufbereit. einen für denDer Raspberry Pi ungeeigneten4 Kernelist umstellen.als Plattform jedoch nicht Teil der unterstützten Proxmox-Hardware.
27.
Vor Proxmox-Weboberfläche
Die Weboberfläche kann nach erfolgreichereiner Installation übermüssen HTTPSinsbesondere geöffnetdie werden:
https://10.100.0.2:8006und Anmeldung:
Benutzer:AuswirkungenrootPasswort: Debian-Root-PasswortRealm: Linux PAM
Das TLS-Zertifikat vor dem ersten Zugriff kontrollieren. Das anfängliche Zertifikat kann selbstsigniert sein.
Fürauf den dauerhaftenRaspberry-Pi-Kernel Betriebgeprüft sollte ein vertrauenswürdiges Zertifikat eingerichtet werden, dessen Hostname zum System passt.werden.
28. Netzwerk absichern
Die Management-Oberfläche sollte ausschließlich aus einem dafür vorgesehenen Verwaltungsnetz erreichbar sein.
Zu schützen sind insbesondere:
SSH auf Port 22Dropbear im Initramfs auf Port 2222Proxmox HTTPS auf Port 8006
Den Zugrifffunktionierenden Bootkernel, raspi-firmware, cryptsetup-initramfs und dropbear-initramfs nicht unkontrolliert ersetzen oder entfernen.
Vor dem Einrichten einer Proxmox-Bridge muss die bisherige Management-IP von eth0 auf vmbr0 umgestellt werden. Dabei darf die IP nicht doppelt vergeben werden.
Eine Aufnahme in einen bestehenden Proxmox-Cluster erfolgt erst nach Möglichkeitvollständiger bereits am Router beziehungsweise an der Netzwerk-Firewall anhand des Management-Netzes begrenzen.
Für den Initramfs-Zugriff gilt das besonders, da die normale Firewall-Konfiguration von Debian in dieser Bootphase noch nicht läuft.
Bei Verwendung der Proxmox-Firewall deren Regeln so konfigurieren, dass die erlaubten Management-Verbindungen erhalten bleiben.Funktionsprüfung.
29. LUKS-Header sichern
Ein beschädigter LUKS-Header kann den Zugriff auf sämtliche verschlüsselte Daten dauerhaft verhindern.
Verschlüsseltes Gerät identifizieren:
lsblk -fHeader auf einem externen Datenträger sichern:
cryptsetup luksHeaderBackup /dev/sda2 \
--header-backup-file /PFAD/ZUM/BACKUP/pi4-luks-header.img/dev/sda2 und den Sicherungspfad anhand der tatsächlichen Umgebung anpassen.
Der Backup-Datenträger muss geschützt sein. Den Header nicht ausschließlich auf der verschlüsselten SSD selbst sichern.
Einen separaten Wiederherstellungsplan mit LUKS-Passphrase, Header-Backup und einem dokumentierten Wiederherstellungsweg aufbewahren.
30. Sicherheitsregeln
Für LUKS, Debian-root und SSH unterschiedliche Zugangsdaten verwenden.SSH ausschließlich mit Schlüsselauthentifizierung betreiben.Private SSH-Schlüssel niemals auf die unverschlüsselte Boot-Partition kopieren.Dropbear ausschließlich für cryptroot-unlock freigeben.Den SSH-Hostkey vor der ersten Verbindung verifizieren.Keine öffentlichen Portweiterleitungen für die Managementdienste verwenden.Debian-Sicherheitsupdates zeitnah installieren.Kernel-, Firmware- und Initramfs-Änderungen vor einem unbeaufsichtigten Neustart prüfen.Nur vertrauenswürdige APT-Paketquellen verwenden.Community-Pakete vor größeren Updates prüfen und Backups erstellen.Keine unverschlüsselten zusätzlichen VM-Datenträger oder Swap-Partitionen verwenden.Den unverschlüsselten Bootbereich vor Manipulationen schützen.Für VM- und Container-Backups ebenfalls Verschlüsselung einsetzen.Die LUKS-Entsperrung nach Änderungen durch einen vollständigen Neustart testen.
31. Weiterführende23. Dokumentation
Debian – Installation auf ARM-SBCs- Debian – Raspberry Pi 4
- systemd-timesyncd – Konfiguration
- Debian –
Cryptsetup und Remote-Unlocklocale-gen - Cryptsetup –
LUKS-ParameterRemote Unlock PimoxCloudflareARM64 RPI ControlPXVIRTNTP- Proxmox VE Dokumentation
Stand: Oktober 2026. Installationskonzept für Debian 13 ARM64, LUKS2, Dropbear und Community-Proxmox. Der vollständige Ablauf wurde nicht auf einem Raspberry Pi 4 mit dieser konkreten Datenträgerkonfiguration validiert.