Automatisierte Checks und Integritätsberichte von Borg Backups

Um die Vertraulichkeit, Integrität und Verfügbarkeit von IT-Systemen zu gewährleisten, sind nicht nur regelmäßige Backups erforderlich, sondern es ist auch unabdingbar zu prüfen, ob diese Backups regelmäßig durchgeführt worden sind und ob die Integrität der Backup-Daten dauerhaft gewährleistet werden kann. Nur so ist in einem Ernstfall gewährleistet, dass bei einer Wiederherstellung der Daten diese wieder gelesen und wiederhergestellt werden können.

Ich setze sehr gerne auf Open Source Software, sofern ich davon überzeugt bin, das diese stabil und zuverlässig funktioniert, es dafür eine breite Support-Community gibt und sie sich über mehrere Jahre bewährt hat. Eine Software davon ist BorgBackup (kurz Borg). In diesem Artikel möchte ich dir zeigen, wie ich mit einem simplen Bash-Skript automatisiert überprüfe, ob Backups erfolgreich durchgeführt worden sind und zudem ob diese auch integer sind. Eine Information per E-Mal schließt diesen Prozess ab.

Was ist BorgBackup?

Falls du Borg noch nicht kennst: Borg ist eine deduplizierende und kostenfreie Backup-Software, die es ermöglicht, effiziente und sichere Backups zu erstellen. Deduplizierung bedeutet hier, dass Borg automatisch doppelte Daten innerhalb der Backups erkennt und nur eine Kopie speichert, was enormen Speicherplatz spart. BorgBackup setzt ein unixoides Betriebssystem, z. B. Linux, BSD, macOS, voraus.

Das Bash-Skript

#!/bin/bash

# Datum des vergangenen Tages ermitteln
yesterday=$(date --date="yesterday" +%Y-%m-%d)

# Konfigurationsdatei für Repositorys und Passphrasen
CONFIG_FILE="/pfad/zum/configfile.conf"

# E-Mail-Konfiguration
EMAIL_TO="mail@empfaenger.de"
EMAIL_FROM="noreply@absender.de"
EMAIL_SUBJECT="Borg Backup und Integritätsbericht für $yesterday"
SMTP_SERVER="mail.server.de"
SMTP_PORT="587" # Standard-Port für SMTP
SMTP_PROTOCOL="yes" # Verwendetes Protokoll: 'tls' oder 'ssl' - Optionen 'yes', 'no', 'auto'
SMTP_USER="noreply@absender.de"
SMTP_PASS="GeheimesPasswort"

# Beginn der E-Mail-Nachricht als HTML vorbereiten
email_body="<html><body>"
email_body+="<h1>Borg Backup and Integrity Report for $yesterday</h1>"
email_body+="<table border='1'><tr><th>Repository</th><th>Backup Status</th><th>Integrity Status</th></tr>"

# Konfigurationsdaten laden
source $CONFIG_FILE

# Überprüfung und Integritätsprüfung für jedes Repository
for repo_path in "${!BORG_CONFIG[@]}"; do
    IFS=':' read -r passphrase keyfile <<< "${BORG_CONFIG[$repo_path]}"
    export BORG_PASSPHRASE="$passphrase"

    backup_check=$(borg list $repo_path 2>/dev/null | grep "$yesterday")
    if [ -n "$backup_check" ]; then
        backup_status="Successful"
        check_result=$(borg check --verify-data $repo_path 2>&1)
        if [[ $? -eq 0 ]]; then
            integrity_status="No issues found"
        else
            integrity_status="Issues found. Manual check needed"
        fi
    else
        backup_status="Not found"
        integrity_status="N/A"
    fi
    email_body+="<tr><td>$repo_path</td><td>$backup_status</td><td>$integrity_status</td></tr>"
    unset BORG_PASSPHRASE
done

email_body+="</table></body></html>"

# E-Mail senden
sendemail -f "$EMAIL_FROM" -t "$EMAIL_TO" -u "$EMAIL_SUBJECT" \
-m "$email_body" -s "$SMTP_SERVER:$SMTP_PORT" -o tls="$SMTP_PROTOCOL" \
-xu "$SMTP_USER" -xp "$SMTP_PASS" -o message-content-type=html

