Offsite-Backup fürs HomeLab: restic REST-Server im append-only-Modus
Teil 16 der Reihe Server im Netz: restic REST-Server auf dem VPS als Sicherungsziel, das ein übernommenes HomeLab nicht löschen kann. Mit Sicherung über das Internet, durchgespieltem Angriff, Aufräumen und Wiederherstellung.
Geprüft am 05.11.2026 · für restic rest-server 0.14.0, restic 0.19.1, Caddy 2.11.7
Mit KI erstellt – redaktionelle Prüfung ausstehend
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Eine Sicherung im eigenen Haus hilft nicht bei Brand, Diebstahl oder Überspannung. Eine Kopie außer Haus gehört deshalb zu jedem Sicherungskonzept. Ein VPS eignet sich dafür, hat aber eine Schwäche: Wer den Rechner im HomeLab übernimmt, hat meist auch die Zugangsdaten zur Sicherung und kann sie löschen, bevor er die Daten verschlüsselt. Genau so gehen Erpresser vor. Der REST-Server von restic hat dafür einen Modus, in dem der Client nur neue Sicherungen ablegen, aber nichts löschen oder überschreiben darf. Diese Anleitung richtet ihn hinter Caddy ein, sichert aus dem Heimnetz und spielt den Angriff durch.
Dies ist Teil 16 der Reihe „Server im Netz“. Als Beispiel dient ein netcup-VPS mit Ubuntu und Docker, auf dem Caddy die Domain sedv-lab.de mit HTTPS ausliefert. Gesichert wird ein Linux-Rechner im Heimnetz.
Voraussetzungen
- Der VPS aus Teil 4 mit Caddy im Host-Netz, Docker und genug Platz für die Sicherungen
- Ein Name für den Dienst, im Beispiel
backup.sedv-lab.de - Ein Rechner im Heimnetz mit Docker oder einem installierten restic
- Das Werkzeug
htpasswdaus dem Paketapache2-utilsoder das Docker-Imagehttpd
So schützt append-only
restic speichert ein Repository als Sammlung von Dateien: Datenpakete, Indizes, Schlüssel und Snapshots. Über den REST-Server greift der Client per HTTP darauf zu. Im Modus --append-only lehnt der Server das Löschen ab, mit einer Ausnahme für Sperrdateien, die restic während einer Sicherung anlegt. Vorhandene Dateien überschreibt der REST-Server ohnehin nie. Damit kann der Client sichern, aber keine Sicherung entfernen, auch wenn er das Passwort des Repositorys kennt.
--private-repos sorgt zusätzlich dafür, dass jeder Benutzer nur das Repository mit seinem eigenen Namen sieht. So lassen sich mehrere Rechner auf einem Server sichern, ohne dass einer an die Daten des anderen kommt.
Schritt 1: REST-Server auf dem VPS
Zuerst das Passwort für den Zugang. Es schützt den Weg zum Server, unabhängig vom Passwort des Repositorys:
mkdir -p /opt/rest-server/data && cd /opt/rest-server
(umask 077; openssl rand -hex 16 > heimlab-pw)
docker run --rm --entrypoint htpasswd httpd:2.4-alpine -B -C 10 -nb heimlab "$(cat heimlab-pw)" > data/.htpasswd
Die compose.yaml:
services:
rest-server:
image: restic/rest-server:0.14.0
container_name: rest-server
restart: unless-stopped
network_mode: host
environment:
OPTIONS: "--listen 127.0.0.1:8010 --append-only --private-repos"
volumes:
- ./data:/data
Das Image liest die Datei /data/.htpasswd von selbst, zusätzliche Schalter gehen über OPTIONS. Der Server lauscht nur lokal, HTTPS übernimmt Caddy. Ist ein Port belegt, meldet das Log etwa listen tcp 127.0.0.1:8000: bind: address already in use. Dann wählen Sie einen anderen, hier 8010.
docker compose up -d
docker logs rest-server
Verifizieren: Im Log stehen Authentication enabled, Append only mode enabled, Private repositories enabled und start server on 127.0.0.1:8010.
Schritt 2: Caddy davor
backup.sedv-lab.de {
import sicher
reverse_proxy 127.0.0.1:8010
}
Caddy begrenzt die Größe von Uploads standardmäßig nicht, große Datenpakete gehen also ohne weitere Einstellung durch.
Verifizieren: curl -s -o /dev/null -w '%{http_code}\n' https://backup.sedv-lab.de/heimlab/config liefert 401, denn ohne Anmeldung kommt niemand hinein.
Schritt 3: Sichern aus dem HomeLab
Auf dem Rechner im Heimnetz brauchen Sie das Zugangspasswort vom VPS und ein eigenes Passwort für das Repository. Das zweite verschlüsselt die Daten, der Server sieht sie nie im Klartext. Bewahren Sie es zusätzlich an einem sicheren Ort auf, ohne dieses Passwort ist die Sicherung wertlos.
export RESTIC_REPOSITORY="rest:https://heimlab:ZUGANGSPASSWORT@backup.sedv-lab.de/heimlab/"
export RESTIC_PASSWORD_FILE=/root/.restic-pw
restic init
restic backup /srv/daten --host heimlab
Der Pfad im Repository muss mit dem Benutzernamen beginnen, hier /heimlab/. Im Test lief restic 0.19.1 als Container. Die erste Sicherung mit 191 MiB in 3002 Dateien dauerte 39 Sekunden, das entspricht rund 5 MB pro Sekunde und damit etwa dem Upload der Heimleitung. Für die zweite Sicherung lud restic nur die 19 MiB Änderung hoch und war nach 5 Sekunden fertig.

