Sicherung von Mailbox auf einer Hetzner Storagebox mit restic

Im folgenden Artikel, möchte ich kurz erläutern, wie ihr eine Sicherung von Mailcow auf einer Hetzner Storagebox auslagern könnt. Ich gehe davon aus, dass ihr bereits eine Hetzner Storagebox habt und den SSH sowie den RSYNC Zugriff erlaubt habt.

Storagebox vorbereiten

Es werden einige kleine Schritte benötigt, damit ihr mit der Storagebox problemlos arbeiten könnt. Als erstes generieren wir einen neuen SSH Key:

ssh-keygen -t ed25519

Beantwortet die Fragen nach euren Bedürfnissen, jedoch darf der Key kein Passwort haben. Als nächstes installieren wir sshfs um unsere Storagebox zu mounten:

apt install sshfs -y

Im nächsten Schritt, werden wir die Storagebox mounten:

mkdir /mnt/storagebox
sshfs u123456@u123456.your-storagebox.de:/ /mnt/storagebox/

Jetzt noch entsprechend den Ordner und die Datei für den Schlüssel anlegen:

mkdir /mnt/storagebox/.ssh
touch /mnt/storagebox/.ssh/authorized_keys

Jetzt kopieren wir noch den Key auf die Storagebox:

cat ~/.ssh/id_ed25519.pub >> /mnt/storagebox/.ssh/authorized_keys

Als vorletzten Schritt legen wir noch das Sicherungsverzeichnis in der Storagebox an und umounten die Storagebox wieder vom System:

mkdir /mnt/storagebox/mailserver
fusermount -u /mnt/storagebox

Als letzten Schritt, müssen wir noch eine SSH Config Datei anlegen, da die Storagebox einen anderen Port benutzt:

Host u123456.your-storagebox.de
        User u123456
        Port 23

Bitte wieder den Nutzer entsprechend anpassen

Danke an Thomas Leister

Diese Schritte sind im groben von Thomas Leistner kopiert und angepasst worden. Danke

Backup einrichten

Als erstes legen wir mal die Ordner an die wir brauchen

mkdir /backup
mkdir /opt/backup

Als nächstes legen wir die Datei environment.sh im Verzeichnis /opt/backup mit folgendem Inhalt an:

#!/bin/bash
export RESTIC_REPOSITORY="sftp:u1234567.your-storagebox.de:mailserver"
export RESTIC_PASSWORD="MeinSicheresBackupPasswort"

Bitte passt entsprechend u1234567 und MeinSicheresBackupPasswort an!

Jetzt legen wie die Datei backup.files im Verzeichnis /opt/backup mit diesem Inhalt an:

/etc
/backup
/root
/opt

Wie ihr dem Namen vielleicht entnehmen könnt, wollen wir, das restic diese Verzeichnisse sichert. Diese könnt ihr natürlich erweitern. Als letztes legen wir die Datei backup.sh im Verzeichnis /opt/backup mit folgendem Inhalt an:

#!/bin/bash

MAILCOW_BACKUP_LOCATION=/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all --delete-days 30

source /opt/backup/environment.sh

### Backup new stuff
restic backup \
        --verbose \
        --files-from /opt/backup/backup.files \

### Remove old stuff
echo "Deleting old backups ..."
restic forget --prune \
        --keep-last 7 \
        --keep-daily 14 \
        --keep-weekly 4 \
        --keep-monthly 6 \


restic check

Hier müsst ihr den Pfad zum Mailcow Verzeichniss anpassen: /opt/mailcow-dockerized Zum Schluß machen wir das Script jetzt noch ausführbar:

chmod 700 /opt/backup/backup.sh

Repo initialisieren

Damit restic auch läuft, müsst ihr den folgenden Befehl einmal ausführen, dabei wird die Repo angelegt:

source /opt/backup/environment.sh && restic init

Crontab

Jetzt legen wir noch einen Cronjob an, der alle 4 Stunden die Sicherung ausführt, dazu bearbeiten wir die Datei /etc/crontab und fügen folgendes ein:

0 */4    * * *    root    /bin/bash /opt/backup/backup.sh