プロキシとは ― 仕組みとリバースプロキシとの違い
プロキシとは、
プロキシとは、クライアントに代わって通信を中継する仕組み
プロキシ(proxy)とは、クライアントとサーバの間に入り、クライアントに代わってHTTPなどの通信を中継する仕組みです。プロキシには、代理をする相手によって2つの種類があります。通信を出す側の代理をするのがフォワードプロキシで、通信を受ける側の代理をするのがリバースプロキシです。
どちらも代わりに通信する点は同じですが、置く場所と代理する相手が逆です。社内PCなどのクライアント側に置くフォワードプロキシは、キャッシュ・アクセス制御・ログ記録のために使います。自社のWebサーバ側に置くリバースプロキシは、負荷分散、暗号処理の代行(TLS終端)、WAFと組み合わせた防御のために使います。どちらの場合も、相手から見える送信元IPアドレスは、プロキシ自身のものになります。
プロキシの役割
プロキシがない場合、PCなどのクライアントはサーバと直接つながります。プロキシを間に置くと、クライアントはまずプロキシに要求を出し、プロキシがクライアントに代わってサーバに要求を出します。サーバからの応答も、いったんプロキシを経由してクライアントに届きます。
このようにプロキシは、直接つながるはずの通信を、クライアントとプロキシの間、プロキシとサーバの間の2つに分けます。これがプロキシの基本の動きです。どこで中継するかによって、フォワードプロキシとリバースプロキシに分かれます。
フォワードプロキシ
フォワードプロキシは、社内LANのようなクライアント側のネットワークに置き、社内PCからインターネットへ向かう通信の代理をします。単に「プロキシ」と言うと、この方式を指すことが多いです。
主な目的は次の4つです。
- キャッシュ:一度取得したWebページのデータをプロキシに一時保存し、次回のアクセスを速くします。
- アクセス制御:業務に関係のないサイトへのアクセスを制限します。
- ログ記録:誰がいつどのサイトにアクセスしたかを記録します。
- フィルタリング:ウイルスを含むコンテンツや危険なサイトを検知して遮断します。
社内のすべてのPCがフォワードプロキシを経由するように設定すれば、管理者はアクセス制御やログの記録を1か所で行えます。制限やログの設定を各PCに配る必要がないので、管理の手間が減ります。
リバースプロキシ
リバースプロキシは、自社のWebサーバの手前に置き、インターネットから自社サーバへ向かう通信の代理をします。通信の向きがフォワードプロキシと逆なので、英語で「逆」を意味するreverseの名前が付いています。
主な目的は次の4つです。
- 負荷分散:背後に複数のWebサーバを並べ、リクエストを振り分けて1台に負荷が集中しないようにします。
- TLS終端:外部とのTLSによる暗号化のやり取りをリバースプロキシでまとめて行い、背後のサーバの負担を減らします。
- WAFとの組み合わせ:リバースプロキシが、Webアプリへの攻撃を防ぐWAFを兼ねるか、WAFと組み合わせて使います。SQLインジェクションなどの攻撃から、背後のサーバを守ります。攻撃の仕組みはSQLインジェクションとXSSの記事で説明しています。
- キャッシュ:頻繁に変わらないコンテンツをリバースプロキシに保存し、背後のサーバへの問い合わせを減らします。
負荷分散を専門に受け持つ装置をロードバランサと呼びます。リバースプロキシと同じく、サーバの手前で要求を受けて振り分けます。振り分け方式や、止まったサーバを外すヘルスチェックは、ロードバランサの記事で説明しています。
利用者から見えるのは、203.0.113.50 のような1つのアドレスだけです。その裏に何台のサーバがあるかも、各サーバの実際のIPアドレスも分かりません。
リバースプロキシは、インターネット側と自社側で別のIPアドレスを持ちます。背後のサーバへは、自社側のアドレスで接続し直します。
世界中に配置したキャッシュ用のサーバ群を経由させる仕組みを、CDN(Content Delivery Network)と呼びます。CDNは、リバースプロキシの考え方を大規模にしたものと言えます。キャッシュの有効期限や、近いサーバへの振り分け方は、CDNの記事で説明しています。
フォワードとリバースの違い
フォワードプロキシとリバースプロキシは、代理として通信を中継する点は同じですが、置く場所と誰の代理をするかが逆です。
| フォワードプロキシ | リバースプロキシ | |
|---|---|---|
| 置く場所 | クライアント側(社内LANとインターネットの境目) | サーバ側(インターネットと自社サーバの境目) |
| 誰の代理か | クライアントの代理 | サーバの代理 |
| 相手から見える送信元 | プロキシのIPアドレス(クライアントのIPアドレスは隠れる) | プロキシのIPアドレス(外側と内側で別。利用者から背後のサーバのIPは見えず、背後のサーバから利用者本来のIPも見えない。実務ではX-Forwarded-Forヘッダで利用者のIPを伝える) |
| 主な目的 | キャッシュによる高速化、アクセス制御、ログ記録、フィルタリング | 負荷分散、TLS終端、WAFとの組み合わせによる防御、キャッシュ |
| 設定する側 | 通信を出す側(クライアント・組織の管理者) | 通信を受ける側(Webサーバの管理者) |
混同しやすいのは、どちらも「プロキシサーバ」と呼ばれ、要求をいったん受けて代わりに中継する動きも似ているためです。インターネットとの境界のどちら側に置かれているかで考えると区別しやすくなります。
動かして確かめる:送信元・宛先IPはどう変わるか
プロキシの有無や種類によって、各区間の送信元・宛先IPアドレスと、相手から見える送信元が変わります。次の図で切り替えて確かめられます。
- 区間1PC → 自宅ルータ送信元 192.168.10.25 / 宛先 203.0.113.50
- 区間2自宅ルータ → Webサーバ(example.com)送信元 198.51.100.5 / 宛先 203.0.113.50
Webサーバから見える送信元:198.51.100.5
この198.51.100.5は、PCの192.168.10.25を自宅ルータがNAPTで書き換えた後のアドレスです。通信は1つの接続のままで、アドレスだけが書き換わります。詳しくはNATの記事で説明しています。プロキシがなくても、PCのプライベートIPアドレスがそのまま外部に見えるわけではありません。
- 区間1PC → フォワードプロキシ送信元 192.168.10.25 / 宛先 192.0.2.10
- 区間2フォワードプロキシ → Webサーバ(example.com)送信元 192.0.2.10 / 宛先 203.0.113.50
Webサーバから見える送信元:192.0.2.10(フォワードプロキシ)
すべてのPCの通信がフォワードプロキシを通るので、管理者はそこで通信の中身を見て、アクセスの記録や制限をまとめて行えます。PCのアドレスが外から隠れることは、自宅や社内のNATでも起きているので、プロキシならではの利点ではありません。
- 区間1外部の利用者 → リバースプロキシ(外側)送信元 198.51.100.20 / 宛先 203.0.113.50
- 区間2リバースプロキシ(内側) → 背後のWebサーバ送信元 172.16.0.1 / 宛先 172.16.0.11
背後のWebサーバから見える送信元:172.16.0.1
172.16.0.1は、リバースプロキシの内側アドレスです。外部の利用者の198.51.100.20は見えません。実際には、利用者のアドレスをX-Forwarded-Forヘッダで渡すのが普通です。外部の利用者は、example.comの公開アドレス203.0.113.50宛に要求を出します。これは、リバースプロキシの外側アドレスにあたります。リバースプロキシは内側にも別のアドレスを持ち、そのアドレスで背後のWebサーバ172.16.0.11に接続し直します。
プロキシがあると、通信の区間が2つに分かれます。フォワードプロキシでは、Webサーバから見える送信元は常にプロキシ自身のIPアドレスで、社内PCのIPアドレスは見えません。
リバースプロキシでは、外部の利用者から見える宛先は常にリバースプロキシの公開アドレスで、背後のWebサーバのIPアドレスは見えません。背後のWebサーバから見ても、直接つながっている相手はリバースプロキシの内側のアドレス(上の例では 172.16.0.1)です。TCP接続の送信元として、外部の利用者のIPアドレスは見えません。
これでは利用者ごとのアクセス制御やログの記録ができず、実務では不便です。そこでリバースプロキシは、元の利用者のIPアドレスをX-Forwarded-Forヘッダに書き足して、背後のサーバに伝えます。
HTTPSの中身は見えない:CONNECTメソッド
HTTPSのWebサイトをフォワードプロキシ経由で見るとき、プロキシは通信の中身までは読めません。PCはプロキシに、「このサーバとの間にトンネルを開いてほしい」と要求します。この要求には、RFC 9110で定義されたHTTPのCONNECTメソッドを使います。
プロキシは、CONNECTで指定された宛先(サーバ名とポート番号)とのTCP接続を代理で確立し、PCに 200 Connection Established を返します。
ここから先のTLSハンドシェイクと暗号化されたやり取りは、プロキシを素通りします。プロキシは接続先のサーバ名までは分かりますが、暗号化されたリクエストやレスポンスの中身は読めません。
企業のセキュリティ製品には、暗号化された通信の中身まで検査するTLSインスペクションという仕組みもあります。プロキシは独自の証明書を発行してクライアントとサーバの間に入り、通信をいったん復号して検査したあと、暗号化し直します。これは通常のCONNECTによる素通りとは異なる、特別な設定が必要な方式です。
この方式を使うには、あらかじめ社内PCに、その会社の認証局(証明書を発行する機関。CAとも呼ぶ)の証明書を登録しておく必要があります。登録していないPCでは、ブラウザが証明書の警告を表示します。証明書の仕組みはHTTPとHTTPSの記事で解説しています。
透過型プロキシ
ここまでのフォワードプロキシでは、クライアント側で「このアドレスのプロキシを使う」という設定が必要でした。一方、個別に設定しなくても、通信が自動的にプロキシを経由する方式もあります。これを透過型プロキシ、またはトランスペアレントプロキシと呼びます。
透過型プロキシは、ルータでの転送設定など、ネットワーク側の仕組みで実現します。クライアントがプロキシを意識せずに使えるので、「透過」と呼びます。学校や公共施設のネットワークのように、利用者ごとに設定を配れない環境で、アクセス制御やフィルタリングをまとめて行いたい場合に使います。
NAT・ファイアウォールとの違い
プロキシを使うと、相手から見える送信元IPアドレスが変わるので、NATと結果が似ています。しかし、2つは仕組みが根本的に異なります。
NATが見るのは第3層のIPアドレスで、1つの通信のヘッダを書き換えて中継します。家庭用ルータで使われるNAPTは、ポート番号も使い分けるので第4層も見ます。通信自体は1つのままで、アドレスの部分だけが変わります。
一方、プロキシは通信の中身である第7層まで扱います。プロキシは、クライアントからの通信をいったん受け終えてから、別の通信としてサーバに送り直します。クライアントとプロキシの間と、プロキシとサーバの間は、別々のTCP接続です。
ファイアウォールは、通してよい通信かどうかを判断する仕組みです。その方式の1つに、アプリケーションゲートウェイがあります。
これは、プロキシとして通信を中継する仕組みを、通信を許可するかどうかの判断にも使う方式で、プロキシ型ファイアウォールとも呼ばれます。
つまり、プロキシは中継の仕組みで、ファイアウォールは通してよいかを判断する仕組みです。アプリケーションゲートウェイのように、両方を兼ねる製品もあります。キャッシュや負荷分散だけを目的とするプロキシは、通信を許可するかどうかを判断する機能を持つとは限りません。
| NAT | ファイアウォール | プロキシ | |
|---|---|---|---|
| 見る層 | 第3層(IPアドレス)。NAPTはポート番号も見るため第4層も | 第3〜4層、方式によっては第7層 | 第7層(通信の中身) |
| やること | IPアドレスを変換する | 通してよい通信かを判断する | クライアントに代わって通信そのものを中継する |
| 通信の扱い | 1つの通信を書き換えて通す | 通すか拒否するかを決めるだけ | いったん通信を受け終え、別の通信として改めて中継する |
ブラウザのプロキシ設定とPAC
フォワードプロキシを使う場合は、ブラウザやOSの設定画面で、プロキシのアドレスとポート番号を指定します。アクセス先によって使うプロキシを自動で切り替えたい場合は、JavaScriptで書いた設定ファイルをブラウザに読み込ませる方法があります。この設定ファイルをPAC(Proxy Auto-Configuration)と呼びます。
プロキシのデメリット・注意点
- 通信が遅くなることがある:すべての通信がプロキシを経由するので、プロキシの処理能力が低かったり回線が細かったりすると、直接つながる場合より遅くなることがあります。
- プロキシが止まると全体が止まる:フォワードプロキシが1台しかない構成では、故障すると社内のすべてのPCがインターネットに接続できなくなります。リバースプロキシも同様に、故障すると背後のすべてのサーバに届かなくなります。
- 無料の公開プロキシは危険:無料で公開されているプロキシは、HTTPの通信なら中身を記録・改ざんできます。HTTPSでも、どのサイトにアクセスしたかは知られます。身元の分からない公開プロキシに、パスワードなど重要な情報を含む通信を通すのは避けるべきです。
プロキシの先のサーバから正しい応答が来ないときは、プロキシ自身が502や504を返します。画面に出た番号から原因の場所を絞る方法は、HTTPステータスコードの記事にまとめています。
なお、VPNは、プロキシとは目的が異なる別の技術です。VPNは暗号化した仮想的な専用線でネットワーク同士や拠点をつなぐ技術で、プロキシは通信を代理で中継する仕組みです。
練習問題(全5問)
正解:クライアントに
プロキシとは、
正解:フォワードプロキシは
フォワードプロキシは
正解:TLSインスペクションのような
PCは、
正解:社内PCが
負荷分散・TLS終端・WAFとの
正解:クライアント側で
透過型プロキシでは、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
関連記事
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
