15.9. IPsec
戻る | 第15章 セキュリティ | 次へ

## 15.9. IPsec

寄稿: Inoue Yoshinobu [FAMILY Given].

訳: 日野 浩志 `<hino@ccm.cl.nec.co.jp>`, 14 March 2001.

### 終端文字:

この節の、また他の節を通して、末尾に 「^D」 が置かれている例があることに気づかれるでしょう。 これは、Control キーを押しながら D キーを押すことを意味しています。 ほかによく使われる文字は 「^C」 で、Controlキーを押しながら C を押すことを意味しています。

### ヒント:

FreeBSD の IPsec 実装について説明した HOWTO は、他に http://www.daemonnews.org/200101/ipsec-howto.html と http://www.freebsddiary.org/ipsec.php があります。

IPsec 機構は、IP 層とソケット層に対して安全な通信を提供します。 この節ではその使い方を説明します。実装の詳細に関しては The Developers' Handbook を参照してください。

現在の IPsec の実装は、 トランスポートモードとトンネルモードの両方に対応しています。 しかし、トンネルモードにはいくつかの制限事項があります。http://www.kame.net/newsletter/ にはより総合的な例が載っています。

ここで述べる機能を利用するには、以下のオプションをカーネルコ ンパイル時に指定する必要があることにご注意ください。

options IPSEC #IP security options IPSEC_ESP #IP security (crypto; define w/IPSEC)

### 15.9.1. IPv4 におけるトランスポートモードの例

ホスト A (`10.2.3.4`) とホスト B (`10.6.7.8`) との間に安全なチャネルを配置するために、 セキュリティアソシエーションを設定しましょう。 ここでは、少し込み入った例を示します。ホスト A からホストB へは old AH のみを使います。ホスト B からホスト A へは new AH と new ESP を組み合わせます。

ここで 「AH」/「new AH」/「ESP」/「new ESP」 に対応するアルゴリズムを決めないといけません。 アルゴリズムの名前を知るには、 setkey(8) マニュアルページをご覧ください。ここでは、AH に MD5 を、new AH には new-HMAC-SHA1 を、new ESP には 8 バイト IV の new-DES-expIV を選びました。

鍵長はそれぞれのアルゴリズムに大きく依存します。たとえば、 MD5 では鍵長は 16 バイトでなければなりませんし、new-HMAC-SHA1 では 20 バイトでなければなりませんし、new-DES-expIV では 8 バイトでなければなりません。ここではそれぞれ 「MYSECRETMYSECRET」, 「KAMEKAMEKAMEKAMEKAME」, 「PASSWORD」 とします。

次に、それぞれのプロトコルに対して SPI (セキュリティパラメータインデックス: Security Parameter Index) を割り当てます。3 種類のセキュリティヘッダ (ホスト A からホスト B に 1 つ、ホスト B から ホスト A に 2 つ) を生成するので、この安全なチャネルには 3 つの SPI が必要になることに注意してください。さらに、SPI は 256 以上でなければならないことにも注意してください。 ここではそれぞれ 1000, 2000, 3000 を割り当てます。

(1) ホスト A ------> ホスト B (1)PROTO=AH ALG=MD5(RFC1826) KEY=MYSECRETMYSECRET SPI=1000 (2.1) ホスト A <------ ホスト B <------ (2.2) (2.1) PROTO=AH ALG=new-HMAC-SHA1(new AH) KEY=KAMEKAMEKAMEKAMEKAME SPI=2000 (2.2) PROTO=ESP ALG=new-DES-expIV(new ESP) IV length = 8 KEY=PASSWORD SPI=3000

次に、セキュリティアソシエーションを設定しましょう。ホスト A とホスト B の両方で、setkey(8) を実行します。

`#` `setkey -c add 10.2.3.4 10.6.7.8 ah-old 1000 -m transport -A keyed-md5 "MYSECRETMYSECRET" ; add 10.6.7.8 10.2.3.4 ah 2000 -m transport -A hmac-sha1 "KAMEKAMEKAMEKAMEKAME" ; add 10.6.7.8 10.2.3.4 esp 3000 -m transport -E des-cbc "PASSWORD" ; ^D`

