IPsec と IKE の管理

IPsec 作業

この節では、2 つのシステム間のトラフィックを保護し、Web サーバーを保護し、仮想プライベートネットワーク (VPN) をセットアップするための手順について説明します。追加手順では、キー情報の提供、SA の提供、IPsec が設定どおり動作しているかどうかの確認を行います。

手順内の例で、システム名 enigma および partym を使用する場合があります。enigmapartym を各自使用しているシステムの名前に置き換えてください。

役割を使って IPsec を管理する方法については、『Solaris のシステム管理 (セキュリティサービス)』の「役割によるアクセス制御 (手順)」を参照してください。

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

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

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


    注 –

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


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

    IPv4 アドレスしか持たないシステムに接続する場合は、/etc/inet/hosts ファイルに変更を加えます。

    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 SA の組を追加します。

    インターネットキー交換 (IKE) を設定すると、SA が自動的に生成されます。SA は手動でも追加できます。


    注 –

    キーの生成や保守を手動で行う必要が特にない場合は、IKE を使用すべきです。IKE キー管理では、手動でのキー管理よりも強力なセキュリティ効果が得られます。


  6. 各システムをリブートします。


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

例— リブートなしでのシステム間のトラフィックの保護

この例では、2 つのシステム間のトラフィックが保護されていることを確認する方法を示します。実際の稼働環境では、ipsecconf コマンドを実行するよりもリブートする方が安全です。

2 つのシステム間のトラフィックを保護する方法手順 5 でリブートする代わりに、次のいずれかの作業を行います。


注意 – 注意 –

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


Web サーバーを保護する方法

セキュリティ保護された Web サーバーでは、Web クライアントであれば Web サービスと通信できます。セキュリティ保護された Web サーバーでは、Web トラフィック以外のトラフィックは、セキュリティ検査を通る「必要があります」。次の手順には、Web トラフィックの検査省略手順が含まれています。さらに、この Web サーバーでは、セキュリティ保護されていない DNS クライアント要求を出すことができます。その他のすべてのトラフィックでは、Blowfish と SHA アルゴリズムによる ESP が必要です。その他のトラフィックではさらに、アウトバウンドトラフィックに共有 SA を使用します。共有 SA を使用すると、生成しなければならない SA の数が少なくて済みます。

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


    注 –

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


  2. セキュリティポリシー検査を省略するサービスを指定します。

    Web サーバーの場合、TCP ポート 80 (HTTP) と 443 (保護 HTTP) が該当します。Web サーバーが DNS 名検査をするときは、TCP と UDP の両方にポート 53 も組み込む必要がある場合もあります。

  3. Web サーバーポリシー用のファイルを /etc/inet ディレクトリに 作成します。このファイルにその目的を表す名前を与えます (たとえば、IPsecWebInitFile)。このファイルに次のように入力します。


    # Web traffic that web server should bypass.
    	{lport  80 ulp tcp dir both} bypass {}
    	{lport 443 ulp tcp dir both} bypass {}
    
    	# Outbound DNS lookups should also be bypassed.
    	{rport 53 dir both} bypass {}
    
    	# Require all other traffic to use ESP with Blowfish and SHA-1.
    	# Use a shared SA for outbound traffic, in order to avoid a
    	# large supply of security associations.
    	{} permit {encr_algs blowfish encr_auth_algs sha}
    	{} apply {encr_algs blowfish encr_auth_algs sha sa shared}

    これで、保護トラフィックだけがシステムにアクセスできるようになります。ただし、手順 2 で説明した検査を省略するトラフィックは例外です。

  4. 手順 3 で作成したファイルを /etc/inet/ipsecinit.conf ファイルに読み込みます。


    # vi  /etc/inet/ipsecinit.conf 
     :r IPsecWebInitFile
     :wq!
  5. IPsecWebInitFile ファイルを読み取り専用アクセス権で保護します。


    # chmod 400 IPsecWebInitFile
    
  6. リブートせずに Web サーバーをセキュリティ保護します。次のオプションのどちらか 1 つを選択します。

    • キー管理に IKE を使用する場合は、in.iked デーモンをいったん停止後、再起動します。


      # pkill in.iked
      # /usr/lib/inet/in.iked
      
    • 手動でキーを管理する場合は、ipseckey および ipsecconf コマンドを実行します。


      # ipseckey -f /etc/inet/secret/ipseckeys 
      # ipsecconf -a /etc/inet/IPsecWebInitFile 
      

      ipsecinit.conf ファイル内にエントリがある場合は、再度読み込むときエラーが発生します。


    注意 – 注意 –

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


    リブートすることもできます。システムをリブートすると、IPsec ポリシーがすべての TCP 接続に適用されます。リブート時に、IPsec ポリシーのファイルで指定したポリシーが TCP 接続で使用されます。

    これで、Web サーバーでは、Web サーバートラフィックとアウトバウンド DNS 要求と応答だけを処理するようになりました。他のサービスは、IPsec をリモートシステムで有効にしないと機能しません。

  7. (省略可能) リモートシステムと非 Web トラフィックを持つ Web サーバーとの通信を可能にするには、リモートシステムの ipsecinit.conf ファイルに次のポリシーを追加します。

    IPsec ポリシーが一致した場合にかぎり、リモートシステムは、非 Web トラフィックを持つ Web サーバーと安全に通信できます。


    # Communicate with web server about nonweb stuff
    #
    {saddr webserver} permit {encr_algs blowfish encr_auth_algs sha}
    {saddr webserver} apply {encr_algs blowfish encr_auth_algs sha sa shared}

