Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BackupPC でバックアップを取得した話 / Backup with BackupPC

BackupPC でバックアップを取得した話 / Backup with BackupPC

イベント発表資料

鹿児島Linux勉強会 2022.01(オンライン開催)
https://kagolug.connpass.com/event/234546/

Blog version: https://blog.yamano.dev/posts/2022/01/backuppc/

Yoshihisa Yamano

January 23, 2022
Tweet

More Decks by Yoshihisa Yamano

Other Decks in Technology

Transcript

  1. Backup tools Standard utils dump, tar, cpio, dd, rsync +

    ShellScript ... Free utils Amanda, Bacula ... 基本的に単体ではバックアップと呼べない物 (LVM|ZFS|Btrfs) Snapshot, DRBD Replication, Lsyncd ...
  2. About Linux, macOS, Microsoft Windows をターゲットに取得可能 ファイル単位のバックアップ rsync, NFS, smb

    等を用いるので、クライアントはエージェントレス WebUI と ユーザ管理機能が付随 複数ターゲット間での重複排除 世代管理, 圧縮 ...
  3. 環境(前提) サーバは国内VPSを用い、 100Mbps の IPv4/IPv6 デュアルスタック。 クライアントIPv4は DS-Lite(CGN) 配下にありリーチ不可。 クライアントIPv6は

    ICMP 及び SSH(公開鍵認証 Ony) が公開されており、グロー バル(VPS)からリーチできる。 WebUI は WireGuard による IPv4 ローカル接続で利用する。 バックアップの為の rsync(ssh) は、グローバルに流す。 共通のドメインを設定している。 $ grep search /etc/resolv.conf search yoshihisa.link
  4. Install backuppc パッケージを導入し、設定された BASIC 認証の仮パスワードを異なるもの に変更しておく。 (gsv1)$ sudo apt install

    backuppc # - ウェブサーバが問われるので apache2 とする。 # - システムユーザ backuppc が作成されプロセスが動作する。 # - BASIC 認証として backuppc ユーザと仮パスワードが設定されるので、変更する。 (gsv1)$ sudo htpasswd /etc/backuppc/htpasswd backuppc
  5. BackupPC config WebUI からも変更可能 (gsv1)$ sudoedit /etc/backuppc/config.pl (gsv1)$ diff -uprN

    config.pl /etc/backuppc/config.pl --- snip --- -$Conf{RsyncSshArgs} = ['-e', '$sshPath -l root']; +$Conf{RsyncSshArgs} = ['-e', '$sshPath -l backuppc']; --- snip --- -$Conf{Language} = 'en'; +$Conf{Language} = 'ja'; RsyncSshArgs : デフォルトではサーバの backuppc ユーザが ssh -l root client して rsync を実行するので、クライアントにも backuppc ユーザを作成し ておき、これを利用するように変更。 Language : WebUI の表示言語に変更。
  6. 他の重要なパラメータ CgiAdminUsers / CgiAdminUserGroup : Webサーバの認証ユーザ (REMOTE_USER)のうち、管理ユーザとするユーザ名/グループ名。該当しない一 般ユーザは、自身に関連付けられたクライアントに関する操作のみ可能。 PingMaxMsec :

    バックアップを開始する前に行われる ICMP 疎通確認で許容する RTT。遠いリージョン間でバックアップを実施する場合や、モバイル回線を用い る場合は変更検討。
  7. Apache config デフォルトでは HTTP かつ localhost からのアクセスに限定されているので、 HTTPS に変更し、コメントの記載通りに Require

    local をコメントアウトしておく。 (gsv1)$ readlink /etc/apache2/conf-available/backuppc.conf /etc/backuppc/apache.conf (gsv1)$ diff -uprN apache.conf /etc/backuppc/apache.conf --- snip --- - #SSLRequireSSL + SSLRequireSSL --- snip --- <RequireAll> # Comment out this line once you have setup HTTPS and uncommented SSLRequireSSL - Require local + #Require local # This line ensures that only authenticated users may access your backups Require valid-user
  8. HTTPS を有効化する為、 ssl mod と default-ssl site を有効化しておく。 (gsv1)$ sudo

    a2enmod ssl (gsv1)$ sudo a2ensite default-ssl.conf (gsv1)$ sudo apache2ctl configtest Syntax OK
  9. 今回、 WebUI は WireGuard によるローカル接続のみ許可するので、ファイアウォー ルを変更。 (gsv1)$ sudoedit /etc/nftables.conf tcp

    dport https ct state new ip saddr { client_network1/24, client_network2/24 } iif wg0 accept (gsv1)$ sudo nft -f /etc/nftables.conf (gsv1)$ sudo nft list ruleset 設定反映の為、 backuppc と apache を再起動。 (gsv1)$ sudo systemctl restart backuppc apache2
  10. 設定ファイルをエディタで編集する事でも可能。 (gsv1)$ tail -4 /etc/backuppc/hosts host dhcp user moreUsers #

    <--- do not edit this line #farside 0 craig jill,jeff # <--- example static IP host entry #larson 1 bill # <--- example DHCP host entry localhost 0 backuppc クライアントと同名のディレクトリが /var/lib/backuppc/pc に存在し、クライアン ト固有のログファイルなどが格納されている。 削除しないでおくと、「削除して良いよ」という通知メールが届く。 (gsv1)$ sudo rm -rf /var/lib/backuppc/pc/localhost
  11. ssh 設定 サーバで backuppc ユーザの秘密鍵を生成し、クライアントでのバックアップ専用ユ ーザ作成と公開鍵の設定をしておく。 (gsv1)$ sudo su -

    backuppc (gsv1)backuppc$ ssh-keygen -t ed25519 (gsv1)backuppc$ vi .ssh/config (gsv1)backuppc$ cat .ssh/config Host desktop Hostname desktop_ipv6
  12. クライアント設定 クライアントに backuppc ユーザを作成し、サーバの秘密鍵に対応する公開鍵を設定 しておく。 [yoshihisa@desktop ~]$ sudo useradd -d

    /var/lib/backuppc -m backuppc [yoshihisa@desktop ~]$ sudo usermod -L backuppc [yoshihisa@desktop ~]$ sudoedit ~backuppc/.ssh/authorized_keys # もしパスワード認証などが許可されているなら (gsv1)backuppc$ ssh-copy-id desktop backuppc ユーザが root 権限で rsync を実行できるようにする。 [yoshihisa@desktop ~]$ sudoedit /etc/sudoers.d/backuppc [yoshihisa@desktop ~]$ sudo cat /etc/sudoers.d/backuppc backuppc ALL=(ALL:ALL) NOPASSWD: /usr/bin/rsync
  13. 最後に、パスワードレスで ssh が可能か確認しておく。 (gsv1)backuppc$ ssh desktop whoami backuppc 必要に応じて公開鍵に制限を付けておく。 [yoshihisa@desktop

    ~]$ sudoedit ~backuppc/.ssh/authorized_keys from=”gsv1_ipv6”,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-pty ssh-ed25519 AAAA.......
  14. 設定した項目 XferMethod : バックアップに使うプロトコル。rsyncを利用するのでrsyncに変 更。 RsyncShareName : バックアップ対象のディレクトリを指定。今回は、 /home/yoshihisa と

    /etc 。 RsyncClientPath : クライアントの root ユーザでは無く backuppc ユーザを利用 する事としたので、 /usr/bin/rsync から sudo /usr/bin/rsync に変更。 BackupFilesExclude : バックアップから除外する領域を指定。ユーザホームディ レクトリに存在する ~/.cache や ~/Downloads 等のバックアップ不要なディレク トリを指定。
  15. ホスト固有の設定は、 /etc/backuppc/hostname.pl として保存される。 $ sudo cat /etc/backuppc/desktop.pl $Conf{BackupPCNightlyPeriod} = 1;

    $Conf{RsyncShareName} = [ '/home/yoshihisa', '/etc' ]; $Conf{XferMethod} = 'rsync'; $Conf{RsyncClientPath} = 'sudo /usr/bin/rsync'; $Conf{BackupFilesExclude} = { '/home/yoshihisa' => [ '.cache/', '.config/Slack/', '.mozilla/', 'Downloads/', 'snap/', 'qemu/', 'tmp/' ] };
  16. BlackoutGoodCnt ping が成功する場合にブラックアウト状態となり、 BlackoutPeriods で指定した期間内はバックアップが実行されない。 BlackoutBadPingLimit ブラックアウト状態が解除さる ping 失敗回数。 BlackoutGoodCnt

    と BlackoutBadPingLimit は期間を対等に見れない。 デフォルトでは約24時間毎に、フルバックアップもしくは増分バックアップのどちら かが実行される。 BlackoutGoodCnt = 7 を満たすには1週間必要。 バックアップ対象がダウンしている場合、 WakeupSchedule に従い約1時間毎に再試 行される為、 BlackoutBadPingLimit = 3 は3時間で条件を満たす。 BlackoutPeriods はブラックアウト時間の設定であり、前述の例(デフォルト)だと、 月 曜 - 金曜 の 07:00 - 19:30 はバックアップが実行されない。
  17. ルールを変更 $Conf{BlackoutPeriods} = [ { 'hourBegin' => 6, 'hourEnd' =>

    '23.5', 'weekDays' => [ 0, 6 ] }, { 'hourBegin' => 6, 'hourEnd' => '9.5', 'weekDays' => [ 1, 2, 3, 4, 5 ] }, { 'hourBegin' => 18, 'hourEnd' => '23.5', 'weekDays' => [ 1, 2, 3, 4, 5 ] } ];
  18. 土, 日 は 6:00 - 23:30 はブラックアウト期間 平日 は 6:00

    - 09:30 及び 18:00 - 23:30 をブラックアウト期間 とし、プライベート時間ではバックアップが動作しないように変更。
  19. 次回? Duplicity で ファイルサーバの中身をオブジェクトストレージにバックアップした。 https://blog.yamano.dev/posts/2022/01/duplicity/ root@sv4:~# zfs list /data/{document,music,picture} NAME

    USED AVAIL REFER MOUNTPOINT tank/data/document 327G 7.36T 327G /data/document tank/data/music 148G 7.36T 148G /data/music tank/data/picture 45.9G 7.36T 45.9G /data/picture root@sv4:~#