実際には、セキュリティポリシのエントリが定義されるまでは IPsec による通信は行われません。 この例の場合、両方のホストを設定する必要があります。

A で: `#` `setkey -c spdadd 10.2.3.4 10.6.7.8 any -P out ipsec ah/transport/10.2.3.4-10.6.7.8/require ; ^D` B で: `#` `setkey -c spdadd 10.6.7.8 10.2.3.4 any -P out ipsec esp/transport/10.6.7.8-10.2.3.4/require ; spdadd 10.6.7.8 10.2.3.4 any -P out ipsec ah/transport/10.6.7.8-10.2.3.4/require ; ^D` ホスト A -------------------------------------> ホスト B 10.2.3.4 10.6.7.8 | | ========== old AH keyed-md5 ==========> <========= new AH hmac-sha1 =========== <========= new ESP des-cbc ============

### 15.9.2. IPv6 におけるトランスポートモードの例

IPv6 を使ったもう一つの例。

ホスト-A とホスト-B 間の TCP ポート番号 110 番の通信には、 ESP トランスポートモードが推奨されます。

============ ESP ============ | | ホスト-A ホスト-B fec0::10 -------------------- fec0::11

暗号化アルゴリズムは blowfish-cbc で、その鍵は 「kamekame」、 認証アルゴリズムは hmac-sha1 で、その鍵は 「this is the test key」 とします。ホスト-A の設定は次のようになります。

`#` `setkey -c <<`EOF` spdadd fec0::10[any] fec0::11[110] tcp -P out ipsec esp/transport/fec0::10-fec0::11/use ; spdadd fec0::11[110] fec0::10[any] tcp -P in ipsec esp/transport/fec0::11-fec0::10/use ; add fec0::10 fec0::11 esp 0x10001 -m transport -E blowfish-cbc "kamekame" -A hmac-sha1 "this is the test key" ; add fec0::11 fec0::10 esp 0x10002 -m transport -E blowfish-cbc "kamekame" -A hmac-sha1 "this is the test key" ; EOF`

そしてホスト-B の設定は次のようになります。

`#` `setkey -c <<`EOF` spdadd fec0::11[110] fec0::10[any] tcp -P out ipsec esp/transport/fec0::11-fec0::10/use ; spdadd fec0::10[any] fec0::11[110] tcp -P in ipsec esp/transport/fec0::10-fec0::11/use ; add fec0::10 fec0::11 esp 0x10001 -m transport -E blowfish-cbc "kamekame" -A hmac-sha1 "this is the test key" ; add fec0::11 fec0::10 esp 0x10002 -m transport -E blowfish-cbc "kamekame" -A hmac-sha1 "this is the test key" ; EOF`

SP の方向に注意してください。

### 15.9.3. IPv4 におけるトンネルモードの例

2 台のセキュリティゲートウェイ間のトンネルモード

セキュリティプロトコルは old AH トンネルモード、すなわち RFC1826 で指定されるものです。認証アルゴリズムは 「this is the test」 を鍵とする keyed-md5 です。

======= AH ======= | | ネットワーク-A ゲートウェイ-A ゲートウェイ-B ネットワーク-B 10.0.1.0/24 ---- 172.16.0.1 ----- 172.16.0.2 ---- 10.0.2.0/24

ゲートウェイ-A における設定は次のようになります。

`#` `setkey -c <<`EOF` spdadd 10.0.1.0/24 10.0.2.0/24 any -P out ipsec ah/tunnel/172.16.0.1-172.16.0.2/require ; spdadd 10.0.2.0/24 10.0.1.0/24 any -P in ipsec ah/tunnel/172.16.0.2-172.16.0.1/require ; add 172.16.0.1 172.16.0.2 ah-old 0x10003 -m any -A keyed-md5 "this is the test" ; add 172.16.0.2 172.16.0.1 ah-old 0x10004 -m any -A keyed-md5 "this is the test" ; EOF`

上記の例のように、もしポート番号フィールドを書かないと、 `[any]` と同じ意味になります。`-m` は使用される SA のモードを指定します。`-m any` はセキュリティプロトコルのモードのワイルドカードを意味します。 この SA をトンネルモードとトランスポートモードの両方で使用できます。

そしてゲートウェイ-B では次のようになります。

