プロキシサーバ

読み:ぷろきしさーば / 英語表記:proxy server

利用者の端末の代わりに、Webサーバなどに接続して通信を中継するサーバ。通信を一か所にまとめることで、アクセスの制限、ログの記録、利用者認証、キャッシュなどを行う。

イマシルちゃんの解説

会社の端末から外部のWebサイトへ接続するとき、通信をまとめて管理したい場合があるんだ。
プロキシサーバは、利用者側に置いてWebサーバとの通信を取り次ぐサーバだよ。
端末から要求を受け取ると、接続先へ要求を送り、返ってきた応答を端末へ届けるの。
その途中で接続を許すか判断したり、アクセスの履歴を残したりできるんだ。
端末ごとに任せず共通のルールで管理できるから、組織の方針に合わない通信を制限したり、問題が起きたときに利用状況を調べたりしやすくなるよ。

より深い解説

定義

プロキシサーバ(フォワードプロキシ)は、組織の内部の端末からインターネット上のWebサーバへの通信を、端末に代わって中継するサーバである。端末はプロキシサーバに接続を要求し、プロキシサーバがWebサーバに接続して、結果を端末に返す。Webサーバから見ると、通信の相手はプロキシサーバになる。

主な機能と目的

機能目的
アクセス制御(URLフィルタリング)登録したFQDNやIPアドレス宛ての通信をブロックし、業務に不要なサイトや危険なサイトへのアクセスを防ぐ
ログの記録誰が、いつ、どのサイトにアクセスしたかの履歴を残す
利用者認証認証サーバと連携して、利用者を確認してから通信させる
キャッシュ一度取得したコンテンツを保存し、次の要求には保存したものを返して、通信量を減らす
出口の一本化インターネットへの通信をプロキシサーバ経由に限定し、端末からの直接の通信をファイアウォールで遮断できる

端末の設定

方法内容
手動設定ブラウザやOSに、プロキシサーバのアドレスとポート番号(例:8080)を設定する
PACファイル宛先に応じて、プロキシサーバを経由するか直接接続するかを判断するスクリプトを配布する
WPADPACファイルの場所を、DHCPやDNSで自動的に見つける
透過型プロキシ端末には設定せず、ネットワーク機器で通信をプロキシサーバに転送する

HTTPSの中継

明示的に設定したHTTPプロキシを経由してHTTPSへ接続する場合、端末はCONNECTメソッドでトンネルの作成を要求する。HTTP/1.1の例では、要求先にホスト名とポート番号を書く。

CONNECT secure.example.net:443 HTTP/1.1
Host: secure.example.net:443

端末がまず接続する相手はプロキシである。上の443はプロキシに接続してもらうWebサーバ側のポート番号であり、端末からプロキシへ接続する待受ポートとは異なる。

接続区間宛先の例
端末 → プロキシproxy.example.netのTCP 8080番
プロキシ → Webサーバsecure.example.netのTCP 443番

プロキシでは、CONNECTで要求できる接続先ポートを443番だけに限定するなどのアクセス制御を行える。この制限はトンネルの出口側に対するものであり、プロキシ自身の待受ポートを443番へ変更するという意味ではない。

プロキシが接続を確立して成功の応答を返すと、その後のデータを両方向に中継する。端末はこのトンネルを通してWebサーバとTLSハンドシェイクを行い、HTTPSの要求と応答を運ぶ。プロキシは接続先ホスト名や通信量などを把握できるが、単に中継する方式では、暗号化されたURLのパスや本文を読めない。

内容を検査するTLSインスペクションでは、プロキシが端末とのTLSを終端し、Webサーバへ別のTLS接続を作る。端末が検査用の認証局を信頼する設定などが必要であり、CONNECTを使うだけで自動的に復号できるわけではない。

認証した利用者とアクセス履歴を対応付ける

プロキシ認証とログを連携させると、接続元IPアドレスに加えて利用者IDを記録できる。DHCPでアドレスが変わる環境や複数人が共用する端末では、IPアドレスだけで個人を特定できないためである。利用者ID、時刻、接続先、許可・拒否の結果などを対応付けて保存する。

ただし、記録できる情報は中継方法によって異なる。平文のHTTP要求やTLSを終端した通信ではURLのパスも確認できるが、HTTPSをトンネルで運ぶだけなら、通常はCONNECTの接続先ホスト名とポート番号までである。ログに暗号化された本文やURLの全文まで記録できると考えない。

中継後に相手が見るアドレス

HTTPの中継では、端末からプロキシへの接続と、プロキシから外部のWebサーバへの接続を分けて考える。例えば端末が10.20.0.25、プロキシが10.20.0.10なら、外部へ接続するのは後者である。プロキシを経由することで、端末のIPアドレスがそのまま外部への接続元になるわけではない。

さらに出口のファイアウォールなどでNAPTを行う場合、外部のWebサーバがIPパケットで受け取る送信元IPアドレスは、出口で変換された値になる。SaaSの利用制限へ登録する値は、外部から実際に見える値を確認する。プロキシが同じでも出口を変更すれば値が変わる場合があり、変換と既存接続への影響はNAPTの記事で詳しく扱う。

複数の中継先を使えるようにする

プロキシを複数台用意しても、端末の設定が停止した一台を指し続ければ利用を継続できない。DNSラウンドロビンで同じ名前に複数のアドレスを対応させる方法や、PACファイルで複数の候補を返す方法がある。前者は名前解決とキャッシュ、後者は対応アプリケーションの選択・再試行の動作を確認する。

監視対象もプロキシ機能に合わせる。OSがpingへ応答していても、中継するプロセスが停止していればWeb閲覧はできない。待受けへの接続や実際の中継処理を試し、どこまで正常と判断できるかを区別する。確認方法ごとの範囲は死活監視の記事で扱う。

リバースプロキシとの違い

フォワードプロキシリバースプロキシ
置く場所利用者(クライアント)の側サーバの側
中継する通信内部の端末 → 外部のサーバ外部の端末 → 内部のサーバ
主な目的アクセス制御、ログ、キャッシュ内部のサーバの保護、負荷分散、TLSの終端

参考資料

実際の試験ではここに出る!全9問

ネットワークスペシャリスト

午後Ⅰ
午後Ⅱ
午前Ⅱ

この用語が出てくる記事

↑