参考bacula-main.pdf > Bacula Data Encryption章节 https://www.bacula.org/9.6.x-manuals/en/main/main.pdf

我想对备份的数据进行加密,避免Bacula Server被攻击导致所有数据泄露。下文会先讲操作步骤,然后简单的描述一下工作原理。(加密算法方面我也不太清楚,加密具体怎么一回事我也讲不清楚。所以就不具体将加密原理了)

注意事项:配置完成以后请不要随意修改bacula-fd配置文件位置和密钥对文件!!!

操作步骤

都在客户端操作,服务器上配置不需要另外更改

  • 创建master key
  1. openssl genrsa -out master.key 2048
  2. openssl req -new -key master.key -x509 -out master.cert
  • 创建客户端专属的密钥对
  1. openssl genrsa -out fd-example.key 2048
  2. openssl req -new -key fd-example.key -x509 -out fd-example.cert
  3. # 将密钥和私钥放到同一个文件中,这样在restore恢复文件到这台客户端的时候会自动解密
  4. cat fd-example.key fd-example.cert >fd-example.pem
  • master.certfd-example.pem放到合适的目录下,我这边适合官方文档一样放到了/etc/bacula目录下

注意:master.key master.cert请妥善备份到其他设备上,这是在客户端专属密钥丢失的情况下,唯一恢复文件手段

  • 修改bacula-fd.conf 一般情况下在/etc/bacula目录下
  1. FileDaemon { # this is me
  2. Name = kms-aiit-fd
  3. FDport = 9102 # where we listen for the director
  4. WorkingDirectory = /var/lib/bacula
  5. Pid Directory = /run/bacula
  6. Maximum Concurrent Jobs = 20
  7. Plugin Directory = /usr/lib/bacula
  8. FDAddress = 10.0.102.7
  9. PKI Signatures = Yes # 开启签名
  10. PKI Encryption = Yes # 开启加密
  11. PKI Keypair = "/etc/bacula/fd-example.pem" # 配置加密密钥对, 包含了公钥和私钥
  12. PKI Master Key = "/etc/bacula/master.cert" # 配置master key 只包含公钥部分
  13. }

重启bacula-df.service 命令:sudo systemctl restart bacula-fd.service

工作原理

支持的加密算法:

  1. Symmetric Encryption:
  2. - 128, 192, and 256-bit AES-CBC
  3. - Blowfish-CBC
  4. Asymmetric Encryption (used to encrypt symmetric session keys):
  5. - RSA
  6. Digest Algorithms:
  7. - MD5
  8. - SHA1
  9. - SHA256
  10. - SHA512

每一个客户端都创建自己的独有的 PKI Keypair,就是fd-example.pem文件。里面包含了给文件加解密的公钥和私钥。默认情况下是用这组密钥进行加解密的。

管理员保存Master Key 并将公钥配置到各台客户端中

可理解为万能钥匙

当不慎出现fd-example.pem丢失的情况,可以用下列步骤解密文件

  1. cat master.key master.cert >master.keypair
  2. # 把bacula-df.conf中的配置改成下面这样
  3. PKI Keypair = master.keypair # 用master key来解密文件