`#` `setkey -c <<`EOF` spdadd 10.0.2.0/24 10.0.1.0/24 any -P out ipsec ah/tunnel/172.16.0.2-172.16.0.1/require ; spdadd 10.0.1.0/24 10.0.2.0/24 any -P in ipsec ah/tunnel/172.16.0.1-172.16.0.2/require ; add 172.16.0.1 172.16.0.2 ah-old 0x10003 -m any -A keyed-md5 "this is the test" ; add 172.16.0.2 172.16.0.1 ah-old 0x10004 -m any -A keyed-md5 "this is the test" ; EOF`

二台のセキュリティゲートウェイ間の SA の束の作成

ゲートウェイ-A とゲートウェイ-B の間では、 AH トランスポートモードと ESP トンネルモードが要求されます。 この例では、まず ESP トンネルモードが適用され、次に AH トランスポートモードが適用されます。

========== AH ========= | ======= ESP ===== | | | | | ネットワーク-A ゲートウェイ-A ゲートウェイ-B ネットワーク-B fec0:0:0:1::/64 --- fec0:0:0:1::1 ---- fec0:0:0:2::1 --- fec0:0:0:2::/64

### 15.9.4. IPv6 におけるトンネルモードの例

暗号化アルゴリズムは 3des-cbc, ESP の認証アルゴリズムは hmac-sha1 とします。AH の認証アルゴリズムは hmac-md5 とします。 ゲートウェイ-A での設定は次のようになります。

`#` `setkey -c <<`EOF` spdadd fec0:0:0:1::/64 fec0:0:0:2::/64 any -P out ipsec esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require ah/transport/fec0:0:0:1::1-fec0:0:0:2::1/require ; spdadd fec0:0:0:2::/64 fec0:0:0:1::/64 any -P in ipsec esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require ah/transport/fec0:0:0:2::1-fec0:0:0:1::1/require ; add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10001 -m tunnel -E 3des-cbc "kamekame12341234kame1234" -A hmac-sha1 "this is the test key" ; add fec0:0:0:1::1 fec0:0:0:2::1 ah 0x10001 -m transport -A hmac-md5 "this is the test" ; add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10001 -m tunnel -E 3des-cbc "kamekame12341234kame1234" -A hmac-sha1 "this is the test key" ; add fec0:0:0:2::1 fec0:0:0:1::1 ah 0x10001 -m transport -A hmac-md5 "this is the test" ; EOF`

異なる通信端での SA の作成

ホスト-A とゲートウェイ-A の間では ESP トンネルモードが要求されています。暗号化アルゴリズムは cast128-cbc で、ESP の認証アルゴリズムは hmac-sha1 です。ホスト-A とホスト-B との間では ESP トランスポートモードが推奨されています。 暗号化アルゴリズムは rc5-cbc で、ESP の認証アルゴリズムは hmac-md5 です。

================== ESP ================= | ======= ESP ======= | | | | | ホスト-A ゲートウェイ-A ホスト-B fec0:0:0:1::1 ---- fec0:0:0:2::1 ---- fec0:0:0:2::2

ホスト-A での設定は次のようになります。

`#` `setkey -c <<`EOF` spdadd fec0:0:0:1::1[any] fec0:0:0:2::2[80] tcp -P out ipsec esp/transport/fec0:0:0:1::1-fec0:0:0:2::2/use esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require ; spdadd fec0:0:0:2::1[80] fec0:0:0:1::1[any] tcp -P in ipsec esp/transport/fec0:0:0:2::2-fec0:0:0:l::1/use esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require ; add fec0:0:0:1::1 fec0:0:0:2::2 esp 0x10001 -m transport -E cast128-cbc "12341234" -A hmac-sha1 "this is the test key" ; add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10002 -E rc5-cbc "kamekame" -A hmac-md5 "this is the test" ; add fec0:0:0:2::2 fec0:0:0:1::1 esp 0x10003 -m transport -E cast128-cbc "12341234" -A hmac-sha1 "this is the test key" ; add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10004 -E rc5-cbc "kamekame" -A hmac-md5 "this is the test" ; EOF`

戻る | 上に戻る | 次へ
15.8. OpenSSL | ホーム | 15.10. OpenSSH

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。