IPsec と IKE の管理

2 つのシステム間のトラフィックを保護する方法

この手順では、次の設定がすでになされているものとします。

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


    注 –

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


  2. システムごとに、他のシステムのアドレスとホスト名を /etc/inet/ipnodes ファイルに追加します。次のように、1 つのシステムのエントリは連続してそのファイルに入力します。

    1. partym という名前のシステムでは、ipnodes ファイルに次のように入力します。


      # Secure communication with enigma 
      192.168.116.16 enigma
      fec0::10:20ff:fea0:21f6 enigma
    2. enigma という名前のシステムでは、ipnodes ファイルに次のように入力します。


      # Secure communication with partym 
      192.168.13.213  partym
      fec0::9:a00:20ff:fe7b:b373 partym

      システムの名前は、一例として使用しているだけです。実際にシステム間のトラフィックを保護する場合には、各自のシステムの名前を使用してください。

    これで、起動スクリプトでは、存在しないネーミングサービスに依存することなくシステム名を使用できます。

  3. システムごとに、/etc/inet/ipsecinit.conf ファイルを作成します。

    /etc/inet/ipsecinit.sample ファイルを /etc/inet/ipsecinit.conf にコピーすることができます。

  4. ipsecinit.conf ファイルに IPsec ポリシーエントリを追加します。

    1. enigma で、次のポリシーを ipsecinit.conf ファイルに追加します。


      {laddr enigma raddr partym} ipsec {auth_algs any encr_algs any sa shared}
    2. partym で、同じポリシーを ipsecinit.conf ファイルに追加します。


      {laddr partym raddr enigma} ipsec {auth_algs any encr_algs any sa shared}

      IPsec ポリシーエントリの構文については、ipsecconf(1M) のマニュアルページを参照してください。

  5. システムごとに、2 つのシステム間の IPsec セキュリティアソシエーションの組を追加します。

    システムごとに、読み取り専用の /etc/inet/secret/ipseckeys ファイルを編集します。読み取り専用ファイルのアクセス権は 400 です。ipseckeys ファイル で、ESP 保護と AH 保護のセキュリティアソシエーションの組は、次の形をとります。


    add protocol spi random-hex-string dst local-system \
       encr_alg protocol-algorithm \
       encrkey random-hex-string-of-algorithm-specified-length
    
    add protocol spi random-hex-string dst local-system \
       auth_alg protocol-algorithm \
       authkey random-hex-string-of-algorithm-specified-length
      
    add protocol spi random-hex-string dst remote-system \
       encr_alg protocol-algorithm \
       encrkey random-hex-string-of-algorithm-specified-length
    
    add protocol spi random-hex-string dst remote-system \
       auth_alg protocol-algorithm \
       authkey random-hex-string-of-algorithm-specified-length
    

    protocol

    esp または ahah プロトコルでは、auth_algauthkey 引数を使用する。esp プロトコルでは、encr_algencrkey 引数も使用する。esp では、さらに、ah で使用する auth_algauthkey 引数も使用する

    random-hex-string

    16 進数形式の最大 8 桁の乱数。SPI が受け取れる以上の桁数を入力すると、超過部分は無視される。SPI が受け取れるより少ない桁数を入力すると、パディングが行われる 

    local-system

    ローカルシステム名 

    remote-system

    リモートシステム名 

    protocol-algorithm

    ESP または AH のアルゴリズム。それぞれのアルゴリズムには、特定の長さのキーが必要 

    認証アルゴリズムには MD5 と SHA がある。暗号化アルゴリズムには 3DES と AES がある 

    random-hex-string-of-algorithm-specified-length

    アルゴリズムによって必要とされる長さをもつ 16 進数の乱数。たとえば、MD5 アルゴリズムでは、128 ビットキーのため 32 桁の乱数が必要。3DES アルゴリズムでは、192 ビットキーのため 48 桁の乱数が必要 

    1. 乱数を生成します。

      アウトバウンドトラフィックとインバウンドトラフィックにはそれぞれ、3 種類の乱数が必要です。したがって、システムごとに次の乱数が必要になります。

      • spi キーワードの値として、2 つの 16 進数の乱数。1 つの乱数はアウトバウンドトラフィック用、もう 1 つの乱数はインバウンドトラフィック用。それぞれの乱数の最大桁数は 8 桁

      • AH の MD5 アルゴリズム用として、2 つの 16 進数の乱数。各乱数は 32 桁でなければならない。1 つの乱数は dst enigma 用、もう 1 つの乱数は dst partym

      • ESP の 3DES アルゴリズム用として、2 つの 16 進数の乱数。192 ビットキーの場合、各乱数は48 桁でなければならない。1 つの乱数は dst enigma 用、もう 1 つの乱数は dst partym

      乱数発生関数がすでにある場合は、それを使用してください。ない場合は、od コマンドを使用できます。この手順については、乱数を生成する方法を参照してください。

    2. たとえば、enigma では、ipseckeys ファイルの内容は次のようになります。


      # for inbound packets
      add esp spi c83f5a4b dst enigma encr_alg 3DES \
            encrkey b6a8f89213a796bde03c601029861eae91c65783368165a6
      #
      add ah spi 2f526ae6 dst enigma auth_alg MD5
            authkey 305ec56369ca62c2ae804690c5713e18
      
      # for outbound packets
      add esp spi 0cecc4b2 dst partym  encr_alg 3DES \
            encrkey 802e89f9f9b929ea2b615641b71ac7034a540d3cbeeaf6a9
      #
      add ah spi a75bbe5f dst partym auth_alg MD5 \
            authkey 2ae8b94967e6b9b0dd16e6d4b7ea7278
    3. partymipseckeys には、同一のキーを使用します。コメントが異なっていますが、これは、dst enigmaenigma ではインバウンド、partym ではアウトバウンドであるためです。


      # for outbound packets
      add esp spi c83f5a4b dst enigma encr_alg 3DES \
              encrkey b6a8f89213a796bde03c601029861eae91c65783368165a6
      #
      add ah  spi 2f526ae6 dst enigma auth_alg MD5
              authkey 305ec56369ca62c2ae804690c5713e18
      
      # for inbound packets
      add esp spi 0cecc4b2 dst partym  encr_alg 3DES \
              encrkey 802e89f9f9b929ea2b615641b71ac7034a540d3cbeeaf6a9
      #
      add ah  spi a75bbe5f dst partym auth_alg MD5 \
              authkey 2ae8b94967e6b9b0dd16e6d4b7ea7278

    注 –

    これらのキーと SPI は、セキュリティアソシエーションごとに変更できます。セキュリティアソシエーションごとに、異なるキーと異なる SPI を割り当てるべきです


  6. リブートします。


    # /usr/sbin/reboot
    
  7. パケットが保護されているかどうかを確認するには、パケットが保護されていることを確認する方法を参照してください。

