この節では、2 つのシステム間のトラフィックを保護し、IPsec ポリシーで Web サーバーを保護し、仮想プライベートネットワークをセットアップするための手順について説明します。システム名 enigma と partym は一例として使用しているだけです。 よって、enigma と partym を各自使用しているシステムの名前に置き換えてください。
この手順を行う前に、各システムに 2 つのアドレス (IPv4 アドレスと IPv6 アドレス) があり、有効なアルゴリズムのいずれかを使用して AH (Authentication Header) 保護を呼び出しているものとします。 また、SA (Security Association) は共有されているものとします。 すなわち、2 つのシステムを保護するのに必要なのは 1 組だけの SA です。
システムコンソールからスーパーユーザーになります。
リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。
システムごとに、他のシステムのアドレスとホスト名を /etc/inet/ipnodes ファイルに追加します。次のように、1 つのシステムのエントリは連続してそのファイルに入力します。
partym という名前のシステムでは、次のように入力します。
# Secure communication with enigma 192.168.66.1 enigma fec0::10:20ff:fea0:21f7 enigma |
enigma という名前のシステムでは、次のように入力します。
# Secure communication with partym 192.168.55.2 partym fec0::9:a00:20ff:fe7b:b667 partym |
システムの名前は、一例として使用しているだけです。実際にシステム間のトラフィックを保護する場合には、各自のシステムの名前を使用してください。
これで、起動スクリプトでは、存在しないネーミングサービスに依存することなくシステム名を使用できます。
システムごとに、/etc/inet/ipsecinit.conf ファイルを編集して IPsec ポリシーエントリを追加します。
システムごとに、2 つのシステム間のセキュリティアソシエーションの組を追加します。
システムごとに、読み取り専用 (600 のアクセス権) の /etc/inet/secret/ipseckeys ファイルを編集し、このファイルに次の行を入力します。
add ah spi random-number dst local-system authalg an_algorithm_name \ authkey random-hex-string-of-algorithm-specified-length add ah spi random-number dst remote-system authalg an_algorithm_name \ authkey random-hex-string-of-algorithm-specified-length |
キーと SPI は、セキュリティアソシエーションごとに変更できますが、同じにしてはいけません。
各システムをリブートします。
# /etc/reboot |
リブートでは、起動プロセスの終了前に /etc/inet/secret/ipseckeys ファイルが読み取られます。 キーを変更する場合は、両方のシステムで ipseckeys ファイルが変更されていることを確認してください。
次の例では、IPv4 アドレスを持つシステム間のトラフィックを保護する方法について説明します。この例では、自動キー管理 (IKE) を使用してセキュリティアソシエーションを作成します。IKE は、管理者が介在する必要が少なく、大量のトラフィックを容易に保護するようにスケーリングします。
次のように、2 つのシステム間のトラフィックを保護にある手順 2 の /etc/inet/ipnodes ファイルを /etc/hosts ファイルに置き換えます。
partym という名前のシステムでは、次のように enigma を追加します。
# echo "192.168.66.1 enigma">> /etc/hosts |
enigma という名前のシステムでは、次のように partym を /etc/hosts ファイルに追加します。
# echo "192.168.55.2 partym">> /etc/hosts |
ipsecinit.conf ファイルを編集して IPsec ポリシーエントリを追加します。
ipseckey コマンドではなく、ike.config(4) ファイルを使用して、セキュリティアソシエーションを追加します。 この手順については、IKE 作業を参照してください。
2 つのシステム間のトラフィックを保護の手順 4 で説明されているように、キーを手動で作成することもできます。
リブートします。
次の例では、IPv6 アドレスを持つシステム間の保護トラフィックをテストする方法について説明します。
2 つのシステム間のトラフィックを保護の手順 4 まで実行します。
リブートしないで、引数として ipseckeys ファイルを指定する ipseckey コマンドを入力することで、セキュリティアソシエーションをデータベースに追加します。
# ipseckey -f /etc/inet/secret/ipseckeys |
次のように、ipsecconf コマンドを使用して IPsec ポリシーを有効にします。
# ipsecconf -a /etc/inet/ipsecinit.conf |
このコマンドの実行時には警告を読んでください。ソケットがすでに使用中 (ラッチされた) の場合には、システムのセキュリティが低下します。
セキュリティ保護された Web サーバーでは、Web クライアント要求でないすべての入力トラフィックが、セキュリティ検査を通ることが要求されます。 この手順では、Web サーバーで処理する Web トラフィックと、この Web サーバーからの DNS クライアント要求の省略 (bypass) について説明します。他のすべてのトラフィックには、3DES アルゴリズムと SHA-1 アルゴリズムでは ESP を要求し、出力トラフィックに共有 SA を使用します。また、SA の共有により、セキュリティアソシエーションが多くなり過ぎないようにします。
システムコンソールからスーパーユーザーになります。
リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。
セキュリティポリシー検査を省略するサービスを指定します。
Web サーバーの場合、TCP ポート 80 (HTTP) と 443 (保護 HTTP) が該当します。Web サーバーが DNS 名検査をするときは、TCP と UDP の両方にポート 53 も組み込む必要がある場合もあります。
たとえば、IPsecWebInitFile のように、選択したファイル名で読み取り専用ファイルを作成し、このファイルに次の行を入力します。
# Web traffic that Web server should bypass. {sport 80 ulp tcp} bypass {dir out} {dport 80 ulp tcp} bypass {dir in} {sport 443 ulp tcp} bypass {dir out} {dport 443 ulp tcp} bypass {dir in} # Outbound DNS lookups should also be bypassed. {dport 53} bypass {dir out} {sport 53} bypass {dir in} # Require all other traffic to use ESP with 3DES and SHA-1. # Use a shared SA for outbound traffic, in order to avoid a # large supply of security associations. {} permit {encr_algs 3des encr_auth_algs sha} {} apply {encr_algs 3des encr_auth_algs sha sa shared} |
これで、保護トラフィックだけがシステムにアクセスできるようになります。ただし、先の手順で説明した、検査を省略するトラフィックは例外です。
先の手順で作成したファイルを /etc/inet/ipsecinit.conf に読み込みます。
# vi /etc/inet/ipsecinit.conf :r IPsecWebInitFile :wq! |
リブートします。
ipsecconf コマンドを呼び出しても、すでに確立した TCP 接続には影響せず、そのポリシーはラッチされます。システムをリブートすると、IPsec ポリシーがすべての TCP 接続に適用されます。リブート時に、 IPsec ポリシーのファイルで指定したように TCP 接続でポリシーがラッチされます。
# reboot |
こうして、Web サーバーでは、Web サーバートラフィックと出力 DNS 要求と応答だけを処理します。他のサービスは、IPsec をリモートシステムで有効にしないと機能しません。キー情報を自動的に処理する場合には、IKE デーモンにより、IPv4 アドレスを持つリモートシステムで IPsec を有効にします。 IPv6 アドレスを持つリモートシステムでは、ipseckey(1M) コマンドを使用してリモートシステムで IPsec を有効にします。
この手順では、インターネットで VPN を構築して組織内の 2 つのネットワークを接続する方法について説明します。また、そのネットワーク間のトラフィックを IPsec で保護する方法について説明します。前提条件として、VPN リンクを実装した 2 つのシステム上で、ネットワークの le1 インタフェースは VPN 内部にあり、le0 インタフェースは VPN 外部にあるものとします。
また、この操作では、DES と MD5 で ESP を使用します。使用するアルゴリズムによってキーの長さが異なり、DES の場合は 64 ビット (56 ビット + 8 ビットパリティ)、MD5 の場合は 128 ビットになります。インターネットでゲートウェイになる 2 つのシステムには、次の操作をします。VPN については、仮想プライベートネットワークを参照してください。
システムコンソールからスーパーユーザーになります。
リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。
次のコマンドを入力して IP 送信をオフにします。
# ndd -set /dev/ip ip_forwarding 0 |
IP 送信をオフにすると、このシステムを経由したネットワーク間のパケット送信ができなくなります。
次のコマンドを入力して IP の厳密宛先マルチホームをオンにします。
# ndd -set /dev/ip ip_strict_dst_multihoming 1 |
IP 厳密宛先マルチホームをオンにすると、システムの宛先アドレスのうちの 1 つに宛てたパケットは、そのアドレスを割り当てたインタフェースに必ず到着します。
ndd(1M) コマンドを使用して IP 送信をオフにし、IP 厳密宛先をオンにすると、マルチホームによってシステム自体へのパケット以外はすべてパケットがシャットダウンされ、宛先 IP アドレスに対応するインタフェースにだけパケットが到着します。
必要に応じて、次の手順で Solaris システム上の大部分 (すべてでない場合) のネットワークサービスを無効にします。
VPN ルーターは、ほとんどの入力要求を受け付けません。入力トラフィッ クを受け付けるすべてのプロセスを無効にする必要があります (inetd.conf ファイルの行をコメントにするか、SNMP を終了するなど)。 また、Web サーバーの保護方法のような方法を実行する必要があります。
inetd.conf を編集して、重要なサービス以外のすべてのサービスを削除した場合、次のコマンドを入力します。
# pkill -HUP inetd |
重要なサービス以外のすべてのサービスを削除するための inetd.conf の編集をしていない場合は、次のコマンドを入力します。
# pkill inetd |
必要に応じて、次の例のようなコマンドを 1 つまたは複数入力して SNMP、NFS など他のインターネットサービスを無効にします。
# /etc/init.d/nfs.server stop # /etc/init.d/sendmail stop |
ネットワークサービスを無効にすると、IP パケットによるシステムへの妨害がなくなります。たとえば、SNMP デーモン、telnet、rlogin を最大限に活用できます。
システムごとに、2 つのシステム間のセキュリティアソシエーションの組を追加します。
システムで IPv4 アドレスを使用している場合には、セキュリティアソシエーションを作成するように IKE を設定すると、IKE デーモンにより、セキュリティアソシエーションが自動的に作成されます。VPN に IKE を設定するには、事前共有鍵による IKE の設定方法、自己署名付き公開証明書による IKE の設定方法、または認証局による署名付き公開鍵による IKE の設定方法のいずれかの手順を実行します。
システムで IPv6 アドレスを使用している場合には、次の手順を実行して手動でセキュリティアソシエーションを作成する必要があります。
次のコマンドを入力して ipseckey コマンドモードを有効にします。
# ipseckey > |
> プロンプトは、ipseckey コマンドモードになったことを示します。
次のコマンドを入力します。
> add esp spi random-number src system1_addr dst system2_addr \ auth_alg md5 encr_alg des \ authkey random-hex-string-of-32-characters \ encrkey random-hex-string-of-16-characters |
Return キーを押してコマンドを実行します。
次のコマンドを入力します。
> add esp spi random-number src system2_addr dst system1_addr \ auth_alg md5 encr_alg des \ authkey random-hex-string-of-32-characters \ encrkey random-hex-string-of-16-characters |
キーと SPI は、セキュリティアソシエーションごとに変更できますが、同じにしてはいけません。
Ctrl-D キーを押すか、 quit を入力してこのモードを終了します。
次の手順を実行して、IP から見たもう 1 つの物理的インタフェースを追加する保護トンネル ip.tun0 を設定します。
システム 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 で、次のコマンドを入力します。
# 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 |
システムごとに、次のコマンドを入力して le1:ip_forwarding と ip.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 はまだオフです。そのため、外部 (インターネット内) からパケットが保護イントラネットに侵入するのを防ぐことができます。
システムごとに、次のコマンドを入力して、ルーティングプロトコルによってイントラネット内のデフォルトのルートが通知されていないことを確認します。
# ifconfig le0 private |
le0 の ip_forwarding がオフになっていても、ルーティングプロトコルの実装のどれか (in.routed など) で、le0 がイントラネット内のピアにパケットを転送するときの有効なインタフェースであることが通知されている可能性があります。インタフェースの private フラグを設定すれば、この通知を削減できます。
システムごとに、次のコマンドを入力して le0 経由のデフォルトルートを手動で追加します。
# pkill in.rdisc # route add default router-on-le0-subnet |
le0 はイントラネットの一部ではありませんが、インターネットを介してそのピアマシンにアクセスする必要があります。そのため、インターネットルーティング情報が必要です。インターネットの残りの要素にとって、VPN システムはルーターに対するホストのようなものなので、デフォルトルーターを使用するか、ルーター発見を実行すれば十分です。
システムが再起動するときに、in.rdisc が再開するのを防ぐため次の操作をします。
le0 サブネットのデフォルトルーターの IP アドレスを /etc/defaultrouter ファイルに指定します。
この手順により、in.rdisc がリブート時に開始しなくなります。
起動シーケンスの初期にルーティングが起こらないようにし、セキュリティの脆弱性が軽減されます。
# touch /etc/notrouter |
/etc/hostname.ip.tun0 ファイルを編集して次の行を追加します。
system1-taddr system2-taddr tsrc system1-addr \ tdst system2-addr encr_algs des encr_auth_algs md5 up |
/etc/rc3.d/S99vpn_setup ファイルを作成して、次の行を入力します。
ndd -set /dev/ip le1:ip_forwarding 1 ndd -set /dev/ip ip.tun0:ip_forwarding 1 ifconfig le0 private in.routed |
システムごとに、次のコマンドを入力してルーティングプロトコルを実行します。
# in.routed |
暗号システムの不正侵入者の時間的な余裕をなくすため、手順 5 で作成するセキュリティアソシエーションは定期的に新しいセキュリティアソシエーションに変更します。現在のセキュリティアソシエーションを変更するには、次の手順を実行します。IPv4 ネットワークを実行している場合、IKE モジュールでセキュリティアソシエーションの変更が管理されます。
この手順では、現在のセキュリティアソシエーションを変更します。暗号システムの不正侵入者の時間的な余裕をなくすためにこの操作を定期的に行います。
システムコンソールからスーパーユーザーになります。
リモートログインすると、セキュリティ上重要なトラフィックが盗聴される恐れがあります。何らかの方法でリモートログインを保護していても、システム全体のセキュリティがリモートログインセッションレベルに低下します。
システムごとに、ipseckey コマンドモードで次のコマンドを入力して、現在のセキュリティアソシエーションをフラッシュします。
# ipseckey > flush > |
次のコマンドを入力して、出力パケットに新しいセキュリティアソシエーションを設定します。
> add esp spi new-random-number src local-system dst remote-system \ auth_alg the_algorithm-name encr_alg the_algorithm-name \ authkey random-hex-string-of-algorithm-specified-length \ encrkey random-hex-string-of-algorithm-specified-length |
Return キーを押します。
コマンドが実行され、ipseckey コマンドモードプロンプトが再表示されます。
次のコマンドを入力して、入力パケットに新しいセキュリティアソシエーションを設定します。
> add esp spi new-random-number src remote-system dst local-system \ auth_alg the_algorithm-name encr_alg the_algorithm-name \ authkey random-hex-string-of-algorithm-specified-length \ encrkey random-hex-string-of-algorithm-specified-length |
キーと SPI は、セキュリティアソシエーションごとに変更できますが、同じにしてはいけません。
Ctrl-D を押すか、 quit を入力してこのモードを終了します。
次の例では、partym と enigma のシステムでキーを更新します。そのトラフィックは2 つのシステム間のトラフィックを保護でセキュリティ保護されています。 両方のシステムでは、AH に SHA1 アルゴリズムを使用し、IPv6 アドレスを使用しているものとします。
現在のキーをフラッシュします。
両方のシステムで ipseckeys ファイルを編集して、既存の SPI と authkey の値を変更します。
次のように、partym で ipseckeys ファイルを編集します。
# for inbound packets add ah spi 0x55142 dst partym authalg sha1 \ authkey 012345678921001234abcdeffedcba9876543210 # for outbound packets add ah spi 0x235211 dst enigma authalg sha1 \ authkey 21001234abcdef98765432100123456789fedcba |
次のように、enigma で ipseckeys ファイルを編集します。
# for inbound packets add ah spi 0x235235 dst enigma authalg sha1 \ authkey 123456780123456789abcdeffedcba9876543210 # for outbound packets add ah spi 0x123456 dst partym authalg sha1 \ authkey abcdef98765432100123456789fed12345678bac |
そのラッチされたソケットが新しいキーを使用していることを確認するには、両方のシステムをリブートします。 ブート時に ipseckeys ファイルが自動的に読み込まれます。
# /usr/sbin/reboot |
テストする場合には、各システムをリブートしないで新しいキーをセキュリティデータベースに配置できます。
# ipseckey -f /etc/inet/secret/ipseckeys |