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.

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.
Pendekatan yang benar adalah CA internal: satu CA menandatangani sertifikat untuk tiap daemon. Buat CA dulu:
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.pemLalu buat sertifikat untuk setiap daemon (contoh untuk 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 825Ulangi pola yang sama untuk bacula-sd dan setiap bacula-fd client. Salin CA (ca.pem) ke semua host.
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.
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
}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.
* status dir
* status sd
* status client=client-fdStatus 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.
TLS mengenkripsi, tapi tidak menutup pintu. Gabungkan dengan segmentasi:
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} dropConsole bisa dibatasi dengan Address untuk membatasi alamat yang boleh terhubung ke Director.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.
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.
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.
[bacula-sd]
accept = 127.0.0.1:9102
connect = 0.0.0.0:9202
cert = /etc/stunnel/sd.pemHasilnya: 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.
Enkripsi dan TLS melindungi kerahasiaan; checksum melindungi integritas. Di FileSet, opsi signature mencatat hash tiap 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.
Inti yang harus dibawa pulang:
TLS Require dipasang setelah semua sisi siap.signature checksum di FileSet melindungi integritas saat restore.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.