仮想プライベートネットワーク (VPN) を構築する方法

この手順では、インターネットで VPN を構築して組織内の 2 つのネットワークを接続する方法について説明します。また、そのネットワーク間のトラフィックを IPsec で保護する方法について説明します。

この手順は、2 つのシステム間のトラフィックを保護する方法の手順を拡張するものです。この手順では、2 つのシステムを接続するだけでなく、これら 2 つのシステムに接続している 2 つのイントラネットを接続します。この手順における 2 つのシステムはゲートウェイとして機能します。

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

VPN については、仮想プライベートネットワークを参照してください。次の図は、この手順によって設定される VPN を表しています。

この図は、ヨーロッパのオフィスとカリフォルニアのオフィスを接続する VPN の詳細を示しています。

この手順では、次の構成パラメータを使用します。

パラメータ 

ヨーロッパ 

カリフォルニア 

システム名 

enigma 

partym 

システムイントラネットインタフェース 

hme1 

hme1 

システムインターネットインタフェース 

hme0 

hme0 

システムイントラネットアドレス (手順 8-point アドレスでもある)

10.16.16.6 

10.1.3.3 

システムインターネットアドレス (手順 8-taddr アドレスでもある)

192.168.116.16 

192.168.13.213 

インターネットルーターの名前 

router-E 

router-C 

インターネットルーターのアドレス 

192.168.116.4 

192.168.13.5 

トンネル名 

ip.tun0

