IEの自動Proxy設定とセキュリティ・ゾーン:自動構成ファイルにおける“DIRECT”の意味を理解する(1/2 ページ)
IEの自動構成ファイル中でDIRECTを使うと、外部のインターネット・サイトまでもが、デフォルトでは「イントラネット・ゾーン」になってしまう危険性がある。これを防ぐ方法を解説する。
■Summary
- IEには、JavaScriptを使ってProxyサーバの構成を自動的に行うという自動構成ファイル機能がある。
- 自動構成ファイル中でreturn "DIRECT"を使うと、インターネットをアクセスしているにもかかわらず、IEのセキュリティ・ゾーンがイントラネット・ゾーンになってしまう可能性がある。これはIE4以降のすべてで起こる。
- これを防ぐには[イントラネット]のセキュリティ設定で[プロキシ サーバーを使用しないサイトをすべて含める]のチェック・ボックスをオフにする。
Internet Explorer(以下IEと略記)には、アクセスする先のサイトに応じてIEのセキュリティ設定などを切り替える、「セキュリティ ゾーン」と呼ばれる機能がある。ゾーンごとに、Cookieの扱いやJavaScript、ActiveXコントロールなどを許可するかどうかを決めることにより、例えばインターネットへアクセスする場合はセキュリティを強固にしておき、イントラネットのサーバへアクセスする場合はActiveXなどの実行を許可して、社内アプリケーションを実行できるようにする、というふうに使い分ける。
IEのゾーンには「インターネット ゾーン」「イントラネット ゾーン」「信頼済みサイト」「制限付きサイト」の全部で4つがある。それぞれのゾーンにおける機能の制約やCookieなどの扱いについては、別項の「IE 6のプライバシ管理機能―7.既存のCookieの削除」や「TIPS―IEのセキュリティ設定を変更してセキュリティ機能を強化する」などが詳しいので参考にしていただきたい。4つのゾーンのうち「信頼済みサイト」と「制限付きサイト」はユーザー自身が自分でサイトを登録するものであり、デフォルトではここに属するサイトはない。残りの2つが実際によく使われるゾーンである。
ユーザーがアクセスするサイトが「インターネット ゾーン」と「イントラネット ゾーン」のどちらに属するのかは、IE自身が判断して、自動的に使い分けることになっている。「イントラネット」とはファイアウォールの内側にある社内ネットワークのゾーンであり、具体的にはWindowsネットワークのUNCでアクセス可能な共有フォルダやファイル(例「\\computername\folder」)、インターネットのドメイン名(FQDN名)ではなく、ピリオド(「.」)を含まないURL(例「http://computername/」)で参照可能なホストなどが含まれる。そしてこれ以外のすべてのサイトが「インターネット ゾーン」に含まれることになる。ただしユーザーが明示的に特定のサイトを「イントラネット ゾーン」に追加することも可能であり、社内に複数のドメインがあるような場合に利用することになる。
ユーザーのIEが、現在どのゾーンで動作しているかは、IEのステータス・バーの右端に表示されているので、簡単に確認することができる。インターネット上のサイトを閲覧している場合は、「インターネット」になっていることを確認しておこう。もしこれが「イントラネット」になっていたりすると、(デフォルトのセキュリティ設定では)いくらかセキュリティ的に望ましくない状態になっている可能性があるからだ。
IEのゾーン情報
IEが現在どのゾーンで動作しているかは、ステータス・バーの右端に常に表示されている。
(1)ここにゾーン情報が表示される。インターネットをアクセスしている場合はこのように「インターネット」となる(インターネット・ゾーンのサイトであることを意味している)。
Proxyサーバ情報の自動設定
話は変わるが、筆者の所属する会社ではインターネットにアクセスする場合、通常はWebのProxyサーバを経由するようにしている。そのため各クライアントのIEに対しては、Proxyサーバを使うように設定が行われている。具体的には「TIPS―WebブラウザのProxy設定を行うための4つの方法(WPADのススメ)」で述べた方法のうち、以下のようなJavaScriptファイル(IEでは「自動構成スクリプト」と呼ぶ)を使って、自動的にProxyサーバへ要求を振り向けるように設定している。WPADを使えば、デフォルト状態のIEでもそのまま利用できるので管理の手間がかからなくてよい。
function FindProxyForURL(url,host)
{ if(isPlainHostName(host)||
isInNet(host,"192.168.0.0","255.255.0.0")) return "DIRECT";
else return "PROXY 192.168.0.10:8080; DIRECT";
}
これは、アクセスするホスト名が“.(ピリオド)”を含まない単純な名前の場合や、ローカル・ネットワークの場合には直接アクセスし、そうでないインターネット上のサイトの場合は192.168.0.10のProxyサーバを経由する、という指定である。このようなスクリプトを記述したテキスト・ファイル(ファイル名はproxy.pacなどが一般的)をイントラネットのWebサーバ上に置き、クライアントのProxy設定欄には「http://192.168.0.10/proxy.pac」というふうに記述しておけばよい。
このProxy設定のためのスクリプトは、もともとはNetscape Navigatorのために作られたものである。具体的なスクリプトの書き方や関数などの意味については、「http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html」や「Internet Explorer管理者キット(IEAK)」に付属のドキュメントなどが詳しいので参照していただきたい。簡単に説明しておくと、このFindProxyForURLという関数は、Proxyサーバの名前やIPアドレス、ポート番号などを返すための関数である。引数には、アクセス先のURLと、URL中のホスト名の部分が渡される。JavaScriptで記述することにより、ネットワーク管理者は自社の構成に応じた柔軟なProxyの設定を行うことができる。この例では、単純なホスト名だけか192.168.0.0/16というネットワークの場合はProxyサーバを介さずアクセスし(「return "DIRECT"」)、そうでなければ192.168.0.10のProxyサーバを使え、という意味である。
ところで最近弊社のProxyサーバマシンの調子が悪くなったので、一時的にProxyサーバを外し、代わりにNAT/NAPT経由で直接インターネットにアクセスできるようにネットワーク構成を変更した。このようなインターネットの利用形態は家庭だけでなく、SOHOや小規模な会社でも珍しくないだろう。最近ではブロードバンド回線の普及により、Proxyサーバでコンテンツをキャッシュしなくても、各クライアントが直接インターネットへアクセスしても十分な帯域が得られるからだ。
この変更に伴い、先のproxy.pacファイルの内容も一時的に変更して、Proxyサーバをバイパスするようにした。サーバが復旧すればすぐに内容を戻す予定なので、ファイルそのものを削除するのではなく(削除するとファイルが見つからないというエラーなどが発生し、さらにトラブルになりそうだったから)、ファイルの内容を次のような非常に簡単なものに変更した。
function FindProxyForURL(url,host)
{ return "DIRECT"; }
すべてのProxyサーバをバイパスして、直接相手のサーバへ接続させるための設定。return "DIRECT"は、(Proxy経由ではなく)直接接続せよという意味。
このスクリプトでは、単に“DIRECT”という文字列を返しているだけである。これによりクライアントからのWebアクセス要求は、Proxyサーバではなく、直接デフォルト・ゲートウェイへ送られることになるはずである。
気が付けば世界中が「イントラネット」に……
以上のように変更したproxy.pacファイルであるが、当然のごとく何の問題もなく動作しているようである。WebブラウザからのHTTPプロトコル・パケットはすべてデフォルト・ゲートウェイへと向かい、途中でアドレス/ポート変換が行われて、インターネットをアクセスすることができる。
だがあるとき、ふとブラウザのステータス・バーを見ると、ゾーン情報が「インターネット」ではなく「イントラネット」になっていることに気が付いた。あれっと思っていろいろ試してみた結果、すべてのサイトがイントラネット・ゾーンとして扱われていることが分かった。原因はともかく、このような状態はセキュリティ的には非常にまずいであろう。ゾーン分けによるセキュリティ設定がまったく機能しないのであるから。
イントラネット・ゾーンとしてアクセスされている例
本来ならばインターネット・ゾーンにならなければならないはずなのに、なぜかイントラネット・ゾーンとなっている。
(1)アクセス先のURL。これは本来インターネット・ゾーンとなるべきサイトである。
(2)イントラネット・ゾーンとしてアクセスしている。
このような事態が発生する原因として考えられるのは、やはり変更したばかりのproxy.pacファイルであろう。さらにいくらか調査した結果、この「return "DIRECT"」を含むスクリプトを使うと、IEは(デフォルトでは)すべてのサイトがイントラネット・ゾーンになってしまうことが分かった。このファイルを使わないようにIEのProxyを設定すると(Proxyの設定画面をすべて空白のままにする)、正しくゾーンが機能するが、このスクリプトを読み込むようにすると、イントラネット・ゾーンになってしまうのだ。
さらに調べると、LAN上のほかのクライアントでも、すべてのサイトがイントラネット・ゾーンとして扱われているマシンが何台か見つかった。ただしすべてのクライアントがそうなっているわけではなく、正しくインターネット・ゾーンとイントラネット・ゾーンが(期待された通りに)区別されているマシンも存在するようだ。だがこれらも、やはり同じ理由によるものであった。つまり、proxy.pacファイルを自動的に読み込むように設定している場合は(デフォルトでは自動的に設定する状態になっている)、このような症状が発生していたのである。だがこの自動設定を行うとIEの起動時間が少し長くなるので(スクリプト・ファイルを探すため)、スキルのあるユーザーなどではわざと使わないようにしている場合もある。そういうユーザーの場合は、このような症状が出ていなかった、というわけである。
症状の再現方法
詳細な原因と対策は後述するとして、ここでは実際にこの症状を再現させる方法を記しておこう。
1.DIRECTのみを返すproxy.pacファイルを用意する
まず、次のような内容を持つテキスト・ファイルを用意して、例えばproxy.pacというファイル名で保存する。
function FindProxyForURL(url,host)
{ return "DIRECT"; }
2.proxy.pacをイントラネットのWebサーバ上に配置する
proxy.pacファイルはWebサーバから自動ダウンロードさせるものなので、このファイルをどこか適当なWebサーバ上に配置し、自由にダウンロードできる状態にしておく。
3.新しいユーザー・アカウントを用意してログオンする
この症状はIE4以降ならどれでも再現するが、ユーザーの設定によっては症状が発生しないこともある。そこでWindows NT/2000/XP上で新しいユーザー・アカウントを作成し、デフォルト設定のままでIEが起動するように準備しておく。
4.proxy.pacファイルを読み込むように設定する
IEの[ツール]メニューから[インターネット オプション]を選び、[接続]タブにある[LANの設定]で、先ほど用意したproxy.pacファイルを読み込むようにセットする。[設定を自動的に検出する]を選んでもよいし(WPADの設定を行っておくこと。詳細は先の「TIPS―WebブラウザのProxy設定を行うための4つの方法(WPADのススメ)」参照)、[自動構成スクリプト]で明示的に指定してもよい。
自動構成スクリプトの指示方法
自動構成スクリプト(ここではproxy.pacとしている)をIEに読み込ませるための方法はいくつかある。どの方法を使っても結果は同じである。
(1)WPADメカニズムによって自動的に読み込ませるためには、これをチェックする。これはIEのデフォルト状態。
(2)proxy.pacファイルを置いた場所(URL)を明示的に指定するには、こちらを使う。
5.IEを起動する
以上で準備は完了である。IEを再起動して実際にいろいろなサイトにアクセスしてみると、「イントラネット ゾーン」になっていることが分かるであろう。4の設定を有効/無効にすることによって、正しく「インターネット ゾーン」になることも確認しておく。
Copyright© Digital Advantage Corp. All Rights Reserved.