~nabeken/diary/

Gentoo Linux(6年くらい)とFreeBSD(1年くらい)とOpenBSD(新参者)を使う日々。


IHANet BGP peering overview

Bacula + TLS でインターネット越しのリモートバックアップ

Posted on Sun Nov 16 12:43:09 +0900 2008 by nabeken

前回の記事 Sysadmin/bacula-2 以降、特に書かなかったのですが、手元でも Bacula が稼働しています。

証明書の運用についてはここでは扱いません。自己署名認証局などの作り方はそこらじゅうにありますので、適宜作成してください。

まず、定期的に動作するよう目指したので TLS などは後回しにしましたが、安定して動作しているので最後の詰めとして TLS 化しました。基本的には Bacula のドキュメント を読めば大丈夫なのですが、Baculaとして考えるとやや混乱しました。

Debian の bacula では TLS が無効化されている

この記事では Gentoo マシンでセットアップしたのですが、その後 Debian で同じようにすると、失敗していまいました。設定ファイルはどうみても正しいのに…。

原因は /usr/share/doc/bacula-fd/NEWS.debian.gz にありました。

 * SSL/TLS has been disabled in this version of Bacula due to licensing
   concerns.  See README.Debian and the thread at
   http://lists.debian.org/debian-legal/2007/07/msg00144.html for more
   details.

ソースの配布であれば問題ないようですが、バイナリを配布するのに問題がある模様です。仕方がないので、ソースを取得して自分でビルド仕直しました。

サーバ?クライアント?

Baculaだとどっちがサーバなのかクライアントなのかやや混乱します。

This document will refer to both "server" and "client" contexts. These terms refer to the accepting and initiating peer, respectively.http://www.bacula.org/en/rel-manual/Bacula_TLS_Communication.html

というわけで、接続を待ち受けるのがサーバ、接続を開始するのがクライアントです。従って、メインの dir がクライアントで、fd, sd がサーバがサーバです。そして、さらに、fd と sd 間は TLS の暗号化は行われますが、証明書の検証は行いません。

Peer certificate is not required/requested -- peer validity is verified by the storage connection cookie provided to theFile Daemon by the director.

http://www.bacula.org/en/rel-manual/Bacula_TLS_Communication.html#SECTION004440000000000000000

証明書の検証は dir と各 fd, sd 間で行い、 fd, sd はその結果を信用する、ということのようです。

TLS Enable, TLS Require

TLS Enable だけ yes にすると利用可能(使わなくてもよい)、両方 yes にするとTLSを使わない接続は拒否、ということのようです。

If TLS is not required, and TLS is enabled, then Bacula will connect with other daemons either with or without TLS depending on what the other daemon requests.

If TLS is enabled and TLS is required, then Bacula will refuse any connection that does not use TLS.

Common Name

Bacula は TLS Verify Peer 時に Address で指定した文字列と照合しようとします。さらに、IPv6と組合せる場合、ホスト名が A, AAAA 両方持っている場合は A レコードを優先しようとします。私の環境では、とあるホストが A, AAAA 両方持っていたため、急遽 AAAA だけ持つレコードを用意しなおしました。したがって、証明書も Bacula 専用となってしまいました。

bacula-dir.conf

ドキュメントの例は一部不足しています。Clientリソースで TLS CA Certificate File しか指定していないのですが、これに追加して自分の証明書(TLS Certificate)とその秘密鍵(TLS Key)が必要です。

Client {
  Name = "natsu.osaka-fd"
  Address = "natsu.bacula.osaka.tknetworks.org"
  FDPort = 9102
  Catalog = MyCatalog
  Password = "<%= client_password %>"          # password for FileDaemon
  AutoPrune = yes                     # Prune expired Jobs/Files
  Maximum Concurrent Jobs = <%= scope.lookupvar('bacula::maximum_concurrent_jobs') %>

  TLS Enable = yes
  TLS Require = yes
  TLS CA Certificate File = "/etc/ssl/tknetworksCA.pem"
  TLS Certificate = "/etc/ssl/<%= hostname %>/bacula.crt"
  TLS Key = "/etc/ssl/<%= hostname %>/bacula.key"
}

(一部、Puppetのテンプレートになっています)

以上で Bacula + TLS over IPv6 で一元バックアップ環境が整いました。あとはストレージの暗号化かな。

更新履歴

  • MAINT bacula-3: ログを有効に (Sun, 16 Nov 2008 12:43:09 +0900)
  • bacula-3: Debian で TLS が無効にされていた話 (Sun, 16 Nov 2008 12:41:34 +0900)
  • bacula-3: 初稿 (Fri, 14 Nov 2008 13:24:36 +0900)