Startseite » Verschlüsselte Backups auf ein (weit) entferntes Raspberry P (Zero W)

Verschlüsselte Backups auf ein (weit) entferntes Raspberry P (Zero W)

Du willst vielleicht ein Backup an einen entfernten Ort senden, weil ein Backup in nur einem Raum hohe Risiken bei Diebstahl oder Zerstörung mit sich bringt. Dazu schlage ich eine Lösung vor, die ein minimales Raspberry beinhaltet und ein Speichermedium, z.B. einen großen USB-Stick.

Darüber hinaus soll alle Verschlüsselung auf dem sendenden Gerät erfolgen, sodass das entfernte Gerät keinerlei Kenntnis des Schlüssels erhält.

Voraussetzungen

Hardware

  • Raspberry Pi Zero W (oder höher)
    • jedenfalls ein Gerät, auf dem Raspberry Pi OS läuft und irgendwie an irgendeinem Netzwerk mit Internetzugang oder Zugang zu deinem Netz dran ist.
  • Speichermedium
    • externer USB-Stick, externe SSD oder externe HDD (entsprechend deinem Bedarf)
  • Primäres Raspberry Pi
    • Wo die Daten halt herkommen, die gespeichert werden sollen

Software

Ich gehe davon aus, dass du dein entferntes Gerät vorbereitest.

Umsetzung

auf dem entfernten Gerät

Das Speichermedium muss formatiert werden. Da exFAT und NTFS unter Linux viel Rechenleistung benötigt, solltest du auf ein natives Dateisystem setzen. Das traditionelle ext4 vielleicht. Da allerdings große Speichermedien lange Zeit brauchen, formatiere ich es möglichst unter Missachtung des Journals und im Lazy-Mode, welcher die Inodes erst später im Hintergrund nach und nach anlegt. Beachte, dass ich /dev/sda1 verwende, was bei dir wahrscheinlich auch so ist, sich unter Umständen aber auch unterscheiden kann.

sudo mkfs.ext4 -E lazy_itable_init=1 -O ^has_journal /dev/sda1

Danach mountest du deine ext4-Partition und erstellst darauf einen LUKS-Container. Dabei handelt es sich um eine einzelne Datei, in die später alle Daten verschlüsselt hineingeschrieben werden. Das kann sehr lange dauern, insbesondere wie hier zu sehen mit 4.400.000 MB ~= 4,4TB. Lief bei mir 2 Tage lang.

sudo mkdir /media/usb
sudo mount /dev/sda1 /media/usb
sudo dd if=/dev/zero of=/media/usb/backup.crypt bs=1M count=4400000

Und schließlich machst du die Datei noch von außen verfügbar. Da ohnehin nur verschlüsselte Daten übertragen werden, verzichte ich auf weitere Sicherheitsmechanismen und verwende zugunsten der Performance NFS.

sudo apt install nfs-kernel-server
sudo nano /etc/exports
# und in /etc/exports kann folgende Zeile eingefügt werden:
# /media/usb			192.168.178.0/0(rw,sync,no_subtree_check)

Mit der Beschränkung 192.168.178.0/0 wird die Verfügbarkeit auf das eigene Netz beschränkt. Den IP-Bereich musst du natürlich auf dein Netz anpassen.

Und Neustart von NFS mittels

sudo exportfs -ra
sudo service nfs-kernel-server restart

Auf dem primären Gerät (das die Daten schon hat, die gesichert werden sollen)

Zunächst erstellst du zwei Ordner. Einen Ordner, in den das entfernte Speichermedium gemountet werden soll. Ich schlage folgende Ordner vor:

sudo mkdir /mnt/local-backup
sudo mkdir /mnt/local-backup-decrypted

Und mounte sie entsprechend via NFS. Für „remote-pi“ verwendest du den Namen deines remote-Geräts.

sudo mount -t nfs -o rw,hard,intr,noatime remote-pi:/media/usb /mnt/local-backup

Jetzt kommt die eigentliche Verschlüsselung zum Zug. Du installierst das Paket cryptsetup:

sudo apt install cryptsetup

Und du setzt die Verschlüsselung für deine Container-Datei. Schreibe dir die vergebene Passphrase gut auf.

sudo cryptsetup luksFormat /mnt/local-backup/backup.crypt

Öffne der Container dann und schreibe auch hier wieder ein Dateisystem hinein.

sudo cryptsetup luksOpen /mnt/local-backup/backup.crypt luks-backup #LUKS-Container öffnen
sudo mkfs.ext4 -E lazy_itable_init=1 -O ^has_journal /dev/mapper/luks-backup	#LUKS-Container formatieren

Vergiss nach Verwendung nicht, den Container wieder zu schließen!

sudo cryptsetup luksClose luks-backup #LUKS-Container schliessen!!

Jetzt fehlt nur noch eine Backup-Routine. Diese kannst du z.B. mittels rc.local regelmäßig starten

if mount | grep /mnt/DAT; then #Schau erstmal, ob die zu duplizierenden Daten überhaupt da sind. /mnt/DAT könnte dein primärer Speicherort sein
	sudo mkdir /mnt/local-backup #Falls du dein Primäres Pi mal neu installiert haben solltest, kann der Ordner hier neu erstellt werden
	sudo mkdir /mnt/local-backup-decrypted # "(siehe oben)"
	sudo mount -t nfs -o rw,hard,intr,noatime remote-pi:/media/usb /mnt/local-backup #Das Speichermedium wird per NFS wieder herangeholt
	if mount | grep /mnt/local-backup; then #wurde erfolgreich gemountet?
		echo "deinpasswort" | sudo cryptsetup luksOpen /mnt/local-backup/backup.crypt luks-backup #LUKS-Container öffnen
		sudo mount /dev/mapper/luks-backup /mnt/local-backup-decrypted	#LUKS-Container mounten
		if mount | grep /mnt/local-backup-decrypted; then #wurde erfolgreich gemountet?
			#rsync ausführen und ggf. Bandbreite limitieren
			sudo rsync -rlptDvu --modify-window=1 --bwlimit=2.0M --delete --force --info=progress2 /mnt/DAT/ /mnt/local-backup-decrypted
		fi
		sudo umount /mnt/local-backup-decrypted #Verschlüsselte Daten unmounten
		sudo cryptsetup luksClose luks-backup #LUKS-Container schliessen!!
	fi
	sudo umount /mnt/local-backup #NFS unounten
fi

1 Kommentar zu „Verschlüsselte Backups auf ein (weit) entferntes Raspberry P (Zero W)“

  1. Pingback: Raspberry Pi als Cloud oder Datenserver verwenden - Smarthome DIY - Heimautomatisierung selbst gemacht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..

Translate »