和歌山のプログラミング・システム開発ならシステムキューブ
この二十年ほどで、いくつかの大きな災害に見舞われ、拠点に被害が及んだ場合、社内の情報資産をすべて消失してしまう、といった出来事も起こっています。
複数拠点をもつ企業様であれば、拠点間のVPNや専用線を用いて、バックアップを行う体制をもつところも多いと思います。
このような複数拠点間VPNなどを持たない場合、どうしても業務遂行上必要な日常バックアップを、定期的に遠隔地に保管しておきたいという需要はあると思われます。
ディザスタリカバリなどという言葉もありますが、なんらかの対策の必要性を求められている方も、増えてきているのではないでしょうか。
ここで重要視されるのは、経路間の安全性確保、保管の安全性などになります。
経路の暗号化を確保したうえで、Windowsで始められる簡単なバックアップを考えてみます。
WinSCPとはLinuxなどで標準的に取り入れらている、通信プロトコルSSHに対応したファイル転送クライアントです。
SSH接続機能のあるサーバに接続した後の操作は、一般的なFTPクライアントと、大きな違いはありません。
それならFTPを使ってレンタルサーバーなどに保存しても変わらないのではないか、と思われるかもしれませんが、FTPとSSHでは大きな違いがあります。
SSHは認証と経路の安全性を、暗号化により確保しています。
FTPは暗号化されていないユーザー名とパスワードを送信して認証し、ファイルの転送も暗号化されていません。
そのため、経路途中でだれかに盗聴されていても、気が付く方法はありません。
身近に起こる盗聴の例としては、誤った無線LANアクセスポイントに接続してやり取りした内容は、暗号化されていなければ盗聴されている可能性は十分あります。
SSHを利用した場合は、このような場合でも盗聴は不可能です。総当たり攻撃によるパスワードの突破や、経路途中の盗聴を防ぐ方法が用意されています。
他にWindows向けSSH利用のファイル同期アプリケーションとしてcwRsyncがありますが、フリーソフトから商用ソフトになりましたので、フリーソフトであるWinSCPを利用したフォルダの同期を行うこととします。
ここではあらかじめ、公開鍵認証型のSSHサーバーが用意されていることを前提として、記述いたします。
サーバーの管理権限のない方は、サーバーの管理者と協調して設定してください。
レンタルサーバーでSSHを利用できるものもありますが、ほとんどがパスワード認証形式で、より安全な公開鍵認証方式によるものより、総当たりのパスワード突破攻撃に弱くなります。
同一価格帯でも、レンタルサーバーとVPS(バーチャル・プライベート・サーバー)では利用できるハードディスク容量はVPSの方が、多く割り当てられているものが多いので、設定には専門性が必要となりますが、VPSがお勧めできます。
WinSCPのダウンロードサイトからWinSCPをダウンロードして、インストールを行います。
スタートメニューにWinSCPが登録されますので、鍵関連ツールからPuTTYgenを起動します。
ここで認証用の鍵を作成します。
ここでGenerateをクリックし、鍵の作成を始めます。
鍵のタイプは画面下の方、SSH-2 DSA 1024bitを選択します。
緑色のプログレスバーの下の空白を、マウスポインタでぐりぐりとしていると、ランダムな暗号が生成されます。
上部ボックスに表示されている、アルファベット数字記号の混ざったものが公開鍵です。
このボックス内をコピーして保存し、サーバーに公開鍵として登録します。
Key Passphareseには秘密鍵のパスフレーズを入力し、Save Public Keyと、Save Private Keyをクリックして保存します。
秘密鍵のパスフレーズはできるだけ長いことが求められます。
この秘密鍵と秘密鍵のパスフレーズが漏えいすると、SSHサーバーにアクセスできてしまいますので、管理できることろに保管します。
ふたたびスタートメニューから今度はWinSCPを起動します。
ログイン画面が出るので、ホスト名に接続先、ポート番号にSSHポート番号、ユーザ名にはサーバでのユーザー名、秘密鍵に先ほど作成した秘密鍵を指定します。
ここで保存をクリックすると、接続情報が保存されます。
ログインを押すと、サーバとの接続が始まります。
はじめて接続するサーバであると、サーバ鍵の指紋(フィンガープリント)が送られてきますので、これを鍵のコピーをクリックして、テキストファイルに保存し、はいをクリックします。
ここで登録されたサーバの指紋は保存され、今後同一のサーバーであっても指紋が違う場合は警告が表示されるので、接続経路の詐称に対応でき、サーバーの同一性が確保できるようになります。
ここで鍵作成時に登録した秘密鍵のパスフレーズを入力し、OKを押します。
認証が完了すると、WinSCPの操作画面が開きます。
ここでファイルを一つコピーして、書き込み権限などがあることを確認します。
これでWinSCPの作業は設定は終わります。
今回は自動的にバックアップ処理が動作することを目指しますので、バックアップの際に毎回秘密鍵のパスフレーズを入力することを省力するためにPagentを設定します。
鍵関連ツールの中にあるPageantを実行します。
Pageantは秘密鍵とパスフレーズの設定をしておくとWinSCPの認証時に、パスフレーズの入力を省略できるものです。
ここでAddKeyをクリックし、先ほど保存した秘密鍵を選択します。
パスフレーズの入力を求められるので、入力すると登録され、Pageantは常駐します。
この状態でWinSCPで先ほどのサーバーに接続すると、パスフレーズを入力せずに認証ができます。
Pageantを終了するたびに、鍵の登録はクリアされます。
WinSCPによるバックアップを自動化するために、次のことを行います。
・Pageantをログイン時に自動起動
・WinSCPを自動的に起動しファイルの同期
それぞれバッチファイルを作成し、タスクで起動させます。
メモ帳を開き、
[text]
"C:\Program Files\WinSCP\PuTTY\pageant.exe" "C:\Users\Username\winscp\id_dsa.ppk"
[/text]
上記のように、pageantの場所と、秘密鍵の場所を指定します。
Pageantの場所はデフォルトではこの場所になります(32bitWindows)。秘密鍵の場所は、保管されている場所を登録してください。
これを名前を付けて保存、ファイルの種類にすべてのファイルを選んで、pageant.batという名前でバッチファイルとして保存します。
バッチファイルを起動させて、タスクトレイに帽子をかぶったパソコンのアイコンで、Pageantが起動することを確認してください。
まずWinSCPに送信するコマンドをファイルにまとめます。
同じようにメモ帳を開き、
[text]
# バッチモードに設定し、確認/問い合わせを無効にする
option batch on
# ファイル上書きの確認などを無効にする
option confirm off
# サーバーに接続
open <a href="mailto:username@hostname">username@hostname</a> -hostkey="ssh-rsa 2048 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
#サーバー側とファイルを同期
synchronize remote C:\Users\Username\Documents\backup\ /home/username/backup
#接続終了
close
#WinSCP終了
exit
[/text]
上記を参考に、コマンドを作成し、テキストファイルとして保存てください。
-hostkeyには先ほど保存したサーバー鍵の指紋をコピーしてください。これで
設定方法については、詳しい参照先をご覧ください。
これをWinSCPへ入力するバッチを作成します。
[text]
"C:\Program Files\WinSCP\winscp.exe" /console /script=C:\Users\Username\Documents\WinSCP-Batch.txt
[/text]
WinSCPの場所はデフォルトのままです(32bitWindows)。
/script以下には先ほど作成したコマンドのテキストファイルを指定し、バッチファイルとして保存します。
バッチファイルをクリックし、必要な動作が行われることを確認します。
スタート画面からアクセサリーシステムツールータスクスケジューラを起動します。
タスクに名前を付けます。
Pageantであればログイン時、WinSCPのバックアップであれば、毎日など必要な頻度を設定します。
バッチを実行するのでプログラムの開始を選択します。
バッチファイルの場所を設定します。
このような形で登録が完了します。
プロパティ設定で、必要であれば設定を行ってください。
設定後、Pageantと、WinSCPのタスクからの起動を確認できれば、完了です。
今回、比較的省コストで身近なもので、一定のセキュリティーを確保したバックアップ手段を試してみました。
経路暗号化には、SSH以外にも、VPNを使う方法もあり、VPNを利用して別拠点にファイルコピーを行うなど、さまざまなパターンがあります。
経路暗号化したインターネット越しのファイル転送はあまりスピードが出ない場合もあり、今回テストしたケースでは、600KB/秒程度のスピードですので、大きいファイルであればかなりの時間がかかってしまうことも考えられます。
ここからアレンジして、たとえば圧縮ファイルを利用することで転送時間を短くするなど、様々な方法が考えられます。
本格的な導入を行うのであれば、商用サービスも様々ありますので、事態が発生する前に、情報収集や準備をしていくことも必要になってきていると考えます。