Sicheres Server Backup erstellen

Vorbereitung

Zuerst Miete ich mir einen neuen (VPS) Server, der für Backups genutzt wird.

Auf diesem Server erstelle mir einen eigenen Benutzer mit dem Namen serverbackup. Wie ich das genau mache, ist in desem Artikel beschrieben.

Anschließend generiere ich auf dem Sourceserver der Server, der die zu sichernden Daten enthält, einen SSH Key.

ssh-keygen -a 100 -t ed25519

Anschließend lass ich mir den Public Key ausgeben. (Dabei gilt zu beachten, dass ich den Sourceserver als root Nutzer betreibe, was ich in Zukunft auf jedenfalls anders machen werde.)

tail -n+1 /root/.ssh/id_ed25519.pub

Ich melde mich dann im Backup Server als Benutzer serverbackup an. Anschließend erstelle ich dort das .ssh Verzeichnis um dort den Public Key einzutragen.

su - serverbackup
mkdir .ssh && sudo nano ~/.ssh/authorized_keys

Jetzt stelle ich noch ein, dass der Source Server die SSH Verbindung nur für das Backup verwenden darf. Dazu muss ich die ~/.ssh/authorized_keys Datei noch einmal bearbeiten, indem ich vor dem eben Eingefügen Public Key folgenden command="..." Befehl einfüge.

sudo nano ~/.ssh/authorized_keys
command="borg serve --restrict-to-path /home/serverbackup/backups/Server --append-only" <PublicKey>

Borg Installieren & Installieren

Um Borg zu installieren, nutze ich diesen Befehl:

sudo apt install borgbackup -y

Nun erstellen wir das Verzeichnis, in dem die Backups gespeichert werden.

mkdir -p /home/serverbackup/backups/Server

Dann nutzen wir den eben erstellten Ordner und Initialisieren dort ein Verschlüsseltes Borg Repository.

borg init --encryption=repokey-blake2 /home/serverbackup/backups/Server

Dann gebe ich dort meine Passphrase ein, die zur Verschlüsselung dient.

Jetzt sichere ich mir den Borg Key mit diesem Befehl:

borg key export /home/serverbackup/backups/Server ~/key-export

Diesen Schlüssel bewahre ich sicher auf und lösche ihn dann vom Server.

Backups erstellen

Auch auf dem Sourceserver Insterlire ich Borg.

sudo apt install borgbackup -y

Jetzt erstelle ich mein Backup Script.

nano ~/backup/backup.sh
#!/bin/bash

##
## Save backup to directory named after hostname
##
LOG="backup.log"
REPOSITORY="ssh://serverbackup@backupserver.tld:22/~/backups/Server"
export BORG_PASSPHRASE="MeineSuperSicherePassphrase"

##
## Write output to logfile
##
exec > >(tee -i ${LOG})
exec 2>&1
echo "###### Starting backup on $(date) ######"

##
## Create list of installed software
##
dpkg --get-selections > /root/backup/software.list

##
## Sync backup data
##
echo "Syncing backup files ..."
borg create -v --stats                                  \
    $REPOSITORY::'{now:%Y-%m-%d_%H:%M}'                 \
    /root/backup                                        \
    /etc                                                \
    /var/www                                            \
    /var/vmail                                          \
    /storage

echo "###### Finished backup on $(date) ######"

Anschließend mach ich das Script ausführbar.

chmod u+x /root/backup/backup.sh

Nun teste ich das Script.

./root/backup/backup.sh

Wenn das Script tut, was es soll, dann erstelle ich ein cron job.

crontab -e
08 23 * * * /root/backup/backup.sh > /dev/null 2>&1

Alte Backups Löschen

Ich melde mich auf den Backup Server an und erstelle hier ein Script, das überflüssige Backups Löscht.

nano ~/prune-backup.sh
#!/bin/bash

ROOTDIR="/home/serverbackup/backups/Server"
LOG="prune-backup.log"
export BORG_PASSPHRASE="MeineSuperSicherePassphrase"

# copy all output to logfile
exec > >(tee -i ${LOG})
exec 2>&1

echo "###### Pruning backup on $(date) ######"

borg prune -v ${ROOTDIR} \
--keep-daily=14 \
--keep-weekly=8 \
--keep-monthly=12

echo "###### Pruning finished ######"

Anschließend mach ich das Script ausführbar.

chmod u+x ~/prune-backup.sh

Nun teste ich das Script.

~/prune-backup.sh

Wenn das Script tut, was es soll, dann erstelle ich ein cron job.

crontab -e

Dieser cron job wir alle 3 Stunden gestartet (0:27, 3:27, 6:27, …)

27 */3 * * * ~/prune-backup.sh

Quelle

https://thomas-leister.de/server-backups-mit-borg/