Episode ini mengamankan jalur transport pgBackRest: membuat user SSH khusus pgbackrest dengan key authentication, mengonfigurasi host dan opsi SSH di config, serta aturan networking — jangan pernah mengekspos backup server ke publik dan gunakan VPN atau tunnel untuk koneksi remote. Inilah setengah dari keamanan sistem backup.

Di episode 12 kita memindahkan repository ke host lain dan object storage. Setiap koneksi antar host itu melewati SSH — dan SSH yang dikonfigurasi asal-asalan adalah pintu masuk paling umum bagi penyerang. Di episode 13 kita menutup pintu itu: user khusus, key authentication, opsi SSH yang ketat, dan aturan jaringan yang memastikan backup server tidak pernah terekspos.
Ingat prinsip di episode 11: enkripsi melindungi data saat beristirahat (at-rest). SSH melindungi data saat berpindah (in-transit). Sistem backup yang serius butuh keduanya.
Menggunakan postgres untuk SSH antar host berisiko: satu key yang sama membuka akses ke database dan repository sekaligus. Praktik terbaik adalah user khusus bernama pgbackrest yang aksesnya dibatasi hanya untuk tugas backup.
sudo useradd --create-home --shell /bin/bash pgbackrest
sudo mkdir -p /var/lib/pgbackrest
sudo chown pgbackrest:pgbackrest /var/lib/pgbackrestsudo -u postgres mkdir -p /home/postgres/.ssh
sudo -u postgres ssh-keygen -t ed25519 -N "" -f /home/postgres/.ssh/pgbackrest_keySalin public key ke host repository:
sudo -u pgbackrest mkdir -p /home/pgbackrest/.ssh
echo "ssh-ed25519 AAAA...pgbackrest_key.pub" | sudo -u pgbackrest tee -a /home/pgbackrest/.ssh/authorized_keys
sudo chmod 700 /home/pgbackrest/.ssh
sudo chmod 600 /home/pgbackrest/.ssh/authorized_keysNote
Key authentication wajib — jangan pernah mengandalkan password SSH untuk otomasi. Password tidak bisa diotomatiskan dengan aman dan memperluas permukaan serangan. Key yang di-generate khusus (bukan key pribadi kalian) juga memudahkan audit dan pencabutan terpisah.
pgBackRest memakai opsi *host* untuk menentukan user, port, dan file key:
[global]
repo1-host = backup01.internal
repo1-host-user = pgbackrest
repo1-host-port = 22
repo1-host-key = /home/postgres/.ssh/pgbackrest_key
[main]
pg1-host = db01.internal
pg1-host-user = pgbackrest
pg1-host-key = /home/postgres/.ssh/pgbackrest_keyrepo1-host-user / pg1-host-user — user SSH untuk masing-masing host.repo1-host-key / pg1-host-key — file private key yang dipakai.repo1-host-port — port SSH bila bukan 22.Dengan pg1-host, database-nya sendiri juga diakses via SSH — pola yang umum saat pgBackRest berjalan di host terpisah dari database (misal server backup sentral yang meng-backup banyak database).
Kebutuhan khusus koneksi SSH (timeout, keepalive, tunneling) diatur lewat file config SSH yang ditunjuk oleh opsi repo1-host-config / pg1-host-config:
sudo -u postgres cat >> /home/postgres/.ssh/pgbackrest_config << 'EOF'
Host backup01.internal
User pgbackrest
IdentityFile /home/postgres/.ssh/pgbackrest_key
ServerAliveInterval 30
ServerAliveCountMax 4
Compression yes
EOF[global]
repo1-host-config = /home/postgres/.ssh/pgbackrest_configIni memberi kalian kontrol penuh atas perilaku SSH — keepalive untuk koneksi panjang, kompresi untuk link lambat — tanpa menyentuh config SSH sistem.
Backup server menyimpan semua data produksi — ia harus menjadi salah satu host paling terproteksi di infrastruktur, bukan yang paling mudah diakses. Aturan dasarnya:
ss -tlnp | grep -v "127.0.0.1"Output harus menunjukkan bahwa tidak ada layanan yang mendengarkan di antarmuka publik.
Jika host backup berada di lokasi berbeda (cloud lain, data center terpisah, atau antar-region), jangan membuka SSH langsung ke internet. Dua pola yang aman:
Dengan pola ini, koneksi backup berjalan di atas channel yang sudah terenkripsi dan terotentikasi — bukan SSH mentah yang melintasi internet.
Warning
Memaparkan SSH backup server ke internet adalah salah satu cara termudah menemukan diri kalian di log brute-force. Selalu gunakan VPN/tunnel untuk koneksi remote, batasi source IP di firewall, dan pastikan sshd hanya menerima key authentication (PasswordAuthentication no).
Setelah semua dikonfigurasi, verifikasi:
sudo -u postgres ssh -i /home/postgres/.ssh/pgbackrest_key backup01.internal echo ok
sudo -u postgres pgbackrest --stanza=main check
sudo -u postgres pgbackrest --stanza=main backup --type=fullcheck yang sukses membuktikan seluruh rantai SSH bekerja. Untuk audit lebih dalam, aktifkan logging verbose sesaat:
sudo -u postgres pgbackrest --stanza=main --log-level-console=debug checkInti yang harus dibawa pulang:
pgbackrest, bukan memakai postgres untuk segalanya.repo1-host-user, repo1-host-key, repo1-host-port; opsi lanjutan lewat repo1-host-config.Di episode 14 selanjutnya kita akan mengawasi sistem backup: monitoring & metrics — integrasi Prometheus dengan pgbackrest_exporter, memakai pgbackrest info --output=json di script, serta alerting untuk backup yang gagal, terlambat (deadline), dan WAL archiving yang stuck. Sistem yang tidak terpantau adalah sistem yang gagal diam-diam!