Das Skript automatisiert den Check, ob ein Backup am Vortag durchgeführt worden ist, testet die Integrität des gesamten Archivs und versendet anschließend einen kurzen Bericht per E-Mail. Schauen wir uns die wichtigsten Bestandteile des Skripts genauer an:

  1. Datum berechnen
    Das Skript beginnt damit, das Datum des Vortags zu berechnen. Dies ist nützlich, um Backups genau zu datieren und auffindbar zu machen. Je nachdem ob du ein Backup in der Nacht am Vortag oder am aktuellen Tag früh in der Nacht durchführst, musst du die Berechnung nach deinen individuellen Gegebenheiten anpassen.

  2. Definieren der externen Konfigurationsdatei Anschließend wird ein Pfad zu einer Konfigurationsdatei definiert, die wichtige Konfigurationsdetails wie die Pfade zu den Backup-Repositories und Passphrasen enthält. Ein Beispiel einer Konfigurationsdaten findest du weiter unten im Artikel.

  3. E-Mail-Konfiguration
    Hier definierst du sämtliche Einstellungen, die für den Versand der E-Mail notwendig sind, wie Empfänger und Absender, Betreffzeile, SMTP-Server und Zugangsdaten. Dies ermöglicht es dem Skript, die E-Mail über deinen E-Mail-Server zu versenden.

  4. Vorbereitung der E-Mail-Nachricht
    Das Skript erstellt den Grundkörper der E-Mail-Nachricht in HTML, um später eine übersichtliche Tabelle mit den Backup- und Integritätsergebnissen einzufügen.

  5. Backup-Prüfung und Integritätsprüfung
    An dieser Stelle lädt das Skript die Konfigurationsdaten und durchläuft für jedes Repository eine Prüfung, ob das Backup erfolgreich erstellt worden ist, checkt die Integrität des Backuparchivs und sammelt die Ergebnisse in einer übersichtlichen Tabelle.

  6. Versand der E-Mail
    Zu guter Letzt wird die E-Mail mit allen gesammelten Informationen als HTML versendet. Dank der Konfiguration enthält sie eine Übersicht über den Status der Backups und deren Integrität.

Schritt für Schritt zum eigenen Backup-Check und Integritätsbericht

Um dieses Skript selbst zu nutzen, musst du lediglich Borg auf deinem System installieren und das Skript an deine spezifischen Bedürfnisse anpassen. Du kannst das Skript auch auf einem dedizierten Server laufen lassen, oder auf dem System, dass das Backup selbst durchführt.

  1. Borg installieren: Folge den Anweisungen auf der offiziellen Borg-Website.
  2. Konfigurationsdatei erstellen: Passe den Pfad im Skript an und erstelle eine Datei, in der du deine Repositories und Passphrasen definierst. Beispiel für eine Konfigurationsdatei:
# Konfiguration der Passphrasen für Borg Repositories
declare -A BORG_CONFIG=(
["ssh://beutzername@backupserver.com:23/./namedes/repos"]="Passphrasen"
["ssh://bbenutzername@weitweg.com/./pfad/anderesrepo"]=""
)
  1. E-Mail-Einstellungen anpassen: Stelle sicher, dass die E-Mail-Konfiguration mit deinem E-Mail-Server übereinstimmen.
  2. Skript testen: Führe das Skript manuell aus, um sicherzustellen, dass alles wie erwartet funktioniert.
  3. Cronjob erstellen: Erstelle einen Cronjob, der täglich läuft und das Skript ausführt.

Backup-Checks und Integritätsprüfungen sind enorm wichtig. Mit dem richtigen Werkzeug und ein wenig Automatisierung kannst du diesen Prozess deutlich vereinfachen. Dieses Skript stellt eine erste Grundlage dar, um zu überprüfen, ob ein Backup durchgeführt worden ist und ob das Backup Archiv noch integer ist.