ip.tun0

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


    注 –

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


  2. IP 転送をオフにします。次のいずれか 1 つを指定してください。

    • IPv4 ネットワークでは、次の構文を使用します。


      # ndd -set /dev/ip ip_forwarding 0
      
    • IPv6 ネットワークでは、次の構文を使用します。


      # ndd -set /dev/ip6 ip6_forwarding 0
      

    IP 転送をオフにすると、このシステムを経由したネットワーク間のパケット送信ができなくなります。ndd コマンドについては、ndd(1M) のマニュアルページを参照してください。

  3. IP の厳密宛先マルチホームをオンにします。次のいずれか 1 つを指定してください。

    • IPv4 ネットワークでは、次の構文を使用します。


      # ndd -set /dev/ip ip_strict_dst_multihoming 1
      
    • IPv6 ネットワークでは、次の構文を使用します。


      # ndd -set /dev/ip6 ip6_strict_dst_multihoming 1
      

    IP 厳密宛先マルチホームをオンにすると、システムの宛先アドレスに宛てたパケットは、正しい宛先アドレスに必ず到着します。

    ndd コマンドを使用して IP 転送をオフにし、IP 厳密宛先マルチホームをオンにすると、システムを流れるパケットの数は少なくなります。厳密宛先マルチホームが有効な状態では、特定のインタフェースに到着したパケットに、そのインタフェースのいずれかのローカル IP アドレスを指定する必要があります。その他のパケットは、システムのほかのローカルアドレスが指定されているものも含めてすべて捨てられます。

  4. 必要に応じて次の手順を行い、大部分 (場合によってはすべて) のネットワークサービスを無効にします。

    1. inetd.conf ファイルを編集し、重要なサービス以外のすべてのサービスを削除します。続いて、inetd デーモンを実行し、inetd.conf ファイルを再度読み込みます。


      # pkill -HUP inetd
      

      注 –

      VPN ルーターは、ほとんどの入力要求を受け付けません。入力トラフィックを受信するすべてのプロセスを無効にする必要があります。たとえば、inetd.conf ファイルの一部をコメントにしたり、SNMP を停止したりします。あるいは、Web サーバーを保護する方法で使用したようなテクニックを使うこともできます。


    2. 重要なサービス以外のすべてのサービスを削除するための inetd.conf ファイルの編集をしていない場合は、inetd デーモンを強制終了します。


      # pkill inetd
      
    3. 適切なコマンドを入力して SNMP、NFS など他のインターネットサービスを無効にします。たとえば、次のコマンドでは、NFS サービスとメールサービスが強制終了します。


      # /etc/init.d/nfs.server stop
      # /etc/init.d/sendmail stop
      

      ネットワークサービスを無効にすると、IP パケットによるシステムへの妨害がなくなります。たとえば、SNMP デーモン、telnet 接続、rlogin 接続などを最大限に活用できます。

  5. システムごとに、2 つのシステム間の SA の組を追加します。

    SA 用のキーを管理するように IKE を設定します。VPN に IKE を設定するには、IKE の設定 (作業マップ) のいずれかの手順を実行します。

    キーを手動管理する正当な理由がある場合は、IPsec セキュリティアソシエーションを手動で生成する方法を参照してください。

  6. システムごとに、/etc/inet/ipsecinit.conf ファイルを編集して VPN ポリシーを追加します。

    1. たとえば、enigma システムで、ipsecinit.conf ファイルに次のエントリを入力します。


      # LAN traffic can bypass IPsec.
         {laddr 10.16.16.6 dir both} bypass {}
      
      # WAN traffic uses ESP with 3DES and MD5.
         {} ipsec {encr_algs 3des encr_auth_algs md5}
    2. partym システムで、ipsecinit.conf ファイルに次のエントリを追加します。


      # LAN traffic can bypass IPsec.
         {laddr 10.1.3.3 dir both} bypass {}
      
      # WAN traffic uses ESP with 3DES and MD5.
         {} ipsec {encr_algs 3des encr_auth_algs md5}

    ipsec エントリは、リモートシステムがクリアパケットを送信してくるのを防止します。bypass エントリを指定すると、LAN に属するノードでは、VPN ルーターを、それが LAN の一部であるかのように扱うことができます。

  7. (省略可能) これより高いレベルのセキュリティが必要な場合は、LAN bypass エントリを削除します。

    ipsecinit.conf ファイル内のエントリは次のようになります。


    # All traffic uses ESP with 3DES and MD5.
       {} ipsec {encr_algs 3des encr_auth_algs md5}

    これによって、LAN 上の各システムが VPN ルーターと通信するには、IPsec の起動が必要になります。

  8. システムごとに、トンネル ip.tun0 を設定します。

    このトンネルは、IP から見たもう 1 つの物理的インタフェースを追加します。次の 3 つの ifconfig コマンドを入力してポイントツーポイントインタフェースを作成します。


    # ifconfig ip.tun0 plumb
    
    # ifconfig ip.tun0 system1-point system2-point \
    tsrc system1-taddr tdst system2-taddr encr_algs 3DES encr_auth_algs MD5
    
    # ifconfig ip.tun0 up
    
    1. たとえば、enigma システムで次のコマンドを入力します。


      # ifconfig ip.tun0 plumb
      
      # ifconfig ip.tun0 10.16.16.6 10.1.3.3   \
      tsrc 192.168.116.16 tdst 192.168.13.213 \
      encr_algs 3DES encr_auth_algs MD5
      
      # ifconfig ip.tun0 up
      
    2. partym システムで、次のコマンドを入力します。


      # ifconfig ip.tun0 plumb
      
      # ifconfig ip.tun0 10.1.3.3 10.16.16.6  \
      tsrc 192.168.13.213 tdst 192.168.116.16 \
      encr_algs 3DES encr_auth_algs MD5
      
      # ifconfig ip.tun0 up
      

    ifconfig コマンドに渡すポリシーは、ipsecinit.conf ファイルに指定されているポリシーと同じでなければなりません。リブート時に、各システムは ipsecinit.conf ファイルに指定されているポリシーを使用します。

  9. システムごとに、hme1ip.tun0 インタフェースの IP 転送をオンにします。次のいずれか 1 つを指定してください。

    • IPv4 ネットワークでは、次の構文を使用します。


      # ndd -set /dev/ip hme1:ip_forwarding 1
      # ndd -set /dev/ip ip.tun0:ip_forwarding 1
      
    • IPv6 ネットワークでは、次の構文を使用します。


      # ndd -set /dev/ip6 hme1:ip6_forwarding 1
      # ndd -set /dev/ip6 ip.tun0:ip6_forwarding 1
      

    IP 転送とは、別のインタフェースから到着したパケットを転送できることを意味します。IP 転送はまた、送信するパケットがもともとは別のインタフェースから発信されたパケットである可能性も意味します。パケットを正しく転送するには、受信インタフェースと送信インタフェースの IP 転送をオンにしておきます。

    hme1 インタフェースはイントラネットの内部にあるため、hme1 の IP 転送はオンにしておきます。さらに、ip.tun0 はインターネットを通してこれら 2 つのシステムに接続されているため、ip.tun0 の IP 転送はオンにしておきます。

    hme0 インタフェースの IP 転送はオフです。そのため、外部からパケットが保護イントラネットに侵入するのを防ぐことができます。外部とはインターネットを意味します。

  10. システムごとに、次のコマンドを入力して、ルーティングプロトコルによってイントラネット内のデフォルトのルートが通知されないようにします。


    # ifconfig hme0 private
    

    hme0 の IP 転送がオフになっていても、ルーティングプロトコルの実装によっては、このインタフェースを通知することがあります。たとえば、in.routed プロトコルは、イントラネット内のピアにパケットが転送される際に hme0 を有効なインタフェースとして通知する場合があります。インタフェースの private フラグを設定すれば、このような通知を防止できます。

  11. hme0 経由のデフォルトルートを手動で追加します。

    デフォルトルートは、インターネットに直接アクセスできるルーターでなければなりません。


    # pkill in.rdisc
    # route add default router-on-hme0-subnet
    
    1. たとえば、enigma システムで、次のルートを追加します。


      # pkill in.rdisc
      # route add default 192.168.116.4
      
    2. partym システムで、次のルートを追加します。


      # pkill in.rdisc
      # route add default 192.168.13.5
      

      hme0 インタフェースはイントラネットの一部ではありませんが、インターネットを介してそのピアシステムにアクセスする必要があります。hme0 は、自身のピアを見つけるために、インターネットルーティング情報を必要とします。インターネットの残りの要素にとって、VPN システムは、ルーターというよりもホストのような存在です。したがって、デフォルトルーターを使用するか、ルーター発見プロトコルを実行すれば、ピアシステムを見つけることができます。詳細については、route(1M)in.routed(1M) のマニュアルページを参照してください。

  12. リブート後に hme0 がデフォルトルートを使用するように、defaultrouter ファイルを作成します。

    /etc/defaultrouter ファイルに hme0 のデフォルトルーターの IP アドレスを入力します。この手順により、in.rdisc デーモンがリブート時に起動しなくなります。

    1. たとえば、enigma システムで enigma のインターネットルーターを /etc/defaultrouter ファイルに追加します。


      # vi /etc/defaultrouter
      
      192.168.116.4 router-E
    2. partym システムのインターネットルーターを partym/etc/defaultrouter ファイルに追加します。


      # vi /etc/defaultrouter
      
      192.168.13.5 router-C
  13. システムごとに、ブートシーケンスの初期にルーティングが起こらないようにします。これによって、セキュリティの脆弱性が軽減されます。


    # touch /etc/notrouter
    
  14. VPN がリブート後に開始するように、/etc/hostname.ip.tun0 ファイルを編集します。


    system1-point system2-point tsrc system1-taddr \
    tdst system2-taddr encr_algs 3des encr_auth_algs md5 up
    1. たとえば、enigma システムで、hostname.ip.tun0 ファイルに次のように追加します。


      10.16.16.6 10.1.3.3 tsrc 192.168.116.16 \
      tdst 192.168.13.213 encr_algs 3DES encr_auth_algs MD5 up
    2. partym システムで、hostname.ip.tun0 ファイルに次のように追加します。


      10.1.3.3 10.16.16.6 tsrc 192.168.13.213 \
      tdst 192.168.116.16 encr_algs 3DES encr_auth_algs MD5 up
  15. システムごとに、VPN パラメータの一部をブート時に設定するファイルを作成します。このファイルに /etc/rc3.d/S99vpn_setup という名前を付けます。

    各システムで、 hme1 および ip.tun0 インタフェースの IP 転送をオンにします。次のいずれか 1 つを指定してください。

    • IPv4 ネットワーク上で、ファイルに次の行を追加します。


      ndd -set /dev/ip hme1:ip_forwarding 1
      ndd -set /dev/ip ip.tun0:ip_forwarding 1
      ifconfig hme0 private
      in.routed
    • IPv6 ネットワーク上で、ファイルに次の行を追加します。


      ndd -set /dev/ip6 hme1:ip6_forwarding 1
      ndd -set /dev/ip6 ip.tun0:ip6_forwarding 1
      ifconfig hme0 private
      in.routed

    in.routed プロトコルを使用する代わりに、手動で /etc/rc3.d/S99vpn_setup ファイルにルートを追加することもできます。

  16. システムごとに、次のコマンドを入力してルーティングプロトコルを実行します。


    # in.routed
    

