IPsec と IKE の管理

事前共有鍵による IKE の設定 (作業マップ)

作業 

説明 

参照先 

事前共有鍵による IKE の設定 

有効な IKE ポリシーファイルと ike.preshared ファイルを作成する。また、システムをブートして IKE によって生成された鍵を使用する前に、IPsec ファイルも設定する

事前共有鍵による IKE の設定方法

実行中の IKE システムでの事前共有鍵の更新 

IKE 権限レベルをチェックし、通信するシステムの ipseckeys ファイルに最新のキー情報を追加する

既存の事前共有鍵を更新する方法

実行中の IKE システムへの事前共有鍵の追加 

IKE 権限レベルをチェックし、通信するシステムの最新キー情報に応じて ikeadm コマンドを実行する

新しい事前共有鍵を追加する方法

事前共有鍵が同一であることのチェック 

両方のシステムの事前共有鍵のダンプを行う 

事前共有鍵が同一であることを確認する方法

事前共有鍵による IKE の設定方法

IKE 実装では、鍵の長さが異なるさまざまなアルゴリズムが提供されます。キーの長さは、サイトのセキュリティに応じて選択します。一般的に、鍵の長さが長いほど、セキュリティが高くなります。

これらの手順には、システム名 enigma および partym を使用します。enigmapartym を各自使用しているシステムの名前に置き換えてください。

  1. システムコンソールから、スーパーユーザーになるか、同等の役割を引き受けます。


    注 –

    リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システムのセキュリティがリモートログインセッションレベルに低下します。


  2. システムごとに、/etc/inet/ike/config.sample ファイルを /etc/inet/ike/config にコピーします。

  3. システムごとに、規則とグローバルパラメータを ike/config ファイルに入力します。

    これらの規則やグローバルパラメータは、システムの ipsecinit.conf ファイルに設定されている IPsec ポリシーが正しく動作するものでなければなりません。次の ike/config の例は、2 つのシステム間のトラフィックを保護する方法ipsecinit.conf の例に対応しています。

    1. たとえば、enigma システムの /etc/inet/ike/config ファイルを次のように変更します。


      ### ike/config file on enigma, 192.168.116.16
      
      ## Global parameters
      #
      ## Phase 1 transform defaults
      p1_lifetime_secs 14400
      p1_nonce_len 40
      #
      ## Defaults that individual rules can override.
      p1_xform
        { auth_method preshared oakley_group 5 auth_alg sha encr_alg des }
      p2_pfs 2
      #
      ## The rule to communicate with partym
      
      { label "enigma-partym"  ラベルは一意でなくてはなりません
        local_addr 192.168.116.16
        remote_addr 192.168.13.213
        p1_xform
         { auth_method preshared oakley_group 5 auth_alg md5 encr_alg 3des }
        p2_pfs 5
      }

      注 –

      auth_method パラメータのすべての引数は同じ行になければなりません。


    2. partym システムの /etc/inet/ike/config ファイルを次のように変更します。


      ### ike/config file on partym, 192.168.13.213
      ## Global Parameters
      #
      p1_lifetime_secs 14400
      p1_nonce_len 40
      #
      p1_xform
        { auth_method preshared oakley_group 5 auth_alg sha encr_alg des }
      p2_pfs 2
      
      ## The rule to communicate with enigma
      
      { label "partym-enigma" ラベルは一意でなくてはなりません
        local_addr 192.168.13.213
        remote_addr 192.168.116.16
        p1_xform
         { auth_method preshared oakley_group 5 auth_alg md5 encr_alg 3des }
        p2_pfs 5
      }
  4. システムごとに、次のように指定してファイルが有効であるかどうかをチェックします。


    # /usr/lib/inet/in.iked -c -f /etc/inet/ike/config
    
  5. キー情報として使用する乱数を生成します。

    乱数発生関数がすでにある場合は、それを使用してください。Solaris システムでは、od コマンドを使用できます。たとえば、次のコマンドを入力すると、16 進数の数値が 2 行に渡って表示されます。


    % od -X -A n /dev/random | head -2
             f47cb0f4 32e14480 951095f8 2b735ba8
             0a9467d0 8f92c880 68b6a40e 0efe067d

    od コマンドの説明については、乱数を生成する方法od(1) のマニュアルページを参照してください。

  6. 手順 5 の出力から、キーを 1 つ作成します。


    f47cb0f432e14480951095f82b735ba80a9467d08f92c88068b6a40e

    この手順の認証アルゴリズムは MD5 です (手順 3 を参照)。事前共有鍵として推奨する最小のサイズは、ハッシュのサイズ (つまり、認証アルゴリズムの出力のサイズ) で決まります。MD5 アルゴリズムの出力は 128 ビットすなわち 32 文字です。この例の鍵は、推奨されている最小文字数より長い 56 文字です。

  7. システムごとに /etc/inet/secret/ike.preshared ファイルを作成します。各ファイルに事前共有鍵を書き込みます。

    1. たとえば、enigma システムの ike.preshared ファイルは次のようになります。


      # ike.preshared on enigma, 192.168.116.16
      #…
      { localidtype IP
      	localid 192.168.116.16
      	remoteidtype IP
      	remoteid 192.168.13.213
      	# enigma and partym's shared key in hex (192 bits)
      	key f47cb0f432e14480951095f82b735ba80a9467d08f92c88068b6a40e
      	}
    2. partym システムの ike.preshared ファイルは次のようになります。


      # ike.preshared on partym, 192.168.13.213
      #…
      { localidtype IP
      	localid 192.168.13.213
      	remoteidtype IP
      	remoteid 192.168.116.16
      	# partym and enigma's shared key in hex (192 bits)
      	key f47cb0f432e14480951095f82b735ba80a9467d08f92c88068b6a40e
      	}

    注 –

    両システムの事前共有鍵は同一にする必要があります。


既存の事前共有鍵を更新する方法

この手順では、リブートすることなく、一定の間隔で既存の事前共有鍵を置き換えたい場合を想定しています。3DES や Blowfish などの強力な暗号化アルゴリズムを使用するときは、両方のシステムのリブート時に鍵を変更するようスケジュールしたほうがよい場合もあります。

  1. システムコンソールから、スーパーユーザーになるか、同等の役割を引き受けます。


    注 –

    リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システムのセキュリティがリモートログインセッションレベルに低下します。


  2. 乱数を生成し、適切な長さのキーを作成します。

    詳細については、乱数を生成する方法を参照してください。

  3. システムごとに /etc/inet/secret/ike.preshared ファイルを編集して、現在のキーを新しいキーに変更します。

    たとえば、ホスト enigmapartym で、key の値をそれと同じ長さの新しい数値で置き換えます。

  4. in.iked デーモンがキー情報の変更を許可するかどうか確認します。


    # /usr/sbin/ikeadm get priv
    Current privilege level is 0x2, access to keying material enabled

    コマンドから 0x1 または 0x2 の権限レベルが戻された場合には、キー情報を変更できます。レベル 0x0 の場合には、キー情報を操作できません。デフォルトでは、in.iked デーモンは 0x0 の権限レベルで実行されます。

  5. in.iked デーモンがキー情報の変更を許可する場合は、ike.preshared ファイルの新しいバージョンを読み込みます。


    # ikeadm read preshared
    
  6. in.iked デーモンがキー情報の変更を許可しない場合は、デーモンを強制終了してから再起動します。


    # pkill in.iked
    # /usr/lib/inet/in.iked
    

    デーモンは再起動時に ike.preshared ファイルの新しいバージョンを読み込みます。

新しい事前共有鍵を追加する方法

