Linux以外のIPSecスタックとの相互接続[後編]
LinuxでIPSecを使おう

後編では、最も需要が高いと思われるWindowsとLinuxの接続方法を紹介する。適切な設定を行うことで、IPSecによる通信が可能であることを理解してもらえるだろう。

宮本 久仁男<miyamotokn@nttdata.co.jp>
NTTデータ システム開発事業本部
基盤システム事業部 第一ソリューション技術担当
2002/6/11

Windows用のIPSecスタック

 前編で約束したとおり、後編ではWindowsからのIPSec接続について説明します。Windows上で動作するIPSecスタックには、前編で軽く紹介した

  • Microsoft製IPSecスタック
  • PGPNet

の2つがあります。ほかにもあるにはありますが、前編で説明した理由や入手のしやすさという点ではこの2つがベターでしょう。

 前者はWindows 2000以降から標準でサポートされています。後者はhttp://www.pgpi.org/)で配布されています。

注:PGPNetは、ライセンスにより非商用や学術用途の場合にのみ無償で使用できます。商用での利用の場合、ライセンスは要問い合わせとなっています。

IPSecの通信条件とFreeS/WANの設定

 特に断りのない限り、大まかな通信条件は、

  • エンドツーエンドの暗号化
  • 事前共有鍵を用いる
  • 暗号化メソッドは3DES
  • ハッシュアルゴリズムはMD5もしくはSHA1

という形になります。

FreeS/WANの設定

 まずFreeS/WAN側の設定です。/etc/ipsec.confはリスト1、/etc/ipsec.secretsはリスト2のようになります。

config setup
    interfaces=%defaultroute
    klipsdebug=none
    plutodebug=all
    plutoload=%search
    plutostart=%search

conn %default
    type=transport
    authby=secret
    right=192.168.1.2

conn win
    type=transport
    left=192.168.1.102
    auto=add

conn oldwin
    type=transport
    left=192.168.1.103
    leftid="192.168.1.103"
    keyexchange=ike
    keylife=8h
    keyingtries=3
    rekeymargin=9m
    rekeyfuzz=25%
    auto=add
リスト1 FreeS/WANの/etc/ipsec.conf

192.168.1.2 192.168.1.103 : PSK "testtest"
192.168.1.2 192.168.1.102 : PSK "testtest"
リスト2 /etc/ipsec.secrets

Windows 2000の設定

 ここではまず、Microsoft製のIPSecスタックを用いた場合を 解説します。PGPNetを用いた方法については、その後で解説します。

 Microsoft製のIPSecスタックは、ウィザードを用いて以下の手順で設定します。今回の設定は、Windows 2000 Professionalでの例です。手順は多少異なりますが、Windows 2000 Serverでも設定可能です。ただし、FreeS/WANは3DESを暗号化メソッドとして使用しますので、Windows 2000には以下のいずれかをインストールしておく必要があります。

  • 高度暗号化パック
  • SP2以降

 Windowsのセキュリティ自体のことを考えると、SP2以降が適用されていることが望ましいといえます()。

注:もちろん、ほかのHotFixのたぐいも導入されていることが望ましいのはいうまでもありません。

IPセキュリティポリシーの作成

 Administratorでログオンし、[スタート]−[プログラム]−[管理ツール]−[ローカルセキュリティポリシー]を順次選択して管理ツール「ローカル セキュリティ設定」を起動します。

 [ローカルセキュリティ設定]ウィンドウで、「ローカルコンピュータのIPセキュリティポリシー」を右クリックして[IPセキュリティポリシーの作成]を選択します(画面1)。この画面にはすでに筆者によって作成されたポリシーがいくつかありますが、特に何も操作していない場合は上の3つのポリシーのみが存在します。

画面1 「ローカルコンピュータのIPセキュリティポリシー」を右クリックする

 ポリシーはウィザード形式で作成できます。ポリシーの作成については、Windows 2000におけるIPSecポリシーの設定で説明します。

 最終的に作成されたポリシーを画面211に掲載します。また、今回作成したIPSecポリシーをエクスポートしたファイル「ipsecsample.ipsec」を用意しましたので、興味のある方はダウンロードして管理ツールからインポートしてみてください()。

注:このポリシーは、一応通信検証を行っていますが、インポートや使用は自己責任でお願いします。

最終的に作成されたポリシー
画面2

画面3

画面4

画面5

画面6

画面7

画面8

画面9

画面10

画面11

動作確認

 コマンドプロンプトの上でpingを実行します。

C:\>ping 192.168.1.2

