Belajar Bacula - TLS & Network Security
Episode 13 of 23

Belajar Bacula - TLS & Network Security

Episode ini mengajarkan keamanan jaringan Bacula: aktivasi TLS antara Director, Storage Daemon, dan File Daemon dengan sertifikat, pembatasan akses daemon via firewall dan VLAN, strategi enkripsi data (plugin Enterprise atau pipeline stunnel), serta peran checksum integritas.

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

Pendahuluan

Di episode 12 kita mengamankan siapa yang boleh terhubung. Tapi ada celah yang belum tertutup: isi percakapan. Password Bacula melintas jaringan sebagai teks biasa, dan data backup ikut telanjang di wire. Di episode 13 kita menutupnya dengan TLS dan enkripsi: TLS melindungi tiga jalur (Director↔SD, Director↔FD, FD↔SD), dan enkripsi data memastikan bahkan media yang dicuri pun tidak terbaca.

Aktifkan TLS antar Daemon

Siapkan CA dan Sertifikat

Pendekatan yang benar adalah CA internal: satu CA menandatangani sertifikat untuk tiap daemon. Buat CA dulu:

Buat CA internal
mkdir -p /etc/bacula/certs
openssl genrsa -out /etc/bacula/certs/ca.key 4096
openssl req -x509 -new -key ca.key -days 3650 -subj "/CN=Bacula CA" -out ca.pem

Lalu buat sertifikat untuk setiap daemon (contoh untuk Director):

Sertifikat Director
openssl req -new -newkey rsa:4096 -nodes -keyout director.key -out director.csr -subj "/CN=bacula-dir"
openssl x509 -req -in director.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out director.pem -days 825

Ulangi pola yang sama untuk bacula-sd dan setiap bacula-fd client. Salin CA (ca.pem) ke semua host.

Konfigurasi di bacula-dir.conf

TLS di resource Director
Director {
  Name = bacula-dir
  TLS Enable = yes
  TLS Require = yes
  TLS Verify Peer = yes
  TLS CA Certificate File = /etc/bacula/certs/ca.pem
  TLS Certificate = /etc/bacula/certs/director.pem
  TLS Key = /etc/bacula/certs/director.key
}

Directive kunci:

  • TLS Enable = yes — mengaktifkan negosiasi TLS.
  • TLS Require = yes — menolak koneksi yang tidak TLS (wajib untuk semua peer).
  • TLS Verify Peer = yes — memverifikasi sertifikat peer terhadap CA.

Resource Client, Storage, dan Console di file yang sama juga bisa diberi TLS Enable = yes untuk membatasi jalur tertentu.

Konfigurasi di bacula-sd.conf dan bacula-fd.conf

TLS di resource Director bacula-sd.conf
Director {
  Name = bacula-dir
  Password = "rahasia-sd"
  TLS Enable = yes
  TLS Require = yes
  TLS Verify Peer = yes
  TLS CA Certificate File = /etc/bacula/certs/ca.pem
  TLS Certificate = /etc/bacula/certs/sd.pem
  TLS Key = /etc/bacula/certs/sd.key
}
TLS di resource Director bacula-fd.conf
Director {
  Name = bacula-dir
  Password = "rahasia-fd"
  TLS Enable = yes
  TLS Require = yes
  TLS CA Certificate File = /etc/bacula/certs/ca.pem
  TLS Certificate = /etc/bacula/certs/fd.pem
  TLS Key = /etc/bacula/certs/fd.key
}

Warning

Aktifkan TLS di semua resource secara konsisten sebelum mengaktifkan TLS Require = yes. Jika hanya satu sisi yang meminta TLS sementara sisi lain tidak siap, koneksi gagal dengan error TLS handshake. Urutan aman: pasang sertifikat di semua host → TLS Enable → baru TLS Require.

Verifikasi TLS Aktif

Verifikasi jalur TLS
* status dir
* status sd
* status client=client-fd

Status daemon menampilkan TLS: Active pada koneksi yang terenkripsi. Error TLS negotiation failed menandakan ketidakcocokan sertifikat/CA — periksa CN, tanggal, dan CA file di kedua sisi.

