プロキシ自動設定

プロキシ自動設定ファイル(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日).

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。