Pinging 192.168.1.2 with 32 bytes of data:

Negotiating IP Security.
Negotiating IP Security.
Negotiating IP Security.
Negotiating IP Security.

Ping statistics for 192.168.1.2:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  0ms, Average =  0ms

C:\>ping 192.168.1.2

Pinging 192.168.1.2 with 32 bytes of data:

Negotiating IP Security.
Negotiating IP Security.
Negotiating IP Security.
Negotiating IP Security.

Ping statistics for 192.168.1.2:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  0ms, Average =  0ms

C:\>ping 192.168.1.2

Pinging 192.168.1.2 with 32 bytes of data:

Negotiating IP Security.
Negotiating IP Security.
Negotiating IP Security.
Negotiating IP Security.

Ping statistics for 192.168.1.2:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  0ms, Average =  0ms

C:\>ping 192.168.1.2

Pinging 192.168.1.2 with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 192.168.1.2:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  0ms, Average =  0ms

C:\>ping 192.168.1.2

Pinging 192.168.1.2 with 32 bytes of data:

Reply from 192.168.1.2: bytes=32 time=10ms TTL=255
Reply from 192.168.1.2: bytes=32 time<10ms TTL=255
Reply from 192.168.1.2: bytes=32 time<10ms TTL=255
Reply from 192.168.1.2: bytes=32 time<10ms TTL=255

Ping statistics for 192.168.1.2:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  10ms, Average =  2ms

 最初はIPSecのネゴシエーションが間に合わず、pingの実行に失敗しますが、何度か実行しているうちにレスポンスが返ってくるようになります。

PGPNetの設定

 PGPは暗号化ツールとして名高いもので、PGPNetはWindows版PGPの配布ファイルに含まれます。今回は、PGP6.5.1iに含まれるPGPNetを使用します。

PGPNetのインストール

 ファイルは、http://www.pgpi.org/で入手可能です。ファイルを展開すると、セットアップ用の実行ファイルが作成されるので、この実行ファイルをダブルクリックしてインストール用のウィザードを起動します。基本的には、画面の指示に従ってインストールすればよいのですが、特に注意すべき点としては、以下のようなものが挙げられます。

  • Setupを実行後、画面12のようなエラーが出ることがありますが、これは単にフォルダを開いた状態でも出ます。開いているフォルダを閉じた後に「再試行」ボタンを押せば回避可能です
    画面12

  • インストールするコンポーネントの選択の画面(画面13)では、「PGPNet Virtual Private Networking」をチェックします。このコンポーネントが、IPSecスタックそのものです
    画面13

  • 画面14では、IPSec通信をさせたい通信アダプタを選択しますが、1個しかチェックできません。今回はLANアダプタをチェックしています
    画面14

  • 「Do you have existing keyrings you wish to use?」というメッセージボックスで、すでに作成されたKeyringが存在する場合にそれを使うかどうかのチェックをします。筆者の場合はクリーンインストールになりますので、「いいえ」を選択しています

画面15 タスクトレイに常駐したPGPNet

 PGPNetをインストールしてWindowsを再起動すると、タスクトレイにPGPTrayが常駐しているのが分かります。PGPNetの設定は、PGPTray中のPGPNetの各項目で実施します(画面15)。

 具体的な設定については、PGPNetのIPSec通信設定を参照してください。なお、暗号化メソッドや鍵交換の項目などは個別には設定できません。これについては、[PGPNet]−[Options]と選択し、表示されるウィンドウで設定することになります。どの項目から設定してもよいのですが、最終的に設定されている状態は画面1618のようになります。


最終的な設定状態

画面16

画面17

画面18

動作確認

 PGPNetによる暗号化は、TCP/UDPの通信性能はまだ良いのですが、ICMPの通信性能があまりよくありません。DOSプロンプトの上からpingを実行しても失敗(タイムアウト)したり、応答時間が長かったり(1秒以上)します。

C:\ping 192.168.1.2

Pinging 192.168.1.2 with 32 bytes of data:

Reply from 192.168.1.2: bytes=32 time=3809ms TTL=255
Reply from 192.168.1.2: bytes=32 time=3342ms TTL=255
Request timed out.
Request timed out.

Ping statistics for 192.168.1.2:
    Packets: Sent = 4, Received = 2, Lost = 2 (50% loss),
Approximate round trip times in milli-seconds:
    Minimum = 3342ms, Maximum =  3809ms, Average =  1787ms

 telnetなどTCPベースのツールを用いてコネクションを開設後、tcpdumpなどでパケットダンプを実施すると、パケットが暗号化されているのが分かります。