乱数を生成する方法

キーを手動で入力する場合、キー情報に無作為性を持たせる必要があります。キー情報は 16 進数で表されます。

乱数発生関数がすでにある場合は、それを使用してください。ない場合は、Solaris の /dev/random デバイスを入力として od コマンドを実行することができます。詳細は、od(1) のマニュアルページを参照してください。

  1. 16 進数の乱数を生成します。


    % od -x|-X -A n file
    
    -x

    8 進数ダンプを 16 進数形式で表示する。16 進数形式はキー情報を表すのに役立つ。16 進数を 4 文字単位で表示する

    -X

    8 進数ダンプを 16 進数形式で表示する。16 進数を 8 文字単位で表示する

    -A n

    表示から入力オフセットベースを取り除く

    file

    乱数のソースとなる

    たとえば、次のコマンドを入力すると、16 進数の乱数がそれぞれ次のように表示されます。


    % od -X -A n /dev/random | head -2
             d54d1536 4a3e0352 0faf93bd 24fd6cad
             8ecc2670 f3447465 20db0b0c c83f5a4b
    % od -x -A n /dev/random | head -2
             34ce 56b2 8b1b 3677 9231 42e9 80b0 c673
             2f74 2817 8026 df68 12f4 905a db3d ef27
  2. これらの出力を組み合わせて、適切な長さのキーを作成します。

    同じ行にある乱数間のスペースを取り除き、32 文字キーを作成します。32 文字キーの長さは 128 ビットです。セキュリティパラメータインデックス (SPI) の場合は、8 文字キー 1 個を使用できます。

