Der Repository-Host hat genau eine Aufgabe und fast keine Anforderungen. Er braucht keine Kerne, weil er Ihre Daten nie liest — er hält verschlüsselte Blobs, die er nicht öffnen kann. Er braucht keinen Arbeitsspeicher, weil die Deduplizierungsarbeit auf der Quelle stattfindet. Er braucht Speicherplatz, eine stabile Adresse, und einen Standort, an dem ihn die Probleme der Quellmaschine nicht einholen.
Im Panel: Order → VPS → Sentinel, Image Debian 12, und — das ist der ganze Punkt — eine andere Bastion als die, in der die Quelle läuft. Helsinki arbeitet, Reykjavík hält. Für die Eröffnung des Kontos ist keine E-Mail-Adresse nötig, und die Rechnung wird in Monero, Bitcoin, Lightning oder einem der anderen unterstützten Assets beglichen — die zweite Maschine führt die Identität, auf die die erste so bedacht war, also nicht wieder ein.
| Repository-Ziel |
Monatlich |
Speicher |
Enthaltener Arbeitsbestand |
Kosten der Wiederherstellung |
| Sentinel | $3.90 | 120 GB NVMe | ~30 GB | Nichts — pauschal |
| Garrison | $7.90 | 240 GB NVMe | ~70 GB | Nichts — pauschal |
| Ravelin | $16.90 | 480 GB NVMe | ~150 GB | Nichts — pauschal |
| Bulwark | $32.90 | 960 GB NVMe | ~300 GB | Nichts — pauschal |
| S3-Objektspeicher | ~$0.023/GB | Elastisch | Beliebig | Abgerechneter Traffic |
Die Spalte für den Arbeitsbestand geht von täglichen Snapshots über ein Jahr bei normaler Änderungsrate aus; ein Repository, das überwiegend langsam veränderliche Dateien enthält, reicht deutlich weiter, eines voller großer, immer wieder neu geschriebener Binärdateien reicht weniger weit. Die letzte Zeile steht dort für die Größenordnung, und für das Detail, das man bis zum schlechten Tag vergisst: Objektspeicher berechnet auch den Download, und der Download ist das, was man im Notfall tut.
Auf dem Ziel — ein unprivilegierter Benutzer und ein Verzeichnis.
adduser --disabled-password --gecos "" backup
install -d -m 0700 -o backup -g backup /srv/restic/web01
Der Backup-Benutzer hat kein Passwort, kein sudo und nichts, worin er sich einloggen könnte. Er existiert nur, um Eigentümer eines Verzeichnisses zu sein. Geben Sie ihm ein eigenes Verzeichnis pro Quellmaschine, wenn Sie mehrere sichern — ein Repository pro Quelle verhindert, dass eine Kompromittierung auf einer Maschine den Verlauf einer anderen berührt.
Auf der Quelle — ein Schlüssel, der für nichts anderes verwendet wird.
ssh-keygen -t ed25519 -f /root/.ssh/id_backup -N "" -C "backup:web01"
cat /root/.ssh/id_backup.pub
Verwenden Sie nicht Ihren Login-Schlüssel erneut. Dieser hier liegt unverschlüsselt auf der Platte, weil ein unbeaufsichtigter Timer ihn um drei Uhr morgens benutzen muss — genau die Art von Schlüssel, die auf ein einziges Ziel und einen einzigen Zweck beschränkt sein sollte.
Zurück auf dem Ziel — schränken Sie ein, was dieser Schlüssel darf. Fügen Sie den öffentlichen Schlüssel mit einem Präfix davor in /home/backup/.ssh/authorized_keys ein. Für restic über SFTP:
restrict,from="198.51.100.7" ssh-ed25519 AAAAC3NzaC1lZDI1... backup:web01
Die restrict-Option schaltet Portweiterleitung, Agent-Forwarding, X11 und PTY-Zuweisung mit einem Wort aus und lässt nur die Dateiübertragung übrig. Die from=-Klausel bindet den Schlüssel an die Quelladresse, sodass eine vom Server gestohlene Kopie davon überall sonst nutzlos ist. Gehen Sie bei Borg noch einen Schritt weiter und erzwingen Sie den Befehl — genau dort lebt sein Append-only-Modus:
command="borg serve --append-only --restrict-to-path /srv/borg/web01",restrict ssh-ed25519 AAAAC3NzaC1lZDI1... borg:web01
Diese Zeile ist die gesamte Ransomware-Abwehr an einer Stelle: Was auch immer die Quelle sendet, das Ziel führt ausschließlich borg serve aus, nur innerhalb dieses Pfads, und nur in einem Modus, der ausschließlich anhängt. Eine Root-Shell auf der Quelle kann mit diesem Schlüssel nicht den letzten Monat löschen.
Benennen Sie das Ziel einmal, auf der Quelle. Legen Sie es in /root/.ssh/config ab, damit jeder spätere Befehl kurz bleibt und die Adresse in genau einer Datei steht:
Host rkv-repo
HostName 198.51.100.42
User backup
IdentityFile /root/.ssh/id_backup
IdentitiesOnly yes
Verbinden Sie sich dann einmal von Hand — ssh rkv-repo — um den Host-Key zu akzeptieren. Ein unbeaufsichtigter Timer beantwortet keine Fingerprint-Abfrage, und ein erstes Backup, das eine Woche lang stillschweigend hängen bleibt, ist ein Klassiker. Solange Sie auf dem Ziel sind, behandeln Sie es wie jede andere Maschine, die Ihnen gehört: Führen Sie auch dort die Checkliste zur Härtung in der ersten Stunde aus. Es hält eine Kopie von allem, und es verdient die volle Stunde.