Windows と Linux で IPsec

IPsec、だいぶ使いやすくなってます。 それでも設定が膨大。 使い方のメモを作ったので置いときます。

コンセプト

例の説明

earth
linux マシン (オレオレ認証局も開設) 2001:db8:eaea::1
venus
Windows マシン
mars
linux マシン

linux 編

事前準備

apt-get install ipsec-tools racoon openssl
/etc/ssl/openssl.conf をかきかえておくとあとがらくです。
default_days = 365 → 1095 
countryName_default  → JP
stateOrProvinceName_default  → Tokyo
localityName  → Meguro-ku
0.organizationName_default  → Solar Company Ltd.

オレオレ認証局の作成

cd /etc/racoon/certs
/usr/lib/ssl/misc/CA.pl -newca

パスフレーズを聞かれるので、CA パスフレーズを入力... このキーとこのパスワードがあればだれでも IPsec できるようになるので慎重に。
commonName に認証局名 (見てわかりやすい名前) を入れる ("earth")。
あとは改行でOK、後半でもう一回聞かれるので同じパスワード入力。

chmod 600 demoCA/private/cakey.pem

オレオレ認証局が作成され demoCA/ 下に必要なファイルが配置されます。 ちなみに CA の期限も3年なので、3年後には cacert.pem を作り直して全マシンに配る必要があります。

ホストキーの準備

cd /etc/racoon/certs
mkdir earth; cd earth; ln -s ../demoCA .
/usr/lib/ssl/misc/CA.pl -newreq-nodes
Country とかは飛ばしていいが、Common Name のところだけマシン名 (earth)
/usr/lib/ssl/misc/CA.pl -sign

CA passphrase を入力
[Sign the certificate?] ときかれるので y
[commit?] ときかれるので y
CA と別のマシン (mars) でもできる。-newreq だけ mars で実行し、 newreq.pem を earth にもっていって -sign する。そのあと newcert.pem, demoCA/cacert.pem を mars にもってかえる。

racoon.conf の準備

具体的な暗号化の通信方式とかのやりとりをするデーモン racoon の設定ファイル /etc/racoon/racoon.conf を書き換えます。 earth の場合は以下のように。

log notify;
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

remote anonymous {
        exchange_mode base,main,aggressive;
        my_identifier asn1dn;
        peers_identifier asn1dn;
        certificate_type x509 "earth/newcert.pem" "earth/newkey.pem";
        ca_type x509 "cacert.pem";
        verify_cert on;

        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method rsasig;
               dh_group modp1024;
        }
}

sainfo anonymous {
        encryption_algorithm rijndael,3des,aes;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}
mars のばあいも earth/... を mars/... にかきかえれば ok

ipsec-tools.conf の設定

earth の場合は以下の通り

# サブネット内部の通信では IPsec 禁止
spdadd 2001:db8:eaea::/64 2001:db8:eaea::/64 any -P in none;
spdadd 2001:db8:eaea::/64 2001:db8:eaea::/64 any -P out none;
# CIFS では IPsec 強制
spdadd ::/0 ::/0[445] any -P in ipsec esp/transport//require;
spdadd ::/0[445] ::/0 any -P out ipsec esp/transport//require;
# それ以外では IPsec 使用可
spdadd ::/0 ::/0 any -P in ipsec esp/transport//use;
spdadd ::/0 ::/0 any -P out ipsec esp/transport//use;

mars の場合 (earth との NFS だけ暗号化する)

spdadd 2001:db8:eaea::1 ::/0 any -P in ipsec esp/transport//require;
spdadd ::/0 2001:db8:eaea::1 any -P out ipsec esp/transport//require;

テスト

require になってるので通信が通れば成功しているはずです。mars から

ping 2001:db8:eaea::1

で返事があれば OK

Windows 7 の設定

管理コンソールの準備

  1. スタートメニューのコマンド入力ボックスに mmc.exe と入力
  2. [ファイル] メニューで [スナップインの追加と削除]
  3. [IP セキュリティ ポリシーの管理] を選択、[追加]
  4. [コンピューターまたはドメインの選択] で [ローカル コンピューター] を選択、[完了]
  5. [証明書 (ローカル コンピュータ)] を選択、[追加]
  6. [このスナップインで管理する証明書] で [コンピューター アカウント] を選択、[次へ]
  7. [このスナップインで管理するコンピューター] で [ローカル コンピューター] を選択、[完了]
  8. [IP セキュリティ モニター] を選択、[追加]
  9. [OK]
  10. [名前を付けて保存] → "IPSec 設定" と入力して [保存]

これで、つぎからスタートメニューの管理ツールから [IPSec 設定] を選ぶと IPSec 設定の管理コンソールが開けるようになる。

