別記事「プロキシサーバーとは?VPNとの違いを非エンジニア向けにわかりやすく解説」や「企業プロキシ環境でAWS CLIがSSLエラーになる理由と対処法」で簡単に触れた「PACファイル」について、この記事ではその仕組みと、見落とされがちなセキュリティ上の注意点まで踏み込んで解説します。

PACファイルとは何か

PACファイル(Proxy Auto-Configuration file)とは、「どの通信をどのプロキシサーバー経由にするか」を自動的に判定させるための設定ファイルです。

拡張子は.pac、中身はFindProxyForURL(url, host)という関数を含んだJavaScriptのテキストファイルです。

ブラウザやOSは、Webサイトにアクセスするたびにこの関数を呼び出し、URLとホスト名を渡します。

関数が返す値(DIRECT=直接接続、PROXY プロキシのアドレス:ポート番号=指定したプロキシ経由、SOCKS ...等)に従って、通信経路が自動的に決まる仕組みです。

固定のプロキシアドレスを1つだけ設定する方法と違い、「社内システムへのアクセスは直接接続、外部サイトへのアクセスはプロキシ経由」といった、アクセス先ごとの振り分けを柔軟に自動化できる点がPACファイルの特徴です。

PACファイルの中身:主な関数と書き方の例

PACファイルでは、判定のために用意された専用の関数を組み合わせて記述します。代表的なものは次のとおりです。

  • isPlainHostName(host):ホスト名にドット(.)が含まれないか(社内サーバー名などの簡易判定に使う)
  • dnsDomainIs(host, domain):ホストが特定のドメインに属しているか
  • shExpMatch(str, pattern):シェル形式のワイルドカード(*等)でパターンマッチさせる
  • isInNet(host, pattern, mask):ホストが特定のIPサブネットに含まれるか(内部でDNS解決が発生する点に注意)
  • myIpAddress():自端末のIPアドレスを取得する

これらを組み合わせた簡単な例は次のようになります。

function FindProxyForURL(url, host) {
  // 社内ドメインは直接接続
  if (dnsDomainIs(host, ".example.co.jp")) {
    return "DIRECT";
  }
  // 特定のサイトはプロキシを迂回
  if (shExpMatch(host, "*.microsoft.com")) {
    return "DIRECT";
  }
  // それ以外は社内プロキシ経由
  return "PROXY proxy.example.co.jp:8080; DIRECT";
}

最後の行の; DIRECTは、指定したプロキシに接続できなかった場合に直接接続へフォールバックする設定です。この一文があるかないかで、プロキシサーバーの障害時にネットワークが全社的に止まるかどうかが変わるため、実務上重要な書き方です。

WPAD(Web Proxy Auto-Discovery Protocol)とPACファイルの関係

PACファイルは、URLを直接ブラウザの設定に入力して使うこともできますが、企業ネットワークでは「WPAD(Web Proxy Auto-Discovery Protocol)」という仕組みで、端末側がPACファイルの場所を自動的に見つけに行く運用がよく使われます。WPADには大きく2つの方式があります。

  • DHCPベース:DHCPサーバーが配布するオプション252に、PACファイルのURLを含めておく方式。優先度が高い
  • DNSベース:端末がwpad.(自ドメイン)という名前を、ドメインの階層を1段階ずつ上りながらDNSに問い合わせ、応答が返ってきた場所からPACファイルを取得する方式

どちらの方式も、端末側で「自動的にプロキシ設定を検出する」というチェックボックスをオンにしておくだけで機能する手軽さがあり、多くの企業で採用されています。2つの方式を比較すると、次のような違いがあります。

方式 仕組み 優先度 設定変更の反映
DHCPベース DHCPサーバーがオプション252でPACファイルのURLを配布 高い(DNSベースより優先される) DHCPサーバー側の設定変更が必要
DNSベース 端末が「wpad.(自ドメイン)」をドメイン階層順に問い合わせる DHCPベースが見つからない場合に使われる 社内DNSレコードの追加・変更が必要

見落とされがちなセキュリティリスク:WPADの名前衝突問題

