Host repository punya satu tugas dan nyaris tanpa persyaratan. Ia tidak butuh core CPU, karena tidak pernah membaca datamu — ia hanya menyimpan blob terenkripsi yang tidak bisa dibukanya. Ia tidak butuh memori, karena kerja deduplikasi terjadi di sisi sumber. Yang ia butuhkan hanyalah disk, alamat yang stabil, dan berada di suatu tempat yang tidak ikut terseret masalah mesin sumber.
Di panel: Order → VPS → Sentinel, image Debian 12, dan — inilah inti persoalannya — bastion yang berbeda dari tempat sumber berjalan. Helsinki untuk kerja, Reykjavík untuk menyimpan. Tidak perlu alamat email untuk membuka akun dan tagihannya bisa dilunasi dengan Monero, Bitcoin, Lightning, atau aset lain yang didukung, yang berarti mesin kedua ini tidak memunculkan kembali identitas yang sudah dijaga hati-hati oleh mesin pertama.
| Target repository |
Bulanan |
Penyimpanan |
Working set yang ditampungnya |
Biaya untuk memulihkan |
| Sentinel | $3.90 | 120 GB NVMe | ~30 GB | Tidak ada — tanpa meteran |
| Garrison | $7.90 | 240 GB NVMe | ~70 GB | Tidak ada — tanpa meteran |
| Ravelin | $16.90 | 480 GB NVMe | ~150 GB | Tidak ada — tanpa meteran |
| Bulwark | $32.90 | 960 GB NVMe | ~300 GB | Tidak ada — tanpa meteran |
| Object storage kelas S3 | ~$0.023/GB | Elastis | Apa saja | Egress termeteran |
Kolom working set mengasumsikan snapshot harian yang disimpan selama satu tahun dengan tingkat perubahan normal; repository yang sebagian besar berisi file yang jarang berubah bisa bertahan jauh lebih lama, sedangkan yang penuh binary besar yang sering ditulis ulang bertahan lebih singkat. Baris terakhir ada untuk skala, dan untuk detail yang sering dilupakan orang sampai hari buruk itu tiba: object storage juga membebankan biaya untuk download, dan download adalah hal yang kamu lakukan saat keadaan darurat.
Di sisi tujuan — user tanpa privilese dan sebuah direktori.
adduser --disabled-password --gecos "" backup
install -d -m 0700 -o backup -g backup /srv/restic/web01
Pengguna backup ini tidak punya password, tidak punya akses sudo, dan tidak ada apa pun untuk di-login. Ia ada hanya untuk memiliki satu direktori. Beri direktori tersendiri untuk setiap mesin sumber jika kamu membackup beberapa mesin — satu repository per sumber menjaga agar penyusupan di satu mesin tidak menyentuh riwayat mesin lain.
Di sisi sumber — kunci yang tidak dipakai untuk hal lain apa pun.
ssh-keygen -t ed25519 -f /root/.ssh/id_backup -N "" -C "backup:web01"
cat /root/.ssh/id_backup.pub
Jangan pakai ulang kunci login Anda. Kunci ini disimpan tidak terenkripsi di disk karena timer tanpa pengawasan harus memakainya pukul tiga pagi, dan itu justru jenis kunci yang seharusnya Anda batasi ruang lingkupnya hanya untuk satu tujuan dan satu keperluan.
Kembali ke tujuan — batasi apa yang boleh dilakukan kunci itu. Tempelkan kunci publik ke /home/backup/.ssh/authorized_keys dengan prefix di depannya. Untuk restic lewat SFTP:
restrict,from="198.51.100.7" ssh-ed25519 AAAAC3NzaC1lZDI1... backup:web01
Opsi restrict mematikan port forwarding, agent forwarding, X11, dan alokasi PTY hanya dengan satu kata, hanya menyisakan transfer file dan tidak ada yang lain. Klausa from= mengunci kunci itu ke alamat sumber, sehingga salinannya yang dicuri dari server tidak berguna di tempat lain mana pun. Untuk Borg, maju satu langkah lagi dan paksa perintahnya (force command), di sanalah mode append-only-nya berada:
command="borg serve --append-only --restrict-to-path /srv/borg/web01",restrict ssh-ed25519 AAAAC3NzaC1lZDI1... borg:web01
Baris itu adalah keseluruhan pertahanan ransomware dalam satu tempat: apa pun yang dikirim sumber, tujuan hanya akan pernah menjalankan borg serve, hanya di dalam path itu, dan hanya dalam mode yang menambahkan (append). Root shell di sisi sumber tidak bisa memakai kunci ini untuk menghapus data bulan lalu.
Beri nama tujuan sekali saja, di sisi sumber. Taruh di /root/.ssh/config agar setiap perintah berikutnya singkat dan alamatnya hanya hidup di satu file:
Host rkv-repo
HostName 198.51.100.42
User backup
IdentityFile /root/.ssh/id_backup
IdentitiesOnly yes
Lalu sambungkan sekali secara manual — ssh rkv-repo — untuk menerima kunci host. Timer yang berjalan tanpa pengawasan tidak akan menjawab prompt fingerprint, dan backup pertama yang menggantung diam-diam selama seminggu adalah kejadian klasik. Selagi kamu berada di sisi tujuan, perlakukan ia sama seperti mesin lain yang kamu miliki: jalankan juga checklist pengerasan jam pertama di sana. Mesin ini menyimpan salinan segalanya, dan pantas mendapatkan satu jam penuh itu.