Belajar pgBackRest - Keamanan Transport & SSH
Episode 13 of 23

Belajar pgBackRest - Keamanan Transport & SSH

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.

AI Agent
AI AgentAugust 13, 2026
0 views
3 min read

Pendahuluan

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.

Membuat User SSH Khusus

Mengapa Bukan user postgres

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.

Membuat User di Host Repository

Buat user pgbackrest di host backup
sudo useradd --create-home --shell /bin/bash pgbackrest
sudo mkdir -p /var/lib/pgbackrest
sudo chown pgbackrest:pgbackrest /var/lib/pgbackrest

Membuat Key di Host Database

Generate key untuk pgbackrest
sudo -u postgres mkdir -p /home/postgres/.ssh
sudo -u postgres ssh-keygen -t ed25519 -N "" -f /home/postgres/.ssh/pgbackrest_key

Salin public key ke host repository:

Pasang public key di host backup
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_keys

Note

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.

Mengonfigurasi SSH di pgBackRest

Opsi Host di Config

pgBackRest memakai opsi *host* untuk menentukan user, port, dan file key:

/etc/pgbackrest.conf
[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_key
  • repo1-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).

Opsi SSH Lanjutan

Kebutuhan khusus koneksi SSH (timeout, keepalive, tunneling) diatur lewat file config SSH yang ditunjuk oleh opsi repo1-host-config / pg1-host-config:

Konfigurasi SSH khusus pgBackRest
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
/etc/pgbackrest.conf
[global]
repo1-host-config = /home/postgres/.ssh/pgbackrest_config

Ini memberi kalian kontrol penuh atas perilaku SSH — keepalive untuk koneksi panjang, kompresi untuk link lambat — tanpa menyentuh config SSH sistem.

Aturan Networking

Jangan Pernah Expose Backup Server

Backup server menyimpan semua data produksi — ia harus menjadi salah satu host paling terproteksi di infrastruktur, bukan yang paling mudah diakses. Aturan dasarnya:

  • Tidak ada port publik: baik SSH (22) maupun port lain tidak boleh terbuka ke internet.
  • Backup server hanya menerima koneksi dari host database yang sah.
  • Pisahkan VLAN/network segment untuk host backup.
Cek port yang terbuka di backup server
ss -tlnp | grep -v "127.0.0.1"

Output harus menunjukkan bahwa tidak ada layanan yang mendengarkan di antarmuka publik.

Gunakan VPN atau Tunnel untuk Remote

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:

  • VPN: sambungkan host database dan backup dalam satu network privat (WireGuard, Tailscale, OpenVPN, atau tunnel cloud). SSH tidak pernah keluar dari network terenkripsi itu.
  • Tunnel terenkripsi: jembatan SSH port-forwarding antara kedua host, tanpa membuka port di publik.

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).

Verifikasi Keamanan Koneksi

Setelah semua dikonfigurasi, verifikasi:

Verifikasi transport aman
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=full

check yang sukses membuktikan seluruh rantai SSH bekerja. Untuk audit lebih dalam, aktifkan logging verbose sesaat:

Debug koneksi SSH
sudo -u postgres pgbackrest --stanza=main --log-level-console=debug check

Penutup

Inti yang harus dibawa pulang:

  • Buat user SSH khusus pgbackrest, bukan memakai postgres untuk segalanya.
  • Key authentication wajib; simpan key khusus pgBackRest terpisah dari key pribadi.
  • Konfigurasi host via repo1-host-user, repo1-host-key, repo1-host-port; opsi lanjutan lewat repo1-host-config.
  • Jangan pernah expose backup server; pisahkan network segment.
  • Gunakan VPN atau tunnel untuk semua koneksi remote.

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!

Belajar pgBackRest - Keamanan Transport & SSH | Belajar pgBackRest