ipsecinit.conf ファイルのポリシーエントリごとに 1 つの事前共有鍵が必要です。IPsec と IKE が動作している間に新しいポリシーエントリを追加すれば、in.iked デーモンはそれらの新しい鍵を読み込むことができます。この手順では、次の条件がすでにそろっているものとします。

  1. システムコンソールから、スーパーユーザーになるか、同等の役割を引き受けます。


    注 –

    リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システムのセキュリティがリモートログインセッションレベルに低下します。


  2. in.iked デーモンがキー情報の変更を許可するかどうか確認します。


    # /usr/sbin/ikeadm get priv
    Current privilege level is 0x0, base privileges enabled

    コマンドから 0x1 または 0x2 の権限レベルが戻された場合には、キー情報を変更できます。レベル 0x0 の場合には、キー情報を操作できません。デフォルトでは、in.iked デーモンは 0x0 の権限レベルで実行されます。

  3. in.iked デーモンがキー情報の変更を許可しない場合は、デーモンを強制終了します。次に、正しい権限レベルでデーモンを再起動します。


    # pkill in.iked
    # /usr/lib/inet/in.iked -p 2
    Setting priv/usr/lib/inet/in.iked -pilege level to 2!
  4. 乱数を生成し、64 〜 448 ビットのキーを作成します。

    詳細については、乱数を生成する方法を参照してください。

  5. このキーを何らかの方法でリモートシステムの管理者に送信します。

    両者は、同じ事前共有鍵を同時に追加する必要があります。

  6. ikeadm コマンドモードの add preshared サブコマンドを使って新しいキー情報を追加します。


    ikeadm> add preshared { localidtype id-type localid id
    remoteidtype id-type remoteid id ike_mode mode key key }
    
    id-type

    id のタイプを指定する

    id

    id-type が IP のとき IP アドレスを指定する

    mode

    IKE モードを指定する。有効な値は main だけ

    key

    16 進数の事前共有鍵を指定する

    1. たとえば、ホスト enigma で新しいインタフェース ada 用のキーを追加します。


      # ikeadm
      ikeadm> add preshared { localidtype ip localid 192.168.116.16
      remoteidtype ip remoteid 192.168.15.7 ike_mode main
      key 8d1fb4ee500e2bea071deb2e781cb48374411af5a9671714672bb1749ad9364d }
      ikeadm: Successfully created new preshared key.
    2. ホスト ada でも、同じキーを追加します。


      # ikeadm
      ikeadm> add preshared { localidtype ip localid 192.168.116.16
      remoteidtype ip remoteid 192.168.15.7 ike_mode main
      key 8d1fb4ee500e2bea071deb2e781cb48374411af5a9671714672bb1749ad9364d }
      ikeadm: Successfully created new preshared key.
  7. ikeadm コマンドモードを終了します。


    ikeadm> exit
    #
  8. システムごとに、in.iked デーモンの権限レベルを低くします。


    # ikeadm set priv base
    
  9. システムごとに、ipsecinit.conf ファイルを有効にして、追加したインタフェースを保護します。


    # ipsecconf -a /etc/inet/ipsecinit.conf
    

    注意 – 注意 –

    ipsecconf コマンドの実行時には警告を読んでください。in.iked デーモンの再起動時にも、同じ警告が表示されます。ソケットがすでにラッチされている (使用されている) 場合には、システムへ侵入される恐れがあります。詳細については、ipsecinit.confipsecconf のセキュリティについてを参照してください。


  10. システムごとに、ikeadm コマンドを実行して新しい規則を読み込みます。


    # ikeadm read rules
    

    ada および enigma システムの新しい規則の例がこの手順の始めにあります。規則は /etc/inet/ike/config ファイルに格納されているため、ikeadm コマンドでファイル名を指定する必要はありません。

  11. IKE 事前共有鍵がリブート時に確実に使用できるように、この鍵を /etc/inet/secret/ike.preshared ファイルに追加します。

    1. たとえば、enigma システムで、次のキー情報を ike.preshared ファイルに追加します。


      # ike.preshared on enigma for the ada interface
      #…
      { localidtype IP
        localid 192.168.116.16
        remoteidtype IP
        remoteid 192.168.15.7
        # enigma and ada's shared key in hex (32 - 448 bits required)
        key 8d1fb4ee500e2bea071deb2e781cb48374411af5a9671714672bb1749ad9364d
      }
    2. ada システムで、次のキー情報を ike.preshared ファイルに追加します。


      # ike.preshared on ada for the enigma interface
      #…
      { localidtype IP
        localid 192.168.15.7
        remoteidtype IP
        remoteid 192.168.116.16
        # ada and enigma's shared key in hex (32 - 448 bits required)
        key 8d1fb4ee500e2bea071deb2e781cb48374411af5a9671714672bb1749ad9364d
      }
  12. 両システムが通信できることを確認します。事前共有鍵が同一であることを確認する方法を参照してください。

事前共有鍵が同一であることを確認する方法

通信する各システムの事前共有鍵が同一でない場合は、次のエラーメッセージが表示されます。


# rup system2
system2: RPC: Rpcbind failure
  1. システムコンソールから、スーパーユーザーになるか、同等の役割を引き受けます。


    注 –

    リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システムのセキュリティがリモートログインセッションレベルに低下します。


  2. in.iked デーモンがキー情報の変更を許可していることを確認します。


    # /usr/sbin/ikeadm get priv
    Current privilege level is 0x0, base privileges enabled

    権限レベル 0x2 が返される場合は、キー情報を表示できます。レベル 0x0 の場合には、キー情報を操作できません。デフォルトでは、in.iked デーモンは、0x0 の権限レベルで実行されます。

  3. in.iked デーモンがキー情報の表示を許可しない場合は、このデーモンを強制終了します。次に、正しい権限レベルでデーモンを再起動します。


    # pkill in.iked
    # /usr/lib/inet/in.iked -p 2
    Setting priv/usr/lib/inet/in.iked -pilege level to 2!
  4. システムごとに、事前共有鍵情報を表示します。


    # ikeadm dump preshared
    PSKEY: Preshared key (24 bytes): f47cb…/192
    LOCIP: AF_INET: port 0, 192.168.116.16 (enigma).
    REMIP: AF_INET: port 0, 192.168.13.213 (partym).
  5. 両方のダンプを比較します。

    事前共有鍵が同一でない場合は、/etc/inet/secret/ike.preshared ファイルで、一方のキーを他方のキーで置き換えます。

  6. 確認が終わったら、in.iked デーモンの権限レベルを低くします。


    # ikeadm set priv base