# tcpdump -i eth0 host webdav1 and catseye
User level filter, protocol ALL, datagram packet socket
tcpdump: listening on eth0
03:13:46.830680 < catseye > webdav1: ip-proto-50 60
03:13:46.831138 > webdav1 > catseye: ip-proto-50 60 (DF)
03:13:46.981148 < catseye > webdav1: ip-proto-50 52
03:13:46.964599 > webdav1 > catseye: ip-proto-50 68 (DF) [tos 0x10]
03:13:46.969791 < catseye > webdav1: ip-proto-50 60
03:13:46.970082 > webdav1 > catseye: ip-proto-50 52 (DF) [tos 0x10]
03:13:46.975528 < catseye > webdav1: ip-proto-50 60
03:13:46.975774 > webdav1 > catseye: ip-proto-50 52 (DF) [tos 0x10]
03:13:46.991315 > webdav1 > catseye: ip-proto-50 60 (DF) [tos 0x10]

 筆者の体感ですが、telnetをIPSec経由で使ってみて、特にオペレーションが引っ掛かる/目に見えてパフォーマンスが悪いなどの印象はありませんでした。もちろん、暗号化処理が入るので、暗号化しないときよりも確実に性能は落ちます。

相互接続の基本は6つの条件を満たすこと

 前編から後編にかけて、異なるIPSecスタックをどうつなぐかを説明してきました。各スタックやOSで使用される用語の違いなどを除けば、思ったよりも接続しやすいという印象を持っていただいたのではないかと思います。

 また、後述する参考図書にも記述されていることですが、以下の6つの条件を満たせれば、相互接続しやすいようです。

  • 暗号化アルゴリズムとして3DESを用いる
  • ハッシュアルゴリズムとしてMD5もしくはSHA-1を用いる
  • Oakleyグループはグループ2(1024bit MODP)を用いる
  • IKEのフェイズ1では、mainモードを用いる
  • Pre-shared Keyを使う
  • IPCompは使わない

 今回は、Windowsおよび*BSDのスタックとFreeS/WANとの接続を取り扱いましたが、ほかの実装との接続を行う際にも本記事の内容がお役に立てば幸いです。

参考資料

マスタリングIPsec
馬場達也 著
オライリー・ジャパン 2001年
ISBN4-87311-059-9
3200円(税別)


書評はこちら

 今回の記事内容を検証するに当たり、特に参考になったURLと書籍を以下に挙げておきます。特に、最後の『マスタリングIPsec』は、IPSecの規格と実装について平易な表現で書かれており、お薦めです。

中編へ
1/3

Index
Linux以外のIPSecスタックとの相互接続[後編]
− LinuxでIPSecを使おう −
Page 1
Windows用のIPSecスタック
IPSecの通信条件とFreeS/WANの設定
 FreeS/WANの設定
Windows 2000の設定
 IPセキュリティポリシーの作成
 動作確認
PGPNetの設定
 PGPNetのインストール
 動作確認
相互接続の基本は6つの条件を満たすこと
 参考資料
  Page 2
Windows 2000におけるIPSecポリシーの設定
  Page 3
PGPNetのIPSec通信設定

Linux Square全記事インデックス


 Linux Squareフォーラム セキュリティ関連記事
連載:習うより慣れろ! iptablesテンプレート集(全4回)
初心者にとって、iptablesは難しい。そこで、学習の第1歩としてテンプレートを自分の環境に適応させることから始めよう
連載:ゼロから始めるLinuxセキュリティ(全11回)
奥が深いセキュリティ対策の世界をゼロから解説。ホストレベルのセキュリティからファイアウォール、IDSの構築、ログ管理方法まで、システム管理者必見
特集:WebDAV時代のセキュリティ対策[前編]
WebDAVのメソッドは便利な反面、セキュリティホールとなり得る。しかし、適切な対策を講じることでメソッドの危険性は取り除くことができる
特集:FreeS/WANによるIPSecの導入と運用[前編]
LinuxでIPSecを利用するには、「FreeS/WAN」というIPSecスタックを用いることになる。まず、これをインストールすることから始めよう
特集:Linux以外のIPSecスタックとの相互接続[前編]
別のOSや異なるIPSecスタックとの相互接続が可能なら、その用途は大幅に広がる。前編では、FreeBSDのKAMEと相互接続を試みる
特集:sshでセキュアネットワーク
サーバにリモートログインする場合は、暗号化して転送するsshを使おう。sshをサーバとクライアントにインストールすれば、インターネット上でも安全な通信が可能になる

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間