2012/08/26

IPsecでNASへのバックアップ通信を暗号化する

外出先であっても時間がくればTimeMachineが動いてバックアップを行うので、ネットワークに繋がっているのであれば、普段使っているNASに取って欲しいところ。
この時、バックアップで使うAFPというプロトコルは暗号化を行わないので、別の手段で暗号化を行う必要がある。そこで、IPsecで暗号化を行なってみる。

  • IPv6での通信とする
  • NASのあるネットワークにいる場合、暗号化は行わない
  • 事前共有キーによる暗号化

の3点を条件とする。

  • クライアント側はMountain Lion。racoonを使う。
  • サーバ側はFreeBSD。racoonを使う。

直接設定ファイルを書くことによって、「AFPだけ暗号化する」ようにする。
お約束だが、内容の真偽も含めて、自己責任で。最悪、どこでもMy Macが動かなくなることもあるので。

Mountain Lion側。
/var/run/racoon/ に動的生成した設定ファイルを置くようになっている様子だが、消されそうなので、/etc/racoon/remote/ を作って、そこに置くことにする。
そこに置いた設定ファイルが取り込まれるよう、/etc/racoon/racoon.conf に手を加える。racoonはどこでもMy Macで使っているので、ミスがあると動かなくなるので注意。
racoon.confの最後に
include "/var/run/racoon/*.conf" ;
という行があるので、その手前(上の行)に
include "/etc/racoon/remote/*.conf" ;
を加える。
次に、/etc/racoon/remote/ に、NASに接続するための設定ファイルを作成する。ファイル名は.confで終わっていればなんでも良いので、例えば、NASのhost名にする。
中身は
remote NASのIPアドレス {
   exchange_mode aggressive;
   doi ipsec_doi;
   situation identity_only;
   verify_identifier off;
   my_identifier  user_fqdn       "メールアドレス";
   initial_contact off;
   support_proxy on;
   proposal_check obey;
   
    proposal {
        encryption_algorithm    aes;
        hash_algorithm          sha256;
        authentication_method   pre_shared_key;
        dh_group                modp1024;
    }
    proposal {
        encryption_algorithm    aes;
        hash_algorithm          sha1;
        authentication_method   pre_shared_key;
        dh_group                modp1024;
    }
    proposal {
        encryption_algorithm    3des;
        hash_algorithm          sha256;
        authentication_method   pre_shared_key;
        dh_group                modp1024;
    }
    proposal {
        encryption_algorithm    3des;
        hash_algorithm          sha1;
        authentication_method   pre_shared_key;
        dh_group                modp1024;
    }
 
   proposal {
      authentication_method pre_shared_key;
      hash_algorithm sha1;
      encryption_algorithm aes 256;
      lifetime time 3600 sec;
      dh_group 2;
   }
   
   proposal {
      authentication_method pre_shared_key;
      hash_algorithm md5;
      encryption_algorithm aes 256;
      lifetime time 3600 sec;
      dh_group 2;
   }
    proposal {
      authentication_method pre_shared_key;
      hash_algorithm sha1;
      encryption_algorithm aes;
      lifetime time 3600 sec;
      dh_group 2;
   }
   
   proposal {
      authentication_method pre_shared_key;
      hash_algorithm md5;
      encryption_algorithm aes;
      lifetime time 3600 sec;
      dh_group 2;
   }
   
   proposal {
      authentication_method pre_shared_key;
      hash_algorithm sha1;
      encryption_algorithm 3des;
      lifetime time 3600 sec;
      dh_group 2;
   }
   
   proposal {
      authentication_method pre_shared_key;
      hash_algorithm md5;
      encryption_algorithm 3des;
      lifetime time 3600 sec;
      dh_group 2;
   }
}
とする。
ポイントはexchange_mode。これをaggressiveだけにしているので、Phase 1はaggressive modeで折衝が開始される。そのため、事前共有キーファイルでの相手のIDとしてIP Address以外のものも使えるようになる。 受け側のracoonでは相手のIDとして*(任意の文字列)が使えないため、割り当てられるAddressが固定ではないモバイル環境からアクセスする場合、メールアドレスなど、IP Address以外のものを指定する必要があるため、aggressive modeは必須となる。
通常であれば、この後にsainfoを定義するのだが、既に定義されているのだ。/var/run/racoon/anonymous.conf がそれ。
sainfo の部分はこんな感じ
sainfo anonymous { 
  pfs_group 2;
  lifetime time 10 min;
  encryption_algorithm aes;
  authentication_algorithm hmac_sha1;
  compression_algorithm deflate;
}
ここまでで、暗号化するときの各種パラメータを定義した。後は、どの通信を暗号化するのかを定義する。これは、「NASにバックアップする通信」なので、NASに送る奴とNASから返ってくる奴とを定義する。
例えば、/etc/racoon/NASのhost名.key というファイルに
spdadd NASのいるネットワーク/マスク[0] NASのアドレス[548] any -P out none;
spdadd NASのアドレス[548] NASのいるネットワーク/マスク[0] any -P in none;
spdadd ::/0[0] NASのアドレス[548] any -P out ipsec esp/transport//require;
spdadd NASのアドレス[548] ::/0[0] any -P in ipsec esp/transport//require;
と書く。これをsetkey -f で喰わせてやればよいのだが、マシンを起動するたびに忘れずに実行する必要があるので、例えば、rootでcrontab -eして
@reboot /usr/sbin/setkey -f /etc/racoon/NASのhost名.key
と書いておく。

最後に、事前共有キー。/etc/racoon/psk.txt が既にあるので、同じように、
NASのアドレス 事前共有キー
の1行を追加しておく。

サーバに繋ぐ前に、一度Macを再起動させて問題なさそうなことを確認しておく。
再起動してログインしたら、アプリケーション→ユーティリティ→コンソール.app を開く。左側のログリストで「すべてのメッセージ」を選択し、右側に表示されるracoonのメッセージを確認する。問題なければ、「IPSec Phase2 established」の行が表示されているはず。何らかのエラーが出ているようであれば、/etc/racoon/racoon.conf および /etc/racoon/remote/*.conf の中身を確認して修正、racoonの再起動(わからなければ、Macの再起動)。放置しておくと、どこでもMy Macで接続できないことがある!

サーバ側の設定についてはまた今度。


0 件のコメント :

コメントを投稿

Comments on Google+: