プロキシ自動設定ファイル(PACファイル)とは
プロキシ自動設定(PAC)ファイルは、Webブラウザなどの
ユーザーエージェントが、特定のURLにアクセスする際に最適な
プロキシサーバーを自動的に選択するための設定ファイルです。PACファイルには
JavaScriptで記述された `FindProxyForURL(url, host)` 関数が含まれており、この関数がURLやホスト名に基づいて
プロキシサーバーを決定します。
PACファイルの仕組み
PACファイルは、ブラウザがWebサイトにアクセスする前に、そのURLに最適な
プロキシサーバーを判断するために使用されます。`FindProxyForURL` 関数は、与えられたURLとホスト名に基づいて、
プロキシサーバーのアドレス、ポート番号、または直接接続の指示を含む文字列を返します。複数の
プロキシを設定することで、特定の
プロキシが利用できない場合に別の
プロキシに切り替えるフォールバック機能も実現できます。
PACファイルの取得方法
ブラウザは、PACファイルのURLを手動で設定するか、
Web Proxy Auto-Discovery Protocol(WPAD)を使用して自動的に検出します。WPADは、DHCPやDNSを用いてPACファイルの場所を特定するプロトコルです。
現代のWebブラウザでは、
プロキシ設定を自動化するための複数のレベルが実装されています。
1.
自動プロキシ選択: 全てのURLに対して、単一の
プロキシサーバーのホスト名とポート番号を指定します。この設定では、特定のドメイン(例えば、localhost)に対しては
プロキシを使用しないように設定することも可能です。
2.
プロキシ自動設定(PAC): 各URLに対して適切な
プロキシを決定するために、
JavaScript関数を記述したPACファイルのURLを指定します。この方法は、複数の
プロキシ設定が必要な場合や、複雑なネットワーク環境で有効です。
3.
Web Proxy Auto-Discovery Protocol(WPAD): DHCPおよびDNSを通じて、ブラウザにPACファイルの場所を自動的に検出させます。
PACファイルの詳細
PACファイルの構造
PACファイルは、Netscape Navigator 2.0で最初に導入され、少なくとも `FindProxyForURL(url, host)` 関数を定義した
テキストファイルです。慣例として、ファイル名は `proxy.pac` または `wpad.dat` とされます。PACファイルはHTTPサーバーで公開され、ブラウザの
プロキシ設定にURLを入力するか、WPADプロトコルを通じて利用されます。
MIMEタイプ
PACファイルのMIMEタイプは `application/x-ns-proxy-autoconfig` または `application/x-javascript-config` であることが推奨されますが、多くのクライアントはMIMEタイプに関係なくスクリプトを処理します。
PACファイルの例
以下は、シンプルなPACファイルの例です。
javascript
function FindProxyForURL(url, host) {
return "PROXY proxy.example.com:8080; DIRECT";
}
この例では、すべてのアクセスを `proxy.example.com:8080` の
プロキシ経由で行い、
プロキシが応答しない場合は直接接続を試みます。
より複雑な例
より複雑なPACファイルの例として、特定のドメインには
プロキシを使い、それ以外は直接接続するといった設定も可能です。
javascript
function FindProxyForURL(url, host) {
if (shExpMatch(host, "
.example.com")) {
return "PROXY proxy.example.com:8080";
}
return "DIRECT";
}
この例では、`.example.com` に一致するホストへのアクセスは `proxy.example.com:8080` を経由し、それ以外は直接接続します。
PACファイルの制約
文字エンコーディング
多くのブラウザは、システムのデフォルトの
文字コードでエンコードされたPACファイルのみをサポートし、
UTF-8などの
Unicodeエンコードはサポートしていません。
DNS解決
`dnsResolve` 関数はDNSルックアップを実行しますが、DNSサーバーが応答しない場合、ブラウザが長時間ブロックされることがあります。
Internet Explorer 5.5以上では、ドメイン名による
プロキシ設定の結果をキャッシュしますが、これによりPAC標準の柔軟性が制限される可能性があります。
`isInNet` 関数
`isInNet` 関数では、ホストのドメイン名ではなく
IPアドレスを使用することが推奨されます。
PACファイルが利用できない場合、直接接続に
フェイルオーバーするのが一般的です。
`myIpAddress` 関数
`myIpAddress` 関数は、不正確な結果を返すことがあり、複数のIPv4アドレスや
IPv6アドレスを持つ環境では結果が未定義となります。
セキュリティ上の注意点
2013年、PACファイルを利用したセキュリティ上の脅威が指摘されました。攻撃者はPACファイルを利用して、ブラウザの通信を悪意のあるサーバーに誘導する可能性があります。PACファイルは信頼できるソースからのみ取得し、適切に管理する必要があります。
その他の制約
JavaScriptエンジンのローカルマシンに対する制約も考慮する必要があります。
発展的な利用
より高度なPACファイルでは、
プロキシの負荷分散、
フェイルオーバー、
ブラックリスト/
ホワイトリストの作成も可能です。複数の
プロキシサーバーを返すこともできます。
発展学習
詳しい情報は、以下の記事を参照してください。
Jonathan de Boyne Pollard (2004年). “Automatic proxy HTTP server configuration in web browsers”. Frequently Given Answers.
参考文献
“Using the Client Autoconfiguration File”. Netscape Proxy Server Administrator's Guide: Chapter 11 (1998年2月25日).
“Chapter 26 - Using Automatic Configuration, Automatic Proxy, and Automatic Detection”. Microsoft TechNet.
“Proxy Auto Config for Firefox (PAC). Fully working examples including anti-ad and anti-adult filter rules” (2012年5月12日).