Solaris のシステム管理 (第 3 巻)

仮想プライベートネットワークの構築

この手順では、インターネットで VPN を構築して組織内の 2 つのネットワークを接続し、そのネットワーク間のトラフィックを IPsec で保護する操作について説明します。前提条件として、VPN リンクを実装した 2 つのシステム上で、ネットワークの le1 インタフェースは VPN 内部にあり、le0 インタフェースは VPN 外部にあるものとします。

また、この操作では、DES と MD5 で ESP を使用します。使用するアルゴリズムによってキーの長さが異なり、DES の場合は 64 ビット (56 ビット + 8 ビットパリティ)、MD5 の場合は 128 ビットになります。インターネットでゲートウェイになる 2 つのシステムには、次の操作をします。VPN については、「仮想プライベートネットワークを使用可能にする」を参照してください。

  1. システムコンソールでスーパーユーザーになります。


    注 -

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


  2. 次のコマンドを入力して IP 送信をオフにします。


    # ndd -set /dev/ip ip_forwarding 0
    

    IP 送信をオフにすると、このシステムを経由したネットワーク間のパケット送信ができなくなります。

  3. 次のコマンドを入力して IP の厳密宛先マルチホームをオンにします。


    # ndd -set /dev/ip ip_strict_dst_multihoming 0
    

    IP 厳密宛先マルチホームをオンにすると、システムの宛先アドレスのうちの 1 つに宛てたパケットは、そのアドレスを割り当てたインタフェースに必ず到着します。

    ndd(1M) コマンドを使用して IP 送信をオフにし、IP 厳密宛先をオンにすると、マルチホームによってシステム自体へのパケット以外はすべてパケットがシャットダウンされ、宛先 IP アドレスに対応するインタフェースにだけパケットが到着します。

  4. 次の手順で、必要に応じて Solaris システム上のほとんどの (すべてでなければ) ネットワークサービスを無効にします。


    注 -

    VPN ルーターは、ほとんどの入力要求を受け付けません。入力トラフィックを受け付けるすべてのプロセスを無効にするか (inetd.conf ファイルの行をコメントにするか、SNMP を終了するなど)、「IPsec ポリシーによる Web サーバーの保護」のような方法を実行する必要があります。


    1. inetd.conf を編集して、重要なサービス以外のすべてのサービスを削除した場合、次のコマンドを入力します。


      # pkill -HUP inetd
      
    2. 重要なサービス以外のすべてのサービスを削除するための inetd.conf の編集がまだの場合は、次のコマンドを入力します。


      # pkill inetd
      
    3. 必要に応じて、次の例のようなコマンドを 1 つまたは複数入力して SNMP、NFS など他のインターネットサービスを無効にします。


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

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

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

    1. 次のコマンドを入力します。


      # ipseckey
      

      ipseckey コマンドモードが有効になります。

    2. ipseckey コマンドモードプロンプトで、次のコマンドを入力します。


      > add esp spi random-number src system1_addr dst system2_addr ¥
      auth_alg md5 encr_alg des ¥
      authkey very-random-hex-string-of-32-characters ¥
      encrkey very-random-hex-string-of-16-characters
      
    3. Return キーを押します。

      コマンドが実行され、ipseckey コマンドモードプロンプトが再表示されます。

    4. ipseckey コマンドモードプロンプトで、次のコマンドを入力します。


      > add esp spi random-number src system2_addr dst system1_addr ¥
      auth_alg md5 encr_alg des ¥
      authkey very-random-hex-string-of-32-characters ¥
      encrkey very-random-hex-string-of-16-characters
      

      注 -

      キーと SPI は、セキュリティアソシエーションごとに変更できますが、同じにしてはいけません。


    5. ipseckey コマンドモードプロンプトで、Ctrl-D または Exit キーを入力してこのモードを終了します。

  6. 次の手順で保護トンネル ip.tun0 を設定します。

    1. システム 1 で、次のコマンドを入力します。


      # ifconfig ip.tun0 plumb
      
      # ifconfig ip.tun0 system1-taddr system2-taddr ¥
      tsrc system1-addr tdst system2-addr encr_algs des encr_auth_algs md5
      
      # ifconfig ip.tun0 up
      
    2. システム 2 で、次のコマンドを入力します。


      # ifconfig ip.tun0 plumb
      
      # ifconfig ip.tun0 system2-taddr system1-taddr ¥
      tsrc system2-addr tdst system1-addr encr_algs des encr_auth_algs md5
      
      # ifconfig ip.tun0 up
      

    保護トンネルが構築され、IP からみたもう 1 つの物理的インタフェースが追加されます。

  7. システムごとに次のコマンドを入力して le1:ip_forwardingip.tun0:ip_forwarding をオンにします。


    # ndd -set /dev/ip le1:ip_forwarding 1
    
    # ndd -set /dev/ip ip.tun0:ip_forwarding 1
    

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

    le1 はイントラネットの内部にあり、ip.tun0 はインターネットを経由して 2 つのシステムを接続するので、これら 2 つのインタフェースでは、ip_forwarding をオンにしておきます。

    le0 インタフェースの ip_forwarding はまだオフです。そのため、外部 (インターネット内) からパケットが保護イントラネットに侵入するのを防ぐことができます。

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


    # ifconfig le0 private
    

    le0ip_forwarding がオフになっていても、ルーティングプロトコルの実装のどれか (in.routed など) で、le0 がイントラネット内のピアにパケットを転送するときの有効なインタフェースであることが通知されている可能性があります。インタフェースの private フラグを設定すれば、この通知を削減できます。

  9. システムごとに次のコマンドを実行して、le0 経由のデフォルトルートを手動で追加します。


    # pkill in.rdisc
    
    # route add default router-on-le0-subnet
    

    le0 はイントラネットの一部ではありませんが、インターネットを介してそのピアマシンにアクセスする必要があります。そのため、インターネットルーティング情報が必要です。インターネットの残りの要素にとって、VPN システムはルーターに対するホストのようなものなので、デフォルトルーターを使用するか、ルーター発見を実行すれば十分です。

  10. システムが再起動するときに、in.rdisc が再開するのを防ぐため次の操作をします。

    1. le0 サブネットのデフォルトルーターの IP アドレスを /etc/defaultrouter ファイルに指定します。

      これで、in.rdisc がリブート時に開始しなくなります。

    2. 次のコマンドを入力します。


      # touch /etc/notrouter
      

      起動シーケンスの初期にルーティングが打ち切られ、防備が強化されます。

    3. /etc/hostname.ip.tun0 ファイルを編集して次の行を追加します。


      system1-taddr system2-taddr tsrc system1-addr ¥
           tdst system2-addr encr_algs des encr_auth_algs md5
    4. /etc/rc3.d/S99ipsec_setup ファイルを編集して、最後に if/then 文に次の行を追加します。


      ndd -set /dev/ip le1:ip_forwarding 1
      ndd -set /dev/ip ip.tun0:ip_forwarding 1
      ifconfig le0 private
      in.routed

      ファイルは次のようになります。


      if [ -f /etc/inet/ipseckeys -a -f /etc/inet/ipsecinit.conf ]; then
           /usr/sbin/ipseckey -f /etc/inet/ipseckeys
           ndd -set /dev/ip le1:ip_forwarding 1
           ndd -set /dev/ip ip.tun0:ip_forwarding 1
           ifconfig le0 private
           in.routed
      fi
  11. システムごとに、次のコマンドを実行してルーティングプロトコルを実行します。


    # in.routed
    

暗号システムの不正侵入者の時間的な余裕をなくすため、手順 2 で呼び出すセキュリティアソシエーションは定期的に新しいアソシエーションに変更します。現在のセキュリティアソシエーションを変更するには、次のように操作します。