Batasi Akses: Firewall dan VLAN

TLS mengenkripsi, tapi tidak menutup pintu. Gabungkan dengan segmentasi:

  • VLAN backup terpisah — FD, SD, dan Director di segmen jaringan sendiri; tidak ada host lain yang bisa mencapai port 9101-9103.
  • Firewall stateful — hanya izinkan koneksi yang memang dibutuhkan, dari alamat yang dikenal:
nftables untuk segmen backup
nft add rule inet filter input ip saddr 10.20.0.0/24 tcp dport {9102, 9103} accept
nft add rule inet filter input tcp dport {9101, 9102, 9103} drop
  • bconsole hanya dari host admin — resource Console bisa dibatasi dengan Address untuk membatasi alamat yang boleh terhubung ke Director.

Enkripsi Data

TLS melindungi data saat transit. Tapi ada pertanyaan yang lebih dalam: apa yang terjadi jika tape dicuri atau disk storage disita? Jawabannya adalah enkripsi data di media — at-rest.

Opsi di Enterprise

Bacula Enterprise memiliki enkripsi terintegrasi di Storage Daemon: data dienkripsi sebelum ditulis ke media, dengan manajemen kunci bawaan dan integrasi HSM. Kalian mengatur CryptKey di resource Storage/Client dan media menjadi tidak terbaca tanpa kunci.

Opsi di Community: Pipeline stunnel

Community tidak memiliki enkripsi media bawaan. Solusi yang umum dipakai: bungkus koneksi FD↔SD dengan stunnel yang melakukan TLS client-to-client. Setiap FD dan SD menjalankan stunnel lokal; Bacula tetap berbicara plaintext pada localhost, sedangkan wire antar host terenkripsi.

Contoh stunnel di sisi SD
[bacula-sd]
accept = 127.0.0.1:9102
connect = 0.0.0.0:9202
cert = /etc/stunnel/sd.pem

Hasilnya: backup yang mengalir antar host terenkripsi tanpa mengubah logika Bacula. Kompleksitasnya berpindah ke pengelolaan stunnel — kompromi yang masuk akal untuk lingkungan tanpa lisensi Enterprise.

Note

Alternatif lain untuk Community: enkripsi di level filesystem storage (misal LUKS untuk direktori Archive Device, atau dm-crypt untuk tape). Pendekatan ini sederhana tapi hanya melindungi data saat media tersimpan — bukan saat transit.

Integritas Checksum

Enkripsi dan TLS melindungi kerahasiaan; checksum melindungi integritas. Di FileSet, opsi signature mencatat hash tiap file:

Checksum per file
FileSet {
  Name = "Set Web"
  Include {
    Options {
      signature = SHA1
    }
    File = /var/www
  }
}

Dengan signature, Bacula menyimpan hash di catalog. Saat restore, hash diverifikasi — file yang berubah (korupsi, intervensi) terdeteksi. Ini juga bahan bakar job Verify yang kita bahas di episode 9.

Important

Kebenaran end-to-end: TLS melindungi transit, enkripsi melindungi media, checksum melindungi isi. Ketiganya berdiri sendiri-sendiri — mengaktifkan satu tidak menggantikan yang lain. Untuk data bernilai tinggi, gunakan ketiganya.

Penutup

Inti yang harus dibawa pulang:

  • TLS memerlukan CA internal dan sertifikat per daemon; TLS Require dipasang setelah semua sisi siap.
  • Segmentasi VLAN + firewall stateful menutup akses ke port 9101-9103.
  • Enkripsi media: plugin Enterprise di SD, atau pipeline stunnel di Community.
  • signature checksum di FileSet melindungi integritas saat restore.
  • Verifikasi TLS aktif lewat status di bconsole.

Di episode 14 selanjutnya kita akan hardening dan least privilege — menjalankan daemon dengan user non-root bila memungkinkan, mengunci permission konfigurasi (600/640), audit log, password FD unik per client, dan monitoring akses. Inilah lapisan yang membuat penyerang harus bekerja ekstra keras.