linkstationのバックアップ その5 rsyncに変更【決着】
方針変更
Amazon Glacierをつかったバックアップは、いざという時のリカバリーコストがかかり過ぎるので廃案になりました。
リンクステーションのバックアップ その四【断念】 - huruyosi’s blog
変わりに自宅から rsyncを行いバックアップします。
構成
rsyncを使う上で他人からのアクセスを防ぐことと、生データがインターネットに流れるのを避けるために SSHのポートフォワードを利用します。SSHでの接続を用意するとアッタクされる可能性が出てくるので接続元を限定します。 接続元を限定することを考えた時に自宅のIPアドレスは固定ではないので、自宅のIPアドレスが変わる度にLS220D側のブロードバンドルーターのパケットフィルタの設定を更新する必要があります。
この方法では運用が回りません。別で借りているVPSはIPアドレスが固定されているので、VPSを経由してLS220に接続します。
自宅の設定
専用ユーザ作成と公開鍵/秘密鍵
他の用途と分けるために専用のユーザを作成し、公開鍵/秘密鍵を作成します。
$ sudo useradd -m -g 1000 ls220d $ sudo su - ls220d $ ssh-keygen -b 4096
気にはなるけど、自動化する都合でパスフレーズなしで秘密鍵を作成します。
VPSの設定
専用ユーザ作成と公開鍵/秘密鍵
他の用途と分けるために専用のユーザを作成し、公開鍵/秘密鍵を作成します。
$ sudo useradd -m -g 1000 ls220d $ sudo su - ls220d $ ssh-keygen -b 4096
自宅と同様にパスフレーズなしで鍵を作成します。
自宅から接続するときの公開鍵を設置
自宅で作成した公開鍵(~ls220d/.ssh/id_rsa.pub)をVPSの ~ls220d/.ssh/authorized_keys にコピーします。
自宅からVPSへのログイン確認
自宅から ssh でログインできることを確認します。
$ ssh ls220d@vps.example.com
パスフレーズの要求が無くログインが成功することを確認します。
LS220D側のルーターの設定
この二つの設定を行います
LS220Dの設定
VPSの公開鍵を登録
VPSで作成した公開鍵を LS220Dに転送したら、/root/.ssh/authorized_keys に追加します。
$cat vpsのid_rsa.pub >> /root/.ssh/authorized_keys
buffalonas.comに登録されているLS220DのIPアドレスを知る
LS220Dの管理画面からwebアクセスの設定を行っておきます。このときにbuffalonas.comへの登録を行っておきます。http://buffalonas.com/ にbuffalonas.comネームを入力すると、登録したLS220Dのwebアクセスへリダイレクトされます。
この仕組みを使ってLS220DのIPアドレスを得ることができます。
$ curl --dump-header - 'http://buffalonas.com/index.php?name=登録したbuffalonas.comネーム' HTTP/1.1 302 Found Date: Sat, 18 Jul 2015 06:06:26 GMT Server: Apache Content-Location: index.php.en Vary: negotiate,accept-language TCN: choice Location: https://www.xxx.yyy.zzz:9443/ Content-Length: 0 Connection: close Content-Type: text/html; charset=UTF-8 Content-Language: en
HTTPの302が返されるので、LocationヘッダーのURLからbuffalonas.comに登録されているLS220DのIPアドレスがわかります。
$ ssh root@www.xxx.yyy.zzz
VPSから rsyncを試す
VPSからLS220Dへの経路ができたのでrsync を試します。
$ rsync -auzv --delete -e ssh root@www.xxx.yyy.zzz:/mnt/array1 /tmp/ls220d/
自宅からVPSを経由して LS220とrsyncする
参考にしたページ blog.riywo.com
$ rsync -auzv --delete -e 'ssh ls220d@VPSのホスト名 ssh ' root@www.xxx.yyy.zzz:/mnt/array1 /tmp/ls220d/
LS220Dの RAID0になっている /mnt/arrya1 を自宅の /tmp/ls220d/ディレクトリに反映させます。
セキュリティを気にする
LS220Dに登録した VPSのls220dユーザのコマンドを限定する。
LS220Dの authorized_keys に command="rsync --server --sender -vulogDtprze.iLs . /mnt/array1"
を追加して、rsync以外のコマンドを制限します。
rsync + cron + ssh (rsyncd を立てない編)
cronを作成
自宅のcron.dailyでバックアップします。
$ sudo vi /etc/cron.daily/ls220d-backup $ sudu chmod 755 /etc/cron.daily/ls220d-backup
/etc/cron.daily/ls220d-backupの中身
#!/bin/sh export IP=`sudo -u ls220d ssh ls220d@VPSのホスト名 curl --dump-header - 'http://buffalonas.com/index.php?name=登録したbuffalonas.comネーム' 2> /dev/null | grep '^Location' | sed -e "s/^Location\: https\?:\/\/\([0-9]\+\(\.[0-9]\+\)\{3\}\).*$/\1/"` # echo ${IP} sudo -u ls220d /usr/bin/rsync -auzv --delete -e 'ssh ls220d@VPSのホスト名 -p 2022 ssh ' root@{IP}:/mnt/array1 /home/ls220d/backup/