IPsec セキュリティアソシエーションを手動で生成する方法

IPsec セキュリティアソシエーション (SA) は手動でも管理できますが、セキュリティ上の理由からお勧めしません。 2 つのシステム間のトラフィックを保護する方法 に加えて、次の手順を実行します。まず、ipseckey コマンドで SA を作成します。次に、キー情報を ipseckeys ファイルに追加します。

  1. SA のキー情報を生成します。

    16 進のアウトバウンドトラフィックと、同じく 16 進のインバウンドトラフィックには、それぞれ 3 種類の乱数が必要です。つまり、1 台のシステムで次の数値を生成する必要があります。

    • 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. どれかのシステムのシステムコンソールで、スーパーユーザーになるか、同等の役割を引き受けます。


    注 –

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


  3. 次のコマンドを入力して ipseckey コマンドモードを有効にします。


    # ipseckey
    
    >

    > プロンプトは、ipseckey コマンドモードになったことを示します。

  4. 既存の SA を置き換える場合、現在の SA をフラッシュします。


    > flush
    > 

    悪意のあるユーザーによる SA の破壊を防ぐには、キー情報を置き換える必要があります。


    注 –

    管理者は、通信システム上のキーの置き換えを調整する必要があります。あるシステムの SA を置き換える場合は、それと通信しているリモートシステムの SA も置き換える必要があります。


  5. SA を作成するには、次のコマンドを実行します。

    次の構文で、フラッシュした SA を置き換えることもできます。


    > add protocol spi random-hex-string \
    src addr dst addr2 \
    protocol-prefix_alg protocol-algorithm  \
    protocol-prefixkey random-hex-string-of-algorithm-specified-length
    
    random-hex-string

    16 進数形式の最大 8 桁の乱数を指定する。0x が前置される。セキュリティパラメータインデックス (SPI) が受け取る以上の桁数を入力すると、超過部分は無視される。SPI が受け取るより少ない桁数を入力すると、パディングが行われる

    protocol

    esp または ah を指定する

    addr

    システムの IP アドレスを指定する

    addr2

    addr のピアシステムの IP アドレスを指定する

    protocol-prefix

    encr または auth を指定する。encr 接頭辞は esp プロトコルとともに 使用される。auth 接頭辞は ah プロトコルとともに使用される。encr_auth_alg オプションは esp プロトコルとともに使用される

    protocol-algorithm

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

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

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

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

    1. たとえば、enigma システムで、次のコマンドを入力してアウトバウンドパケットを保護します。手順 1 で生成した乱数を使用します。


      > add esp spi 0x8bcd1407 \
      src 192.168.116.16 dst 192.168.13.213 \
      encr_alg 3DES \
      encrkey d41fb74470271826a8e7a80d343cc5aae9e2a7f05f13730d
      
      > add ah spi 0x18907dae \
      src 192.168.116.16 dst 192.168.13.213 \
      auth_alg MD5 \
      authkey e896f8df7f78d6cab36c94ccf293f031
      
      >

      注 –

      ピアシステムでは、同じキー情報を使用する必要があります。


    2. 引き続き ipseckey コマンドモードを使って、enigma システムで、次のコマンドを入力してインバウンドパケットを保護します。


      > add esp spi 0x122a43e4 \
      src 192.168.13.213 dst 192.168.116.16 \
      encr_alg 3des \
      encrkey dd325c5c137fb4739a55c9b3a1747baa06359826a5e4358e
      
      > add ah spi 0x91825a77 \
      src 192.168.13.213 dst 192.168.116.16 \
      auth_alg md5 \
      authkey ad9ced7ad5f255c9a8605fba5eb4d2fd
      
      >

      注 –

      これらのキーと SPI は、SA ごとに変更できます。SA ごとに異なるキーと異なる SPI を割り当てるべきです


  6. ipseckey コマンドモードを終了するには、Control-D キーを押すか、quit と入力します。

  7. リブート時に IPsec がキー情報を使用できるように、/etc/inet/secret/ipseckeys ファイルにキー情報を追加します。

    /etc/inet/secret/ipseckeys ファイルの行とコマンド行の言語が同じになるようにします。

    1. たとえば、enigma システム上の /etc/inet/secret/ipseckeys ファイルは次のようになります。


      # ipseckeys - This file takes the file format documented in 
      #   ipseckey(1m).
      #   Note that naming services might not be available when this file
      #   loads, just like ipsecinit.conf.
      #
      # for outbound packets on enigma
      add esp spi 0x8bcd1407 \
         src 192.168.116.16 dst 192.168.13.213  \
         encr_alg 3DES \
         encrkey  d41fb74470271826a8e7a80d343cc5aae9e2a7f05f13730d
      #
      add ah spi  0x18907dae \
         src 192.168.116.16 dst 192.168.13.213 \
         auth_alg MD5  \
         authkey  e896f8df7f78d6cab36c94ccf293f031
      #
      # for inbound packets
      add esp spi 0x122a43e4 \
         src 192.168.13.213 dst 192.168.116.16 \
         encr_alg 3DES \
         encrkey dd325c5c137fb4739a55c9b3a1747baa06359826a5e4358e
      #
      add ah spi  0x91825a77 \
         src 192.168.13.213 dst 192.168.116.16 \
         auth_alg MD5  \
         authkey  ad9ced7ad5f255c9a8605fba5eb4d2fd
    2. 読み取り専用ファイルを保護します。


      # chmod 400 /etc/inet/secret/ipseckeys
      
  8. partym システム上で手順 2 から 手順 7 を繰り返します。enigma システムの場合と同じキー情報を使用します。

    両システムのキー情報は同じでなければなりません。次の例のように、ipseckeys ファイル内のコメントだけが異なります。コメントが異なるのは、dst enigmaenigma システム上ではインバウンド、partym システム上ではアウトバウンドになるからです。


    # partym ipseckeys file
    #
    #for inbound packets
    add esp spi 0x8bcd1407 \
       src 192.168.116.16 dst 192.168.13.213  \
       encr_alg 3DES \
       encrkey  d41fb74470271826a8e7a80d343cc5aae9e2a7f05f13730d
    #
    add ah spi  0x18907dae \
       src 192.168.116.16 dst 192.168.13.213 \
       auth_alg MD5  \
       authkey  e896f8df7f78d6cab36c94ccf293f031
    #
    # for outbound packets
    add esp spi 0x122a43e4 \
       src 192.168.13.213 dst 192.168.116.16 \
       encr_alg 3DES \
       encrkey dd325c5c137fb4739a55c9b3a1747baa06359826a5e4358e
    #
    add ah spi  0x91825a77 \
       src 192.168.13.213 dst 192.168.116.16 \
       auth_alg MD5  \
       authkey  ad9ced7ad5f255c9a8605fba5eb4d2fd

