huruyosi’s blog

プログラミングとかインフラとかのメモです。

linkstationのバックアップ その5 rsyncに変更【決着】

方針変更

Amazon Glacierをつかったバックアップは、いざという時のリカバリーコストがかかり過ぎるので廃案になりました。

リンクステーションのバックアップ その四【断念】 - huruyosi’s blog

変わりに自宅から rsyncを行いバックアップします。

構成

rsyncを使う上で他人からのアクセスを防ぐことと、生データがインターネットに流れるのを避けるために SSHのポートフォワードを利用します。SSHでの接続を用意するとアッタクされる可能性が出てくるので接続元を限定します。 接続元を限定することを考えた時に自宅のIPアドレスは固定ではないので、自宅のIPアドレスが変わる度にLS220D側のブロードバンドルーターのパケットフィルタの設定を更新する必要があります。

この方法では運用が回りません。別で借りているVPSIPアドレスが固定されているので、VPSを経由してLS220に接続します。 f:id:huruyosi:20150718144817p:plain

自宅の設定

専用ユーザ作成と公開鍵/秘密鍵

他の用途と分けるために専用のユーザを作成し、公開鍵/秘密鍵を作成します。

$ 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側のルーターの設定

この二つの設定を行います

  • 接続元のIPアドレスVPSIPアドレスであり、接続先のポートが22番を許可します。
  • 22番ポート宛のパケットを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アドレスがわかります。

VPSからLS220DへSSHの接続確認を行います。

$ 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/