FreeBSD ハンドブック
Prev | Chapter 14. セキュリティ | Next

# 14.9. IPsec

寄稿: Yoshinobu Inoue.

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

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

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

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

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

## 14.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) を割り当てます。三種 類のセキュリティヘッダ (ホスト A からホスト B に一つ、ホスト B から ホスト A に二つ) を生成するので、この安全なチャネルには三 つの 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 ============

## 14.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 の方向に注意してください。

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

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

セキュリティプロトコルは 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

## 14.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

Prev | Home | Next
OpenSSL | Up | OpenSSH