Baculaは統合バックアップツールですが、公式HPを見ると改ざん検知機能もあるので、今回はその検証を行います。
公式HPの機能説明ページ
機能としては、取得済みのカタログデータとジョブ稼働時のカタログデータを比較することで差分を検出しています。
差分・増分バックアップの判定に必須の機能なので、以前からあった機能を人間が見て分かるように手を加えて出力しているわけです。
改ざん検知に必要なBaculaコンポーネントはバックアップに使用する場合と同じです。
本研究所のBacula導入記事をご確認ください。
公式説明に従って監視設定をしていきます。
既にバックアップ用の初期設定を完了している場合、変更が必要なのはマスターサーバの/etc/bacula/bacula-dir.confのみです。
念のため作業前にバックアップを取得して監視ジョブを設定していきます。
# cp -p /etc/bacula/bacula-dir.conf /etc/bacula/bacula-dir.conf.yyyymmdd
# vi /etc/bacula/bacula-dir.conf
Schedule { Name = "VerifyCheck" Run = Level=Catalog sun-sat at 12:00 ←改ざんチェックジョブの稼働タイミングを指定します Run = Level=Catalog sun-sat at 13:00 } Job { Name = "VerifyServer" ←ジョブ名を指定します Type = Verify Level = Catalog Client=test-server FileSet = "VerifySet" Messages = Standard Storage = File1 Pool = Default Schedule = "VerifyCheck" } FileSet { Name = "VerifySet" Include { Options { verify= pins1 ←pinを指定します signature = SHA1 ←ハッシュ関数を指定します } File = /var/www/html ←監視対象ディレクトリを指定 } Exclude { ←監視除外ディレクトリを指定 } } Client { Name = test-server Address = 192.168.153.129 FDPort = 9102 Catalog = MyCatalog Password = "BaculaPW#2" File Retention = 60 days Job Retention = 6 months AutoPrune = yes } Storage { Name = File1 Address = 192.168.153.130 SDPort = 9103 Password = "BaculaPW#3" Device = FileChgr1 Media Type = File1 Maximum Concurrent Jobs = 10 } Pool { Name = Default Pool Type = Backup Recycle = yes AutoPrune = yes Maximum Volume Bytes = 50G } Messages { Name = Standard mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r" operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r" mail = root@localhost = all, !skipped operator = root@localhost = mount console = all, !skipped, !saved append = "/var/log/bacula/bacula.log" = all, !skipped catalog = all } Catalog { Name = MyCatalog dbname = "bacula"; dbuser = "bacula"; dbpassword = "<strong>p@ssw0rd</strong>" }
作成したジョブを稼働させる前に、カタログデータの初期化を行う必要があります。
# bconsole
* run
Connecting to Director 192.168.153.129:9101 1000 OK: 102 bacula-dir Version: 7.4.4 (20 September 2016) Enter a period to cancel a command. *run Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" A job name must be specified. The defined Job resources are: 1: WEBWeeklyBackup 2: APWeeklyBackup 3: DBWeeklyBackup 4: BackupCatalog 5: WEBRestore 6: APRestore 7: DBRestore 8: VerifyServer Select Job resource (1-8): 8 ←作成した監視ジョブ番号を入力
Run Verify Job JobName: VerifyServer Level: Catalog Client: test-server FileSet: VerifySet Pool: File (From Job resource) Storage: File1 (From Job resource) Verify Job: Verify List: /var/spool/bacula/%c.bsr When: 2017-01-25 16:17:28 Priority: 10 OK to run? (yes/mod/no): mod ←変更が必要なのでmodを入力
Parameters to modify: 1: Level 2: Storage 3: Job 4: FileSet 5: Client 6: When 7: Priority 8: Pool 9: Verify Job Select parameter to modify (1-9): 1 ←1を入力
Levels: 1: Initialize Catalog 2: Verify Catalog 3: Verify Volume to Catalog 4: Verify Disk to Catalog 5: Verify Volume Data Select level (1-5): 1 ←1を入力
Run Verify Job JobName: VerifyServer Level: Catalog Client: test-server FileSet: VerifySet Pool: File (From Job resource) Storage: File1 (From Job resource) Verify Job: Verify List: /var/spool/bacula/%c.bsr When: 2017-01-25 16:17:28 Priority: 10 OK to run? (yes/mod/no): yes ←yesを入力
Job queued. JobId=109 You have messages.
しばらく待ってからジョブステータスを確認します。
* status dir
bacula-dir Version: 7.4.4 (20 September 2016) x86_64-redhat-linux-gnu redhat Daemon started 25-Jan-17 15:59, conf reloaded 25-Jan-2017 15:59:37 Jobs: run=1, running=1 mode=0 Heap: heap=278,528 smbytes=84,576 max_bytes=84,576 bufs=336 max_bufs=337 Scheduled Jobs: Level Type Pri Scheduled Job Name Volume =================================================================================== Incremental Backup 10 26-Jan-17 06:00 WEBWeeklyBackup Vol-0002 Incremental Backup 10 26-Jan-17 06:00 DBWeeklyBackup Vol-0002 Incremental Backup 10 26-Jan-17 06:30 APWeeklyBackup Vol-0002 Full Backup 11 26-Jan-17 07:00 BackupCatalog Vol-0002 Catalog Verify 10 26-Jan-17 16:00 VerifyServer ==== Running Jobs: Console connected at 25-Jan-17 16:16 JobId Type Level Files Bytes Name Status ====================================================================== 109 Veri Init 1,031 0 VerifyDpServer is running ==== Terminated Jobs: JobId Level Files Bytes Status Finished Name ==================================================================== 101 Incr 2 0 OK 24-Jan-17 06:01 WEBWeeklyBackup 102 Incr 268 2.828 M OK 24-Jan-17 06:01 DBWeeklyBackup 103 Incr 2 2.995 M OK 24-Jan-17 06:31 APWeeklyBackup 104 Full 1 10.33 M OK 24-Jan-17 07:01 BackupCatalog 105 Incr 23 178.4 K OK 25-Jan-17 06:01 WEBWeeklyBackup 106 Incr 0 0 OK 25-Jan-17 06:01 DBWeeklyBackup 107 Incr 2 3.062 M OK 25-Jan-17 06:31 APWeeklyBackup 108 Full 1 10.34 M OK 25-Jan-17 07:01 BackupCatalog 109 Init 3,249 26.21 M OK 25-Jan-17 16:19 VerifyServer ←カタログ初期化ジョブが成功していることを確認 ====
これでbaculaの方は準備が整いました。
検知テストのため、クライアントの監視ディレクトリ配下に以下のファイル・操作を用意しておきます。
・ファイルの新規作成
・既存ファイルの変更
・既存ファイルの削除
準備がすべて整ったので、監視ジョブを稼働させます。
# bconsole
* run
Connecting to Director 192.168.153.129:9101 1000 OK: 102 bacula-dir Version: 7.4.4 (20 September 2016) Enter a period to cancel a command. *run Automatically selected Catalog: MyCatalog Using Catalog "MyCatalog" A job name must be specified. The defined Job resources are: 1: WEBWeeklyBackup 2: APWeeklyBackup 3: DBWeeklyBackup 4: BackupCatalog 5: WEBRestore 6: APRestore 7: DBRestore 8: VerifyServer Select Job resource (1-8): 8 ←監視ジョブ番号を入力
Run Verify Job JobName: VerifyServer Level: Catalog Client: test-server FileSet: VerifySet Pool: File (From Job resource) Storage: File1 (From Job resource) Verify Job: Verify List: /var/spool/bacula/%c.bsr When: 2017-01-25 16:17:28 Priority: 10 OK to run? (yes/mod/no): yes ←yesを入力
ジョブ結果ログを確認します。
# tail -f /var/log/bacula/bacula.log
または
# bconsole
* messages
25-Jan 18:50 bacula-dir JobId 123: New file: /var/www/html/test2 25-Jan 18:50 bacula-dir JobId 123: File: /var/www/html/README.txt.org 25-Jan 18:50 bacula-dir JobId 123: st_ino differ. Cat: 134868071 File: 134868090 25-Jan 18:50 bacula-dir JobId 123: st_size differ. Cat: 5382 File: 5386 25-Jan 18:50 bacula-dir JobId 123: SHA1 digest differs. File=jLDXZLHvAPCa3Yujg+Jcn45wJ0Q Cat=NnMnqVO7lzrp2KxJEZ2BSgRj7og 25-Jan 18:50 bacula-dir JobId 123: Warning: The following files are in the Catalog but not on disk: 25-Jan 18:50 bacula-dir JobId 123: /var/www/html/test 25-Jan 18:50 bacula-dir JobId 123: Bacula bacula-dir 7.4.4 (202Sep16): Build: x86_64-redhat-linux-gnu redhat JobId: 123 Job: VerifyTestServer.2017-01-25_18.50.00_06 FileSet: VerifySet Verify Level: Catalog Client: test-server Verify JobId: 120 Verify Job: Start time: 25-Jan-2017 18:50:02 End time: 25-Jan-2017 18:50:13 Files Examined: 3,254 Non-fatal FD errors: 0 FD termination status: OK Termination: Verify Differences
新規作成、変更、削除をすべて検知成功しています。
定期的にチェックするのであれば、/etc/bacula/bacula-dir.confにジョブの稼働タイミングを入力してメッセージの転送設定をすればOKです。
変更内容の確認後には、忘れずにカタログの初期化を行いましょう。
初期化しないと、ジョブ稼働毎に同じ検知内容を含むアラートメッセージが出ます。
まとめ
・Baculaはバックアップ、改ざん検知どちらもできる、専用のスクリプトを組めば改ざん検知⇒バックアップから復旧まで全自動でできそうです。
・改ざん検知を定期運用するのであれば、カタログ初期化のスクリプトもあると便利そうです。
今回の検証はここまで。