FreeBSD IPsec mini-HOWTO 22 Sep 2001 $Id: ipsec-howto.txt,v 1.6 2001/09/22 15:10:38 BKoester Exp $ 一番下に更新履歴があります * KAME IPsec トンネルのコードを最新版にアップグレードしてください。 そうでないと、不規則に起こるコネクション破壊で痛い目にあいます。 --------------------------------------------- 1. はじめに このチュートリアルの最新版は、以下のところで常に手に入れることができます: http://www.x-itec.de/projects/tuts/ipsec-howto.txt http://asherah.dyndns.org/~josh/ipsec-howto.txt この文書は、FreeBSD 上で IPsec を立ち上げ、動かし、別の FreeBSD (や NetBSD や他の KAME 派生のスタック)マシンや、Windows 2000 マシンと 相互接続する方法の手引きを目的としたものです。IPv6 については、必要性が でてくればすぐに追加します。 IPsec は、ホスト間の IP 層通信を保護するための手段で、IPv4、IPv6 のいず れのトラフィックも保護することが可能です。差し当たりここでは IPv4 に適 用する IPsec についてのみ議論します。 IPsec は、パケットの暗号化、認証、そして限定されたトラフィックフローの 秘匿性で(シーケンス番号による)再送からの保護を保証することで、サブネ ット間でトンネルを構築したり(トンネルモード)、まさに二つのマシン間の 通信を保護(トランスポートモード)できます。IPsec 通信は意図的に、対称 的なアルゴリズム(Blowfish, DES, 3DES)によって暗号化されます。これは ESP (Encapsulating Security Payload:暗号ペイロード) モードとして知られ、 パケットのペイロードが暗号化されます。パケットのヘッダは触れられずその ままです。トラフィックを暗号化するつもりがないなら、AH (Authenticaed Header:認証ヘッダ) モードとして知られる機能で IPsec を利用できます。 このモードでは、パケットのペイロードは暗号化されませんが、ヘッダ・フィ ールドが信頼性のあるハッシュ関数を利用してハッシュされ、このハッシュ値 を含む付加ヘッダが、パケット内の情報を認証できるように、パケットに追加 されます。 この文書は、IPsec の全体のアーキテクチャや、その構成要素のプロトコルに ついて説明するものではありません(いずれするかもしれませんが)。 TCP パケットを技術的に見ると、以下の構造になります(RFC2406 参照)。 その図を、教育的な用途で、この RFC から引用します: ESP 適用前 ---------------------------- IPv4 |orig IP hdr | | | |(any options)| TCP | Data | ---------------------------- ESP 適用後 ------------------------------------------------- IPv4 |orig IP hdr | ESP | | | ESP | ESP| |(any options)| Hdr | TCP | Data | Trailer |Auth| ------------------------------------------------- |<----- encrypted ---->| |<------ authenticated ----->| IPv6 では、このような図になります: ESP 適用前 --------------------------------------- IPv6 | | ext hdrs | | | | orig IP hdr |if present| TCP | Data | --------------------------------------- ESP 適用後 --------------------------------------------------------- IPv6 | orig |hop-by-hop,dest*,| |dest| | | ESP | ESP| |IP hdr|routing,fragment.|ESP|opt*|TCP|Data|Trailer|Auth| --------------------------------------------------------- |<---- encrypted ---->| |<---- authenticated ---->| * = 存在する場合、ESP の前にも後ろにも、その両方にも付きうる ESP がどう動作するかのメカニズムを理解するために、我々がここで行なって いることを知ることが重要なので、SSH トンネルや類似のものを用いたりはし ません。これが ESP ヘッダの構造で、あなたがどこかで読んだことのあるかも しれない単語のいくつかやこの図が、ESP についての更なる理解の助けになる でしょう。 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ---- | Security Parameters Index (SPI) | ^Auth. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov- | Sequence Number | |erage +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ---- | Payload Data* (variable) | | ^ ~ ~ | | | | |Conf. + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Cov- | | Padding (0-255 bytes) | |erage* +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | Pad Length | Next Header | v v +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ------ | Authentication Data (variable) | ~ ~ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * ペイロード・フィールドに含まれる場合、 暗号同期データ(例:初期ベクトル) 「パディング」「シーケンス番号」「ペイロード・データ」といった言葉を聞 いたことがあり、racoon.conf(5) か setkey(8) の文書を読んでいるなら、こ うした情報が ESP ヘッダの一部であり、それが IPsec と関わりがあることが お分かりでしょう。 IPsec を実装する基本手順は: * カーネル構築 * セキュリティ・ポリシー設定 * 鍵交換設定 2. はじめてみる FreeBSD マシン上で IPsec を利用するには、FreeBSD 4.1 かそれ以降のバージ ョンを強くお勧めします。これより前のバージョン(特に FreeBSD 3.x)用の KAME IPsec コードも存在しますが、自動鍵設定を行なう racoon IKE (Internet Key Exchange:自動鍵交換) デーモンを利用するには十分ではありま せん。 カーネルに IPsec のサポートを追加するには、カーネル設定ファイルに以下の 行を追加してください options IPSEC #IP security options IPSEC_ESP #IP security (crypto; define w/ IPSEC) options IPSEC_DEBUG #debug for IP security さらに、トンネルモードで IPsec を利用する場合には、カーネル設定ファイル に以下の行を加えてください: FreeBSD 4.4 より前のバージョンでは: pseudo-device gif 4 FreeBSD 4.4 以降なら: pseudo-device gif とするか、gif が既にロード可能であれば、何も必要ありません! 新しいカーネルを再コンパイルし、インストールしてください。カーネルの 再コンパイルの仕方が分からない場合は、FreeBSD ハンドブックをご覧ください。 ports から racoon デーモンをインストールしてください: cd /usr/ports/security/racoon ; make all install clean この mini HOWTO を書いている時点において、現在 port の最新版は、 racoon-20010831a.tar.gz です。手動鍵設定(つまり、暗号化鍵を手動で指定する) のみで IPsec を利用し、二台の FreeBSD マシンを通信させることは可能ですが、 それは面白くなく実用的でないばかりか、Windows 2000 マシンと相互接続 しようとする際に役に立ちません。 3. セキュリティ・ポリシーの設定 ------------------------------- このセクションは、4.4 より前のバージョンの FreeBSD のためのもので、 4.4 のために下に新しく追記してますが、このセクションも読んでおくのは 損にはなりません。 ------------------------------- IPsec に欠くことのできないのが、どのパケットを暗号化すべきか、そしてそ れをどのように暗号化すべきか、AH(認証ヘッダ)か ESP(暗号ペイロード) モードのいずれを利用するか、どの暗号化アルゴリズム、ハッシュ・アルゴリ ズムを利用するかということをカーネルに教える部分です。 これらの決定が「ポリシー」と呼ばれ、カーネル内の Security Policy Database (SPD) として知られるテーブルの中に格納されます。setkey(8) プログラムを 用いて、SPD を操作できます。 ホスト間の通信を保護するのに必要な各種の暗号鍵をカーネル内に格納するテ ーブルもあります。このテーブルは Security Association Database (SAD) として知られています。手動鍵設定で IPsec を設定する場合、setkey(8) プログラムが、SAD に手動鍵を設定するのにここでも使われます。ホスト間で 鍵を自動的に交換するのに IKE を利用するなら、racoon が SAD にエントリ を追加したり、エントリを削除したりする操作を行ないます。 IP アドレスが 1.2.3.4 のノード A と、IP アドレスが 5.6.7.8 のノード B の、二台の FreeBSD マシンがあるなら、以下のコマンドで、二つのノード間で IPsec を有効にするポリシーを SPD に追加します。 #!/bin/sh # 以下のコマンドがノードAで IPsec を動かすのに必要 # 次の2行で SPD と SAD から、既存のエントリをすべて削除 setkey -FP setkey -F # ポリシーの追加 setkey -c << EOF spdadd 1.2.3.4/32 5.6.7.8/32 any -P out ipsec esp/transport/1.2.3.4-5.6.7.8/require; spdadd 5.6.7.8/32 1.2.3.4/32 any -P in ipsec esp/transport/5.6.7.8-1.2.3.4/require; EOF 最初の spdadd コマンドが、1.2.3.4/32 から 5.6.7.8/32 宛ての全ての外向き パケットに ESP を用いた暗号化を要求するポリシーを設定します。二番目の spdadd コマンドでも同じポリシーを設定してますが、これは 5.6.7.8/32 から 1.2.3.4/32 宛ての内向きのパケットに関するものです。 #!/bin/sh # 以下のコマンドがノードBで IPsec を動かすのに必要 # 次の2行で SPD と SAD から、既存のエントリをすべて削除 setkey -FP setkey -F # ポリシーの追加 setkey -c << EOF spdadd 5.6.7.8/32 1.2.3.4/32 any -P out ipsec esp/transport/5.6.7.8-1.2.3.4/require; spdadd 1.2.3.4/32 5.6.7.8/32 any -P in ipsec esp/transport/1.2.3.4-5.6.7.8/require; EOF setkey(8) を用いた SAD エントリを設定法の例は、FreeBSD ハンドブックの IPsec の章にあります。 4. AH vs ESP。トンネル vs トランスポート。 入手できる IPsec に関する文書をざっと読んだだけでは、どのモードで動かす べきか少々混乱してしまうこともありえます。VPN を構築したいのでなければ、 ESP をトランスポートモードで動かせば多分よいでしょう。 ESP のトランスポートモードでは、IPsec を要求されている端末宛てのどのパ ケットも、ペイロードが暗号化されます。トンネルモードでは、パケット全体 (暗号化されたペイロードも含め)が、リモートホストに向けて送信される前 に、別のパケットの中にカプセル化されます。 しかし、VPN を構築する、すなわちインターネットを介して遠く離れて存在す る二つのネットワークをつなぐことが目的なら、ESP のトンネルモードを使う のがよいでしょう。トンネルモード用の SPD の設定は、トランスポートのそれ によく似てます。主な違いは、ルーティングを正しく行う gif(4) デバイスの 利用です。トラフィックが gif(4) トンネルを転送されるのではないことに注 意してください! そうでなく、カーネル内部の IPsec のコードが指定された ポリシーに従ってパケットを横取りし、IPsec トンネル用の正しい IP アドレ スで包むのです。実際には、パケットは gif トンネルが通過する経路と異なる、 新しい IP アドレスを受け取るのです。(そうです、「トンネル」という用語 は、IPsec トンネルだけでなく gif トンネルも指しますから、曖昧です。もち ろん、IP ルーティングを正しく設定する別の方法も存在します。ルーティング ・テーブルの中の IPsec ポリシーを反映するために gif トンネルをインストー ルするには好都合です) 仮定したノード A と B に戻り、以下のネットワーク・トポロジーを仮定します: Internal net A <-> Node A <-----> Internet <------> Node B <-> Internal net B この場合 ノード A の内側のアドレスは 10.10.10.1/24、外側のアドレスは 1.2.3.4 ノード B の内側のアドレスは 10.20.20.1/24、外側のアドレスは 5.6.7.8 そこでノード A にポリシーを設定します: #!/bin/sh # 以下のコマンドがノードAで IPsec を動かすのに必要 # トンネル・デバイスの設定。gif(4) のサポートが前提 # gif0 は 1.2.3.4 から 5.6.7.8 に接続 gifconfig gif0 1.2.3.4 5.6.7.8 # トンネルの「内」側は、10.10.10.1 から 10.20.20.1 に接続 ifconfig gif0 inet 10.10.10.1 10.20.20.1 netmask 255.255.255.0 # 次の2行で SPD と SAD から、既存のエントリをすべて削除 setkey -FP setkey -F # ポリシーの追加 setkey -c << EOF spdadd 10.10.10.0/24 10.20.20.0/24 any -P out ipsec esp/tunnel/1.2.3.4-5.6.7.8/require; spdadd 10.20.20.0/24 10.10.10.0/24 any -P in ipsec esp/tunnel/5.6.7.8-1.2.3.4/require; EOF spdadd コマンドの違いに注意してください。ネットワーク 10.10.10/24 から ネットワーク 10.20.20/24 へのトラフィックを(ESP によって)暗号化し、 1.2.3.4 から 5.6.7.8 宛ての経路を設定し、そしてその逆のことを行なうポリ シーを設定しています。 そしてノード B には: #!/bin/sh # 以下のコマンドがノードBで IPsec を動かすのに必要 # トンネル・デバイスの設定。gif(4) のサポートが前提 # gif0 は 5.6.7.8 から 1.2.3.4 に接続 gifconfig gif0 5.6.7.8 1.2.3.4 # トンネルの「内」側は、 10.20.20.1 から 10.10.10.1 に接続 ifconfig gif0 inet 10.20.20.1 10.10.10.1 netmask 255.255.255.0 # 次の2行で SPD と SAD から、既存のエントリをすべて削除 setkey -FP setkey -F # ポリシーの追加 setkey -c << EOF spdadd 10.20.20.0/24 10.10.10.0/24 any -P out ipsec esp/tunnel/5.6.7.8-1.2.3.4/require; spdadd 10.10.10.0/24 10.20.20.0/24 any -P in ipsec esp/tunnel/1.2.3.4-5.6.7.8/require; EOF これを、/etc/rc.conf と /etc/ipsec.conf に入れることになります。例えば、 ノード A でしたらこのようになります: /etc/rc.conf: ... # /etc/ipsec.conf に setkey を読みこませる ipsec_enable="YES" # ep0 外部インタフェースであると仮定 network_interfaces="ep0 gif0 lo0" ifconfig_ep0="inet 1.2.3.4 netmask ..." # correct mask here ifconfig_gif0="inet 10.10.10.1 10.20.20.1 netmask 255.255.255.0" gif_interfaces="gif0" gifconfig_gif0="1.2.3.4 5.6.7.8" ... /etc/ipsec.conf: flush; spdflush; spdadd 10.10.10.0/24 10.20.20.0/24 any -P out ipsec esp/tunnel/1.2.3.4-5.6.7.8/require; spdadd 10.20.20.0/24 10.10.10.0/24 any -P in ipsec esp/tunnel/5.6.7.8-1.2.3.4/require; 4a Changes for FreeBSD 4.4 *NEW* Brooks Davis が、FreeBSD 4.4 バージョンにおける変更についての情報 を教えてくれました。上に記述した(gif に関する)カーネルの変更があり、 ここにその変更を書きます: …コンパイルされた gif デバイスであっても、自分でスクリプトを作成 する必要があるので、ブート時にはまったく機能しません。そこで、 スクリプトは以下のようなものである必要があります: ifconfig gif0 create # gifconfig は未だ有効だが、現在は ifconfig でその作業を行える ifconfig gif0 tunnel 5.6.7.8 1.2.3.4 # netmask が本当にポイント間リンクを表示するとは思わない ifconfig gif0 inet 10.20.20.1 10.10.10.1 そうでなく、クールで新しい設定を見せびらかし、任意のインタフェース機能 を作成したいなら、以下のようなものが使えます: ifn=`ifconfig gif create` ifconfig ${ifn} tunnel 5.6.7.8 1.2.3.4 ifconfig ${ifn} inet 10.20.20.1 10.10.10.1 既に何人かの人達が混乱してますので、この変更についての記述を加えるのが よいのかもしれません。 5. racoon を利用した自動鍵交換 首尾よく鍵を交換できる程度まで racoon を設定するのは、かなり簡単です。 デフォルトの racoon.conf ファイルで、基本的なセットアップは十分です。 しかしながら、我々としては以下の項目を変更することをお勧めします。 デフォルトのログ・レベルである「debug4」では、ばりばりログを吐きます。 普通にセットアップするには便利ですが、通常の用途にはちょっと過度です。 ログを減らすため、その行の log "debug4"; を log "info"; に変更します。freebsd-net のメーリングリストのスレッドで、racoon により ネゴされる鍵の寿命のデフォルトの値が、WAN のリンク、特に PPPoE (訳注:PPP over Ethernet。主に xDSL で利用される接続方式)のリンクには、 短すぎるのではないかという指摘がありました。従って、「sainfo anonymous」 節にある、「lifetime time」と「lifetime byte」パラメータを、それぞれ 3600 秒と 50000 KB に変更したいと思うかもしれません。 鍵交換の過程の一部として、二つのノードがいくつかの前もって決めておいた 秘密値を認識しておく必要があります。これは、X.509 証明書を与えるか、 (単に)特定のテキストの事前共有鍵によって実現可能です。事前共有鍵を設 定するには、両方のノードで、/usr/local/etc/racoon/psk.txt ファイルを編 集しなければなりません。 psk.txt ファイルに、次の行を追加してください: peer_ip_address sharedkey IP アドレスが 5.6.7.8 であるピアと、共有鍵「thisisatest」で通信をする IPsec の設定を行なうなら、 5.6.7.8 thisisatest という行を、そのマシンの psk.txt ファイルに追加してください。 psk.txt ファイルのアクセス権限が 600 で、所有者が root であり、そうでな ければ racoon はそれを読みこむのを拒否するのを確認してください。 ここに至って、以下のコマンドによって、両方のマシンで racoon を開始する ことができます: /usr/local/sbin/racoon -f /usr/local/etc/racoon/racoon.conf すべてうまくいったなら、どちらのホストに ping するのもうまくいくはずで す。racoon の鍵交換に短い遅延が生じますが、パケット・フローをみることが できます。racoon のログ・ファイルはデフォルトでは、/var/log/racoon.log にあります。ログを tail すれば、鍵が交換されるのを見ることが可能です。 6. Windows 2000 との相互接続 FreeBSD マシンに、Windows 2000 マシンと IPsec 通信させることも可能です。 Windows 2000 と相互接続する場合には手動鍵設定によるセットアップができな いので、racoon を使って自動的に鍵を交換しなければなりません。また Windows 2000 マシンにはいくつか制限があるので、暗号化された FreeBSD ネ ットワークほどには信頼性が高くない(実装しているアルゴリズムの数が少な く、暗号鍵のビット数も小さい)のを知っておく必要があります。 FreeBSD マシンと Windows 2000 サーバー間で暗号化セッションを生成したい 場合に行なわなければならないことのまず一番目は、入手可能な最新のサービ スパックをダウンロードすることで、それも「Windows 2000 用高度暗号化パッ ク」をダウンロードしなければなりません。この暗号パックは、いくつかの国 において、Windows 2000 マシンで 128 ビット 3DES を有効にするのに必要で す。そのパックをダウンロードしなければ、FreeBSD サーバとは接続できない し、何をしようにもタイムアウトになります。当該サービスパックも高度暗号 化パックもマイクロソフトのサイトから無料で入手可能です。 (訳注:Windows 2000 英語版は、標準では暗号化アルゴリズムの輸出規制のた め、暗号化アルゴリズムに 3DES を指定しても有効にならない。なお、高度暗 号化パックは Windows Update によりダウンロード可能。この問題の詳細は、 @IT の「Windows 2000のIPSecで3DESによる暗号化を有効にする方法」 http://www.atmarkit.co.jp/fpc/pctips/030gethighencrypt/gethighencrypt.html などを参照するとよい) 上述した通りに、IPsec を含めてカーネルを再コンパイルし、setkey(8) を使 って SAD にエントリを追加し、racoon を設定、起動し、FreeBSD マシンをセ ットアップしてください。 まず setkey で基本設定をしなけばならず、それから racoon を始動させます。 このチュートリアルにおいて上述した基本設定(setkey スクリプト)を行なう 前には、racoon を始動させるべきではありません。 ここで、Windows 2000 用に特に必要な racoon の設定法を紹介します。 以下の設定ファイル(my-racoon.conf と呼びます)をご覧下さい。いくつか修 正を行なっているので、元の racoon.conf とは完全には同じではありません。 racoon の最新版を用いることを、我々はあまり重要視してません。racoon の 開発は、リリースの度に多数のバグと相互接続の問題が修正され、かなり急速 に進んでいます。 「log debug4」オプションについては、物言いがつくかもしれませんが、まず 第一に我々の使命は、暗号化通信を立ち上げ、稼動させることです。それがう まくいけば、設定やそのオプションを最適化すればよいのです。 ------------------------------------------------------- path pre_shared_key "/usr/local/etc/psk.txt" ; log debug4; # "padding" はパディングに関するいくつかのパラメータを設定している。手を加えるべきではない padding { maximum_length 20; # maximum padding length. randomize off; # enable randomize length. strict_check off; # enable strict check. exclusive_tail off; # extract last one octet. } # デフォルトのいろいろな時間に関する仕様 timer { # 以下の値はリモート・ホスト毎に変更可能 counter 5; # maximum trying count to send. interval 20 sec; # maximum interval to resend. persend 1; # the number of packets per a send. # 各フェーズを完遂するのにウェイトする時間 phase1 30 sec; phase2 15 sec; } remote anonymous { #exchange_mode main,aggressive; exchange_mode aggressive,main; doi ipsec_doi; situation identity_only; # identifierは必要ない。自動的にセットされる #my_identifier address; #my_identifier address "192.168.0.99"; ##peers_identifier address "192.168.0.1"; #certificate_type x509 "mycert" "mypriv"; nonce_size 16; lifetime time 1 min; # sec,min,hour lifetime byte 5 MB; # B,KB,GB initial_contact on; support_mip6 on; proposal_check obey; # obey, strict or claim # 大変重要。暗号化には 3DES、チェックサムには MD5 が必要 proposal { encryption_algorithm 3des; hash_algorithm md5; authentication_method pre_shared_key ; dh_group 2 ; } } sainfo anonymous { pfs_group 1; lifetime time 36000 sec; lifetime byte 50000 KB; encryption_algorithm 3des,des,cast128,blowfish ; authentication_algorithm hmac_sha1,hmac_md5; compression_algorithm deflate ; } ------------------------------------------------------- 寿命時間の設定についても物言いがつくかもしれませんが、寿命を短くすれば するほど、セッションの安全は高まります。これこそが、対称的暗号アルゴリ ズム用のセッション・キーがとても頻繁に変更される理由なのです。その結果、 セッション・キーのいずれかがクラックされることで害を被る通信は少なくな ります。しかし Windows 2000 マシンにはいくつか制限があります。あまりに も短い寿命は設定できません。他方からすれば、寿命を短くすればするほど、 オーバーヘッドが増えるので、余分な帯域幅と処理能力が、鍵交換に費やされ ることになるのです。 このチュートリアルで上述した通り、事前共有「鍵」(パスワード)によって、 「秘密ファイル」を作るのを忘れないでください。racoon の利点に、パスワー ド長に関する計算(パスワード長のビット数が 8 で割り切れるか)をする必要 がないことと、パスワードを二つ(一つは認証用、一つは暗号化用)使う必要 がないことがあります。Windows 2000 では、パスワードを二つ使うことができ ません。通信用にただ一個の共有する秘密値を持ち、それは認証用と暗号用に パスワードを別々に分けることはしません。 デバッグが目的なら、racoon に以下のオプションを付けて起動します: racoon -F -v -f my-racoon.conf これにより racoon は表で動くので、後で周知の問題を解析するように、デバ ッグ・プロトコルをスクリーン上で見ることができます。 Windows マシンでは、以下の手順を実行します: * コマンド・ウィンドウを開き、「mmc」を開始。「コンソール」->「スナップ インの追加と削除」に進む。「IPセキュリティポリシーの管理」に追加。 * ツリー・リスト内の「IPセキュリティポリシー」をクリックし、それから メニューから、「操作」->「IPセキュリティポリシーの作成」を選択。 * ウィザードを完了する。特に、 * デフォルトの返信ルールを有効にしない * プロパティを編集 * プロパティで、新しいルールを追加するため「追加」ボタンをクリック。ウィザ ードを完了し、以下の設定を確かにする: * ルールはトンネルを指定しない * ルールは LAN に適用 * 鍵交換を保護するため、文字列を利用する。psk.txt ファイルに指 定したのと同じ鍵で統一 * BSD マシンへのトラフィックにのみセキュリティ・ポリシーを適用 するように、新しい IP フィルタを生成したいだろうから、この新 しいフィルタを選択 * フィルタの動作として、「Require Security」を選択 「Require Security」用の設定を、以下のようにします。 いくつかルールがあるので、このオプションに合ったルールをチェッ クするか、自分で新しいルールを生成してください: AH は無効 ESP の完全性は MD5 暗号化アルゴリズムは 3DES 最初のテストの目的用に、「Session Key Settings」は無効にします。 それは後で変更、最適化できます。 * コントロール・パネルから Administrative Tools->Services selection と 進んで、IPsec ポリシー・エージェントを再起動。ルールセットにどんな変 更を加えた場合でも、そのルールが適宜適切に受け入れられるか確かめるに は、変更の度にエージェントを再起動させる必要があります。 * ウィンドウで新しいポリシーを選択し、メニュー・バーの中のスイッチ・ア イコンのトグルをクリックし、そのポリシーを有効にする。 * 「ipsecmon」プログラムを起動。このツールで、マシン上で有効なルールを モニタ可能です。 * コマンド・ウィンドウを開き、BSD マシンに ping を打ってください。その ping は、「Negotiating IP Security」メッセージが出て「失敗」します。 引き続いてもう一度 ping を打つと、今度はうまくいくはずです。ping を打 ってすぐ、大量のデバッグ・メッセージを出している BSD マシンを確認する ことができます。 ここに至って、2マシン間の全ての IP トラフィックが保護されることになり ました。 Windows マシン上では、ipsecmon ツールで暗号化セッションを確認できます。 BSD マシン上では、デバッグ・メッセージを追うことで、すべてがうまくいっ ているのを確認できます。 BSD マシン上では、我々が望む通りにすべてがうまくいっているか確認するた めに、線上のデータをダンプできます。ed0 が当該インタフェースなら、以下 のようなコマンドで、 tcpdump -i ed0 -x -X -s 14400 線上のパケットを表示します。Windows 2000 と racoon 間での IKE 鍵交換も、 ESP パケットと表示される、実際の暗号化パケットも両方とも見ることができ ます。 もし IPsec の立ち上げに問題が生じているなら、著者に直接コンタクトを取る 前に、freebsd-net@freebsd.org や freebsd-questions@freebsd.org といった 適切なメーリング・リストにまず質問を投げてみることをお勧めします。 A. 有用なリンク Kame documentation: http://www.kame.net FreeBSD IPsec documentation: http://www.freebsd.org/handbook/ipsec.html Raccoon configuration tips: http://www.kame.net/newsletter/20001119/ Using certificates instead of pre-shared keys in Racoon: http://www.kame.net/newsletter/20001119b/ NetBSD IPsec documentation: http://www.netbsd.org/Documentation/network/ipsec/ (訳注:日本語訳 http://www.jp.netbsd.org/ja/Documentation/network/ipsec/ ) Some RFCs: RFC1825: Security Architecture for the Internet Protocol RFC1829: The ESP DES-CBC Transform RFC2709: Security Model with Tunnel-mode IPsec for NAT Domains RFC2663: IP Network Address Translator (NAT) Terminology and Considerations RFC2406: ESP RFC2402: AH RFC2409: IKE http://www.rfc.net に、RFC が包括的に集められている。 (訳注:上記 RFC を含むセキュリティ関係の RFC の日本語訳は、 http://www.ipa.go.jp/security/rfc/RFC.html に集められている) ------------ B. 著者について(順不同) Boris K��ter と Josh Tiefenbach 連絡先: X-ITEC IT-Consulting [ http://www.x-itec.de ] Boris K��ter (x-itec@freenet.de) MCSE, CNA Gr��e 33 - 57368 Lennestadt - Germany - Tel: (0 27 21) 989 400 Win/Unix環境における、PHP4 や *BSD C++ (常にプロジェクト募集中)での 高パフォーマンスでモジュール化されたソフトウェア開発に特化 と Josh Tiefenbach (josh@zipperup.org) C. その他の貢献者(日付順): 09/2001 Brooks Davis は、FreeBSD 4.4 に関する変更を我々に教えてくれました xx/2001 Helge Oldach (IVに関する記述の追加) xx/2001 Tobias Larsson は、HOWTOの中のちょっとしたバグを報告してくれました D. その他 この文書に関する提言、助言、忠告、訂正、そしてフィードバックは、著者に 送ってください。 ---------------- E. 更新履歴 [日/月/年] 2000年11月 初期バージョン 22/09/2001 [bk] Brooks Davis(感謝!)から、FreeBSD 4.4 に関する最新情報 を追加し、初心者へのヘルプをさらに充実 21/08/2001 [bk] システム障害を起こす長時間の遅延について Helge Oldach からのパッチを適用 xx/06/2001 [bk] いくつか整理、訂正。自分の CVS サーバに文書を置きました 21/06/2001 [bk] Tobias Larsson が、spdadd の部分のトンネルに関する誤り を報告してくださったので、修正 ---------------- 本文書の日本語訳は、yomoyomo (ymgrtq at yamdas dot org) が行なった。 http://www.yamdas.org/wa/yamdas/column/technique/ipsec-howtoj.txt に公開されてます。 日本語訳 最終更新日:2001年10月07日