例 — リブートなしでの IPv6 アドレス間のトラフィックの保護

次の例では、IPv6 アドレスを持つシステム間の保護トラフィックをテストする方法について説明します。実際の稼動環境では、ipsecconf コマンドを実行するよりもリブートする方が安全です。

  1. 2 つのシステム間のトラフィックを保護する方法手順 5 までを実行します。

  2. リブートする代わりに、ipseckey コマンドを使ってセキュリティアソシエーションをデータベースに追加します。


    # ipseckey -f /etc/inet/secret/ipseckeys 
    
  3. 次のように、ipsecconf コマンドを使用して IPsec ポリシーを有効にします。


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

    注 –

    このコマンドの実行時には警告を読んでください。ソケットがすでに使用中 (ラッチされた) の場合には、システムのセキュリティが低下します。


例 — IPv4 アドレス間のトラフィックの保護

次の例では、IPv4 アドレスを持つシステム間のトラフィックを保護する方法について説明します。この例では、自動キー管理 (IKE) を使用してセキュリティアソシエーションを作成します。IKE は、管理者が介在する必要が少なく、大量のトラフィックを容易に保護するようにスケーリングします。

  1. 前の手順の手順 2/etc/inet/ipnodes ファイルを /etc/hosts ファイルに置き換えます。

    partym システムで、enigma/etc/hosts ファイルに追加します。


    # echo "192.168.116.16 enigma">> /etc/hosts
    

    enigma システムで、partym/etc/hosts ファイルに追加します。


    # echo "192.168.13.213 partym">> /etc/hosts
    
  2. ipsecinit.conf ファイルを編集して IPsec ポリシーエントリを追加します (手順 4 を参照)。

  3. キーは、次のどちらかの方法で作成できます。

    • IKE を設定してキーを自動的に生成する。IKE はキーを自動的に更新します。IKE を設定するには、表 4–1 の設定手順のどれかに従ってください。IKE 設定ファイルの構文については、ike.config(4) のマニュアルページを参照してください。

      キーの生成や保守を手動で行う必要が特にない場合は、IKE を設定すべきです。

    • IKE デーモン in.iked を起動しない場合は、キーを手動で作成できます。これについては、2 つのシステム間のトラフィックを保護する方法手順 5 を参照してください。

  4. リブートします。

    リブートせずにトラフィックを保護する場合は、ipseckey コマンドと ipsecconf コマンドを使用します。


    # ipseckey -f /etc/inet/secret/ipseckeys 
    # ipsecconf -a /etc/inet/ipsecinit.conf 
    

    注 –

    このコマンドの実行時には警告を読んでください。ソケットがすでに使用中 (ラッチされた) の場合には、システムのセキュリティが低下します。


  5. パケットが保護されているかどうかを確認するには、パケットが保護されていることを確認する方法を参照してください。