Changes

Jump to navigation Jump to search
5,944 bytes added ,  23:44, 14 February 2020
created
====== Full Encryption Server mit remote unlock ======

Diese Anleitung entstand beim Aufsetzen des neuen Zombi-Servers ''ravenholm'', wurde also erfolgreich getestet.

===== System installieren über installimage =====
Erstmal komplett unverschlüsseltes System auf dem Raid samt LVM aufbauen.

Partitionstabelle am anfang:
* 512M /boot
* LVM (vg0)

LVM partitionen:
* 8GB Swap
* 20GB /
* 200GB /var/lib/docker
* 2000GB /data
* (~700GB unallocated)

Da kommt ein bootfähiges debian-minimal rein, damit wird später ein neues initramfs gebaut.

**Installieren! Dann reboot.**

===== Erste Konfigurationen im Debian-System =====
Reboot ins installierte, noch unverschlüsselte Debian

Installierte pakete:
* tmux
* dropbear
* busybox

//Gibt eine Warnung: "Invalid authorized_keys file, remote unlocking via SSH will not work!", dies liegt daran, dass für dropbear eine solche datei noch nicht existiert diese erstellen wir sogleich!//

**Busybox für initramfs aktivieren**
> BUSYBOX=y in Datei /etc/initramfs-tools/initramfs.conf
**Public keys für dropbear kopieren**
> cat .ssh/authorized_keys > /etc/dropbear-initramfs/authorized_keys
//Dropbear akzeptiert derzeit **nur** RSA-Schlüssel, alle weiteren werden ignoriert.//

**Initramfs updaten**
> update-initramfs -u

//Ab jetzt wird linux die Busybox-Umgebung starten, wenn der Bootvorgang nicht fortgesetzt werden kann. Was für uns immer der Fall sein wird, da linux das Passwort für die root partition nicht kennt!//

===== Hostschlüssel für Dropbear konvertieren =====
Es ist nervig, jedes mal den geänderten fingerprint vom Hostschlüssel zu bestätigen, wenn der Server neu gestartet werden muss. Darum konvertieren wir den vertrauten Hostkey zur Verwendung durch dropbear.

**Einmal RSA...**
> /usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_rsa_key /etc/dropbear-initramfs/dropbear_rsa_host_key
**...und einmal ECDSA.**
> /usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_ecdsa_key /etc/dropbear-initramfs/dropbear_ecdsa_host_key
**Initramfs updaten**
> update-initramfs -u

//Jedes mal wenn etwas an der Dropbear-Konfiguration geändert wurde, ein Schlüssel zu /etc/dropbear-initramfs/authorized_keys hinzugefügt wird oder die Hostschlüssel für Dropbear verändert werden muss update-initramfs -u ausgeführt werden. Dies wird im fall eines Kernel-Updates automatisch gemacht, also kein problem.//

**Jetzt geht's wieder in das rescue system wechseln (über hetzner webinterface aktivieren, dann reboot)**

===== Rescue System die Zweite =====
Jetzt verschlüsseln wir das System. Dazu backuppen Debian-Partition sowie die Volume-Group-Konfiguration. Hierzu erstellen wir ein tmpfs im RAM (Größe > 20GB)

**TmpFs erstellen**
> sudo mount -t tmpfs -o size=21G none /root/temp
**Volume-Group aktivieren und root mounten (nur root nicht boot)**
> vgchange -a y vg0
> mount /dev/mapper/vg0-root /mnt
**Debian-System in das tmpfs kopieren**
> rsync -a /mnt/ /root/temp/
**Volume unmounten**
> umount /mnt
**Volume-Group-Konfiguration backuppen**
> vgcfgbackup vg0 -f vg0.freespace
**Volume-Group entfernen (ein paar mal y eingeben)**
> vgremove vg0

//Nun wird das encfs(luks) auf der größeren Raidpartition aufgesetzt//

**Verschlüsseln**
> cryptsetup --cipher aes-xts-plain64 --key-size 256 --hash sha256 --iter-time 6000 luksFormat /dev/md1
**Öffnen**
> cryptsetup luksOpen /dev/md1 cryptroot
**Physical-Volume erstellen**
> pvcreate /dev/mapper/cryptroot

**UUID der neuen partition herausfinden**
> blkid /dev/mapper/cryptroot
**Volume-Group-Konfiguration kopieren**
> cp vg0.freespace /etc/lvm/backup/vg0
**Konfiguration anpassen**
//uuid in das id feld (UNTER physical_volumes!!!!)//
//Wert von device ersetzen mit "/dev/mapper/cryptroot"//
> vim /etc/lvm/backup/vg0

**Volume-Group wieder herstellen**
> vgcfgrestore vg0

Es ergibt sich hieraus ein kleines problem:
Durch den Overhead der verschlüsselung ist das PV nun minimal zu groß für den platz, auf dem sie liegt. Das könnte später zu Problemen führen, also passen wir die Größe an:

**Volume geringfügig verkleinern**
> pvresize --setphysicalvolumesize 2.7T /dev/mapper/cryptroot

**Und wieder auf volle Größe**
> pvresize /dev/mapper/cryptroot

**Volume-Group aktivieren**
> vgchange -a y vg0

**Dateisysteme erstellen**
> mkfs.ext4 /dev/vg0/root
> mkfs.ext4 /dev/vg0/data
> mkfs.ext4 /dev/vg0/docker
> mkswap /dev/vg0/swap

**Root mounten (nur root nicht boot)**
> mount /dev/vg0/root /mnt/

**Daten wieder auf festplatte kopieren (trailling '/' beachten!!!!!)**
> rsync -a /root/temp/ /mnt/

===== Debian System im Chroot =====
**Chroot in das Debian-System**
> mount /dev/md0 /mnt/boot
> mount --bind /dev /mnt/dev
> mount --bind /sys /mnt/sys
> mount --bind /proc /mnt/proc
> chroot /mnt

**/etc/crypttab anpassen**
> vim /etc/crypttab
**Zeile hinzufügen**
> cryptroot /dev/md1 none luks

**Initramfs und grub updaten sowie installieren**
> update-initramfs -u
> update-grub
> grub-install /dev/sda
> grub-install /dev/sdb

**Aus Debian-System herausgehen**
> exit

===== Wieder im Rescue-System =====
**Alles unmounten**
> umount /mnt/{proc,sys,dev,boot}
> umount /mnt/

**Server-Neustart!**
> reboot

===== Den Server aufschließen! =====
Nun startet der Server Dropbear und Busybox.

**Mit SSH verbinden**
//(eventuell den server aus der lokalen known_hosts löschen, da dropbear noch einen anderen host key hat!)//

**Unlock ravenholm**
//(Sagt der Server nach dem Verbinden auch)//
> cryptroot-unlock
**Password eingeben!**
//Der Befehl beendet die Verbindung. Die Busybox-Shell scheint dabei zu hängen. Das ist normal.//

Danach startet das echte System, nun kann erneut mittels ssh verbunden werden

===== Quelle =====
Diese Anleitung basier auf einer Anleitung von TheReal1604 und wurde für unsere Zwecke angepasst.

https://github.com/TheReal1604/disk-encryption-hetzner/blob/master/debian/debian_swraid_lvm_luks.md

Navigation menu