パケットが保護されていることを確認する方法

パケットが保護されていることを確認するには、snoop コマンドで接続をテストします。snoop 出力に表示される接頭辞は、次のとおりです。


注 –

snoop 出力を読むためには、スーパーユーザーであるか、それと同等の役割でなければなりません。さらに、接続をテストするためには、両方のシステムにアクセスできなければなりません。


  1. 一方のシステム (たとえば、partym) でスーパーユーザー になります。


    % su 
    Password: Type root password
    # 
  2. 端末ウィンドウで、リモートシステム (たとえば enigma システム) から来るパケットの snoop を開始します。


    # snoop -v enigma
    Using device /dev/hme (promiscuous mode)
  3. 別の端末ウィンドウで、enigma システムにリモートからログインします。パスワードを入力します。次に、スーパーユーザーになり、enigma システムからのパケットを partym システムに送信します。


    % rlogin enigma
    Password: Type your password
    % su 
    Password: Type root password
    # ping partym
    
  4. partym システムの snoop ウィンドウに、次のような出力が表示されます。


    IP:   Time to live = 64 seconds/hops
    IP:   Protocol = 51 (AH)
    IP:   Header checksum = 4e0e
    IP:   Source address = 192.168.116.16, enigma
    IP:   Destination address = 192.168.13.213, partym
    IP:   No options
    IP:
    AH:  ----- Authentication Header -----
    AH:
    AH:  Next header = 50 (ESP)
    AH:  AH length = 4 (24 bytes)
    AH:  <Reserved field = 0x0>
    AH:  SPI = 0xb3a8d714
    AH:  Replay = 52
    AH:  ICV = c653901433ef5a7d77c76eaa
    AH:
    ESP:  ----- Encapsulating Security Payload -----
    ESP:
    ESP:  SPI = 0xd4f40a61
    ESP:  Replay = 52
    ESP:     ....ENCRYPTED DATA....
    
    ETHER:  ----- Ether Header -----
    ETHER:
    ETHER:  Packet 20 arrived at 9:44:36.59
    ETHER:  Packet size = 98 bytes
    ETHER:  Destination = 8:0:27:aa:11:11, Sun
    ETHER:  Source      = 8:0:22:aa:22:2, Sun
    ETHER:  Ethertype = 0800 (IP)
    ETHER:
    IP:   ----- IP Header -----
    IP:
    IP:   Version = 4
    IP:   Header length = 20 bytes
    IP:   Type of service = 0x00
    IP:         xxx. .... = 0 (precedence)
    IP:         ...0 .... = normal delay
    IP:         .... 0... = normal throughput
    IP:         .... .0.. = normal reliability
    IP:         .... ..0. = not ECN capable transport
    IP:         .... ...0 = no ECN congestion experienced
    IP:   Total length = 84 bytes
    IP:   Identification = 40933
    IP:   Flags = 0x4
    IP:         .1.. .... = do not fragment
    IP:         ..0. .... = last fragment
    IP:   Fragment offset = 0 bytes
    IP:   Time to live = 60 seconds/hops
    IP:   Protocol = 51 (AH)
    IP:   Header checksum = 22cc
    …