PACファイルやWPADを解説する記事の多くは「便利さ」の説明で終わっていますが、実務上見過ごせないセキュリティリスクがあります。JPCERT/CCとJVNは2016年5月24日付で「WPADの名前衝突問題」(JVNTA#91048063)を公開しました。これは、社内ドメイン名の付け方や新gTLD(新しいトップレベルドメイン)の普及状況によっては、本来は社内ネットワーク内だけで解決されるはずのwpad.(社内ドメイン)という名前解決のクエリが、インターネット上に漏れてしまうことがあるという問題です。もし攻撃者がそのドメインを先回りして取得し、悪意のあるPACファイルを用意していた場合、社内の通信の一部を攻撃者のサーバー経由に誘導されてしまう(中間者攻撃が成立してしまう)リスクがあります。Microsoftも2016年6月14日、WPADに関連する権限昇格の脆弱性(MS16-077)を修正しています。

対策としては、WPADを使わずPACファイルのURLを固定で配布・指定する、社内DNSで想定外のwpad問い合わせに正しく応答させる、といった方法が挙げられます。自社が今もWPADに依存した設定を使っているかどうかは、ネットワーク担当者に一度確認しておく価値があります。

企業でのPACファイルの配布方法

企業内でPACファイルを配布・管理する代表的な方法には、次のようなものがあります。

  • グループポリシー(GPO)による配布:Windowsのグループポリシーで、ブラウザやOSのプロキシ自動構成スクリプトの場所を全端末に一括で強制設定する
  • 社内Webサーバーでのホスティング:PACファイルを社内のWebサーバーに置き、そのURLを各端末に設定させる。PACファイルの内容を更新すれば、原則として全端末に反映される
  • WPAD(DHCPオプション252またはDNS):前述のとおり、端末側の自動検出に任せる方法

Windowsでの手動設定方法(簡易)

個別の端末で手動設定する場合は、「インターネットオプション」の「接続」タブ→「LANの設定」を開き、「自動構成スクリプトを使用する」にチェックを入れて、PACファイルのURLを入力します。この設定画面については、別記事「プロキシサーバーとは?」で詳しく紹介していますので、あわせてご覧ください。

よくあるトラブルと対処法

  • PACファイルを更新したのに反映されない:ブラウザやOSがPACファイルの内容をキャッシュしていることが原因のことが多く、ブラウザの再起動や、Windowsであればnetsh winhttp reset proxyコマンドの実行、Chromeであればchrome://net-internals/#proxyから再取得を試みることで解決する場合があります
  • PACファイルの構文ミスで通信が全断するFindProxyForURL関数内の条件分岐にミスがあると、意図せず全ての通信がプロキシに送られたり、ブロックされたりすることがあります。変更時は一部端末での検証を挟むことが望ましいです
  • PACファイル取得のタイムアウトでブラウジングが遅延する:PACファイルを配置したWebサーバーが不安定だと、端末側が起動時・アクセス時にPACファイルの取得を待ってしまい、体感速度が遅くなることがあります

IT担当者が確認しておきたいチェックリスト

自社のPAC・WPAD運用を見直す際は、次の点を順に確認するとよいでしょう。

  1. 自社の端末がWPAD(自動検出)とPACファイルの直接指定、どちらの方式を使っているかを確認する
  2. WPADを使っている場合、社内ドメイン名が新gTLDと重複する可能性がないか、ネットワーク担当者やセキュリティベンダーに確認する
  3. PACファイルのFindProxyForURL関数の末尾に、プロキシ障害時のフォールバック(DIRECTまたは代替プロキシ)が設定されているかを確認する
  4. PACファイルの配布元(社内Webサーバー等)が、単一障害点になっていないかを確認する

よくある質問

Q. PACファイルとプロキシサーバーの固定設定、どちらが良いのですか?

社内のアクセス先が単純(すべて同じプロキシ経由でよい)であれば固定設定でも十分です。一方、社内システムと外部サイトで経路を分けたい、拠点ごとに使うプロキシを変えたいといった場合は、PACファイルによる自動判定が有効です。

Q. 自分のPCがPACファイルを使っているかはどこで確認できますか?

Windowsであれば、「インターネットオプション」の「接続」タブ→「LANの設定」を開くと、「自動構成スクリプトを使用する」にチェックが入っているか、そこにURLが設定されているかで確認できます。

Q. スマートフォンでもPACファイルは使われますか?

iOSやAndroidにもプロキシの自動構成設定に相当する項目はありますが、企業ネットワークでの具体的な普及状況や挙動の細部については、今回の調査では一次情報を確認できませんでした。導入を検討する場合は、端末のOSバージョンごとの仕様をあわせて確認することをおすすめします。

参考にした主な調査・資料

まとめ

PACファイルは、URLやホスト名に応じてプロキシ経由か直接接続かを自動的に振り分ける仕組みで、多くの企業ネットワークで使われています。便利な半面、WPADによる自動検出には「名前衝突」という見落とされがちなセキュリティリスクが伴うことも知っておく必要があります。自社のプロキシ設定がPACファイル・WPADに依存しているかどうかを一度確認し、必要に応じてネットワーク担当者やセキュリティ担当のベンダーに相談することをおすすめします。