ホストキーと署名要求の作成

  1. 管理コンソールの [コンソール ルート] の下にある [証明書 (ローカル コンピュータ)] ツリーの [個人] を右クリック、[すべてのタスク] → [詳細設定操作] → [カスタム要求の作成]
  2. [次へ]
  3. [登録ポリシーなしで続行する] が選択されていることを確認して [次へ]
  4. [(テンプレートなし) CNG キー] [PKCS #10] が選択されていることを確認して [次へ]
  5. 右端の [詳細] の右側の下矢印をクリック、[プロパティ]
  6. [全般] タブの [フレンドリ名] にキーの説明を入力 "Venus ホストキー"
  7. [サブジェクト] タブを選択
  8. [サブジェクト名] の [種類] で [共通名] を選択、venus と入力
  9. あと適当にサブジェクトを入力 (共通名以外は実はいらない)
  10. [OK] をクリック
  11. [ファイル名] に c:\...\venus.req と入力、[Base 64] が選択されていることを確認して [完了]

キーに署名する

ここはオレオレ認証局がある earth で作業する
cd /etc/racoon/certs
mkdir venus; cd venus; ln -s ../demoCA .
cp ~/venus.req ./newreq.pem
/usr/lib/ssl/misc/CA.pl -sign

CAパスフレーズを入力、[Sign the certificate?] ときかれるので y、[commit?] ときかれるので y。 できた newcert.pem と demoCA/cacert.pem を venus にもっていく。

キー署名のインポート

  1. 管理コンソールの [コンソール ルート] の下にある [証明書 (ローカル コンピュータ)] ツリーの [個人] を右クリック、[すべてのタスク] → [インポート]
  2. [次へ]
  3. newcert.pem のパスを指定、[次へ]
  4. [証明書をすべて次のストアに配置する] で [個人] になっていることを確認、[次へ]
  5. [完了]

CA証明書のインポート

  1. 管理コンソールの [コンソール ルート] の下にある [証明書 (ローカル コンピュータ)] ツリーの [信頼されたルート証明機関] を右クリック、[すべてのタスク]→ [インポート]
  2. cacert.pem のファイル名を選択、[次へ]
  3. [証明書をすべて次のストアに配置する] で [信頼されたルート証明機関] になっていることを確認、[次へ]
  4. [完了]
  5. [OK]

IPSec ポリシーの作成

  1. 管理コンソールの [コンソール ルート] の下にある [IP セキュリティ ポリシー (ローカル コンピュータ)] を右クリック、[IP セキュリティ ポリシーの作成]
  2. [次へ]
  3. [名前] に適当なポリシー名を入力 ("solar の IPSec 通信" とか)、[次へ]
  4. [既定の応答規則をアクティブにする] はオフになっていることを確認して [次へ]
  5. [プロパティを編集する] が選択されていることを確認して [完了]
  6. [規則] タブで [追加]
  7. [次へ]
  8. [この規則ではトンネルを指定しない] で [次へ]
  9. [すべてのネットワーク接続] で [次へ]
  10. [IP フィルター一覧] で [追加]
  11. [名前] に適当な名前を入力 "Solar IPSec 通信"
  12. [追加]
  13. [次へ]
  14. [説明] に適当な説明を入力 "earthとの通信"、[ミラー化] をオンにして [次へ]
  15. 発信元アドレスが [任意の IP アドレス]、[次へ]
  16. 宛先アドレスで [特定の IP アドレスまたはサブネット] を選択、
  17. [IPアドレスまたはサブネット] に earth のアドレスを記入 "2001:db8:eaea::1"、[次へ]
  18. [IP プロトコルの種類] で [すべて] を選択、[次へ]
  19. [OK]
  20. 必要なだけ繰り返したら [IPフィルター一覧] で [OK]
  21. [セキュリティの規則ウィザード] にさっきいれた名前が出てくるので [Solar IPSec 通信]、選択して [次へ]
  22. [フィルター操作] で [必ず暗号化] がなければ (ウィザード使用) で [追加]
  23. [次へ]
  24. [名前] に "必ず暗号化" と入力、[次へ]
  25. [セキュリティのネゴシエート] を選択、[次へ]
  26. [セキュリティで保護されていない通信を許可しない] を選択、[次へ]
  27. [整合性と暗号化] を選択、[次へ]
  28. [完了]
  29. [必ず暗号化] を選択して [次へ]
  30. [次の証明機関 (CA) からの証明書を使う] を選択、[参照] をクリック
  31. たくさんでてくるので、気合でさっき入れた CA の common name ("earth") を探してクリック、[OK]
  32. [次へ]
  33. [完了]
  34. [OK]

テスト

require になってるので通信が通れば成功しているはずです。mars から

ping 2001:db8:eaea::1

で返事があれば OK

デバッグ方法