Restic Backup

Backup-Infrastruktur mit Restic und SaltStack aufbauen

Restic ist ein einfaches aber sehr mächtiges Backup-Programm. Gepaart mit Salt können Sie Backups vollautomatisch durchführen und über den Salt-Master zentral steuern. Ein einfacher SSH-Server dient als zentraler Speicher für die Backups.

Backup-Server vorbereiten

Restic kann auf einer Vielzahl von Zielen die Backups ablegen. SFTP bzw. SSH gehört dazu, was mit jedem Linux-System einfach zu realisieren ist.

Grundsätzlich kann jeder Benutzer-Account verwendet werden, ein eigener Benutzer resticist empfohlen, um das System „ordentlich“ zu halten. Restic authentifiziert sich ausschließlich per SSH-Key. Legen Sie einen neuen Benutzer an und generieren Sie SSH Schlüssel.

mkdir /srv/salt/restic
cd /srv/salt/restic
ssh-keygen -N "" -t ed25519 -C "restic@salt-master.local" -f ./id_ed25519

Backup-Software ausrollen

/srv/salt/restic/base.sls
#
# Create a restic user
#
restic-group:
  group.present:
    - name: restic

restic:
  user.present:
    - fullname: Restic Backup
    - shell: /bin/bash
    - home: /var/lib/restic
    - createhome: true
    - system: true
    - groups:
      - restic
    - require:
      - group: restic-group

bzip2:
  pkg.installed: []
#
# Download restic from github (the debian packages are quite outdated)
#
{% set version = '0.16.2' %}
download-restic:
  file.managed:
    - name: /var/tmp/restic_{{ version }}_linux_amd64.bz2
    - source: https://github.com/restic/restic/releases/download/v{{ version }}/restic_{{ version }}_linux_amd64.bz2
      - user: restic
    - group: restic
    - mode: 0755
    - require:
      - bzip2

#
# Install restic by unpacking the compressed binary
#
install-restic:
  cmd.run:
    - name: |
        set -e
        which bunzip2
        bunzip2 -k /var/tmp/restic_{{ version }}_linux_amd64.bz2 -c > restic
        chmod 0700 restic
        ./restic version
        rm -f /var/tmp/restic_{{ version }}_linux_amd64.bz2
    - cwd: /var/lib/restic
    - runas: restic
    - unless:
      - /var/lib/restic/restic version|grep -q {{ version }}
    - require:
      - file: download-restic
      - pkg: bzip2

/var/lib/restic/restic:
  file.managed:
    - mode: 0700
    - user: restic
    - require:
      - install-restic

/var/lib/restic/.ssh/:
  file.directory:
    - user: restic
    - group: restic
    - mode: 0700

😯 Probleme:

  1. Wenn Sie Downloads aus dem Internet ungeprüft in Ihr System übernehmen, kann Schadcode ins System gelangen.

  2. Der State download-restic speichert dauerhaft das komprimierte Archiv oder lädt es erneut herunter, wenn es auf dem temporären Verzeichnis gelöscht wurde.

🧩 Aufgaben: Optimieren Sie den State. Nutzen Sie eine der folgenden Optionen:

  • Erweitern Sie den State mit einer Prüfsummen-Prüfung. Der Download darf nur dann verwendet werden, wenn die Prüfsumme stimmt. Suchen Sie dazu in der Dokumentation nach dem Stichwort source_hash.

  • Fügen Sie eine unless Bedingung ein, damit der Download nicht mehr ausgeführt wird, sobald restic erfolgreich installiert wurde.

  • Laden Sie das komprimierte Archiv zuerst auf den Salt-Master herunter, entpacken Sie es und verteilen Sie es von dort.

Backup-Server ausrollen

Restic kann die Sicherungskopien auf einer Vielzahl von Fileservern abspeichern. In einem Intranet ist der in SSH integrierte SFTP-Server die einfachste Lösung. Das bedeutet, Sie benötigen keine spezielle Server-Software. Der Server muss lediglich den passenden SSH-Private-Key nutzen, der zum Public-Key der Clients passt.

Backup-Clients ausrollen

😯 Probleme:

  1. Die Liste der Ordner, welche gesichert werden, ist „hart kodiert“. Was machen Sie, wenn Systeme unterschiedliche Ordner sichern sollen?

🧩 Aufgabe:

  • Speichern Sie die Backup-Ordner in einem Pillar und erweitern Sie den State, sodass /var/lib/restic/files_to_backup aus einem Pillar gelesen wird.

Backups prüfen

Prüfen Sie, wann das letzte Backup erstellt wurde, z. B. mit einem State:

Zurücksichern

Oder prüfen Sie die Backups direkt auf dem Backup-Server, indem Sie die verschlüsselte Backupdatei auf dem Backup-Server mounten.

Das zum Mounten benötigte Password entnehmen Sie der Datei /var/cache/salt/master/minions/<CLIENT>/files/var/lib/restic/.restic-password auf dem Salt-Master.

Weitere Information zum Zurücksichern in der 📖 Restic Dokumentation.

😯 Problem:

Falls Sie das Backup nicht mounten können, ist das fuse Paket nicht installiert. Erweitern Sie den restic.server State und installieren Sie darüber das benötigte Paket.

Backups überwachen

Optional können Sie mit dem kostenlosen Dienst Betteruptime.com ein Monitoring der Backups einrichten.

Mit diesem State wird ein Monitoring Item auf dem Dashboard von Betteruptime registriert. Dieses Item erwartet alle 24 Stunden eine positive Rückmeldung, andernfalls wird ein Alarm ausgelöst. Erweitern Sie das Skript, welches das Backup durchführt, mit folgender Zeile:

Last updated