Für den Alltag gehört die Sicherung in einen Timer oder Cron-Job auf dem HomeLab-Rechner.
Verifizieren: restic snapshots zeigt die Snapshots mit Zeit, Host und Größe.
Schritt 4: Der Angriff
Jetzt spielen wir den Angreifer, der den HomeLab-Rechner samt Zugangsdaten und Passwort übernommen hat. Zuerst der naheliegende Weg mit restic, dann direkt über HTTP:
restic forget --keep-last 1 --prune
curl -u heimlab:ZUGANGSPASSWORT -X DELETE https://backup.sedv-lab.de/heimlab/snapshots/SNAPSHOT-ID
curl -u heimlab:ZUGANGSPASSWORT -X DELETE https://backup.sedv-lab.de/heimlab/config

restic zeigte zwar an, welchen Snapshot es entfernen wollte, scheiterte aber mit 403 Forbidden. Die Versuche mit curl, einen Snapshot, ein Datenpaket oder die Konfiguration zu löschen oder einen Snapshot zu überschreiben, endeten ebenso mit 403. Ein falsches Zugangspasswort ergab 401, ein Zugriff auf einen Pfad, der nicht mit dem eigenen Benutzernamen beginnt, im Test /fremd/, ebenfalls 401. restic check fand danach keine Fehler.
Was der Angreifer trotzdem kann: Mit dem Passwort des Repositorys kann er die Daten lesen. Er kann einen neuen Schlüssel anlegen, das gelang im Test mit restic key add. Ein so angelegter Schlüssel bleibt gültig, auch wenn Sie Ihr Passwort ändern, denn vom Client aus lässt er sich nicht löschen. Entfernen können Sie ihn nur auf dem Server mit restic key remove. Und er kann den Speicher mit Müll füllen. Behalten Sie deshalb den freien Platz auf dem VPS im Blick, etwa mit der Überwachung aus Teil 10.
Verifizieren: restic snapshots zeigt nach den Versuchen dieselben Snapshots wie vorher.
Schritt 5: Aufräumen auf dem Server
Alte Snapshots müssen irgendwann weg. Das geht nur am REST-Server vorbei direkt auf dem VPS, wo restic das Repository als lokales Verzeichnis öffnet. Dafür braucht der Server das Passwort des Repositorys. Legen Sie es nur für die Wartung dort ab, oder geben Sie es von Hand ein:
cd /opt/rest-server
docker run --rm -it -v "$PWD/data:/data" restic/restic:0.19.1 \
-r /data/heimlab forget --keep-last 30 --prune
Im Test mit --keep-last 1 entfernte restic den älteren Snapshot und baute die Indizes neu auf, die Ausgabe endete mit done. Führen Sie das nur aus, wenn gerade keine Sicherung läuft.
Verifizieren: ls data/heimlab/snapshots | wc -l zeigt die verbliebene Zahl der Snapshots. Ein restic check über den REST-Server lief im Test danach ohne Fehler, die Dateien gehören wie beim REST-Server root.
Schritt 6: Wiederherstellen
Eine Sicherung ist erst etwas wert, wenn die Rückspielung klappt:
restic restore latest --target /tmp/wiederhergestellt
restic check
Im Test kamen 210 MiB laut restic in 6 Sekunden zurück. Ein Vergleich der SHA-256-Prüfsummen aller 3003 Dateien mit dem Original ergab keine Abweichung.
Verifizieren: Vergleichen Sie eine Stichprobe mit sha256sum oder alles mit diff -r.
Typische Fehler
| Meldung | Ursache und Lösung |
|---|---|
unexpected HTTP response (401): 401 Unauthorized | Falsches Zugangspasswort oder der Pfad passt nicht zum Benutzernamen bei --private-repos. URL mit /BENUTZER/ verwenden. |
Remove(<snapshot/…>) failed: unexpected HTTP response (403): 403 Forbidden | Kein Fehler, sondern append-only. Aufräumen auf dem Server, Schritt 5. |
listen tcp 127.0.0.1:8000: bind: address already in use | Port belegt. Anderen Port in OPTIONS und im Caddy-Block eintragen. |
| Erste Sicherung sehr langsam | Der Upload der Heimleitung begrenzt. Die erste Sicherung über Nacht laufen lassen, danach geht nur die Änderung über die Leitung. |
Häufige Fragen
Reicht das gegen Ransomware?
Es schützt die Sicherungen davor, vom HomeLab aus gelöscht zu werden. Wer den VPS selbst übernimmt, kann sie weiter löschen. Sichern Sie den Zugang zum VPS deshalb getrennt ab, etwa mit eigenem SSH-Schlüssel, der nicht auf dem HomeLab liegt.
Kann ich mehrere Rechner auf denselben Server sichern?
Ja. Legen Sie je Rechner einen Benutzer in der .htpasswd an. Mit --private-repos sieht jeder nur sein eigenes Repository.
Wie viel Platz braucht die Sicherung?
restic speichert gleiche Datenblöcke nur einmal. Im Test belegten zwei Snapshots einer Quelle von 210 MiB laut restic zusammen 212 MiB auf dem VPS, weil sich zwischen den Sicherungen nur 19 MiB geändert hatten. Planen Sie für viele Snapshots also vor allem Platz für die Änderungen ein.
Fazit
Der REST-Server von restic macht aus einem VPS ein Sicherungsziel, das ein übernommenes HomeLab nicht leeren kann. Im Test wurde jeder Löschversuch abgewiesen, Sichern und Wiederherstellen liefen dabei ohne Einschränkung. Der Preis ist, dass das Aufräumen alter Snapshots auf dem Server selbst passieren muss. Planen Sie das ein und behalten Sie den freien Speicher im Blick.


