「プロキシ」は製品の名前ではなく、位置を表す言葉です。接続の途中に入り、トラフィックを中継するものを指します。基本的な考え方は用語集のプロキシサーバーとはで説明しています。本記事ではもう一歩踏み込み、最もよく目にする2つの形であるフォワードプロキシとリバースプロキシを取り上げます。両者は同じ仕組みを使いながら、接続のそれぞれ反対側のために動作します。
混同しやすいのは無理もありません。どちらもリクエストを受け取り、それを転送し、何かを隠します。違いは、どちらの側に立っているかです。フォワードプロキシはクライアントのために動作し、レジデンシャルプロキシもこの仕組みです。リバースプロキシはサーバーのために動作し、Webサイトの前段に置かれたNginxやCDNがこれにあたります。プロキシがどちらの側に仕えているかが分かれば、残りは自然に理解できます。
それぞれの違いを一文で
- フォワードプロキシはクライアントの前に置かれます。クライアントが自らトラフィックをプロキシ経由で送ることを選び、WebサイトにはクライアントではなくプロキシのIPアドレスが見えます。
- リバースプロキシはサーバーの前に置かれます。クライアントはそれをWebサイトだと思って接続し、どのバックエンドサーバーが応答するかはリバースプロキシが決めます。
つまり、フォワードプロキシはサーバーからクライアントを隠し、リバースプロキシはクライアントからサーバーを隠します。
フォワードプロキシの仕組み
フォワードプロキシはクライアント側で設定します。ブラウザ、OSの設定、スクリプト、スクレイピングツールなどにプロキシのアドレスを入力すると、それ以降のリクエストはまずプロキシに送られます。
- クライアントがプロキシに接続し、多くの商用サービスではユーザー名とパスワードで認証します。
- HTTPSサイトの場合、クライアントはプロキシに宛先へのトンネルを開くよう要求します。プロキシは宛先に接続し、暗号化されたデータを読まずにそのまま中継します。
- 宛先からは接続がプロキシのIPアドレスから来ているように見えるため、所在地の判定、評価、レート制限はあなたのアドレスではなくそのアドレスに適用されます。
企業は数十年前から、従業員がWeb上でアクセスする先をフィルタリングし記録するためにフォワードプロキシを運用してきました。商用プロキシ市場もフォワードプロキシの世界です。レジデンシャルプロキシやISPプロキシのサービスは、必要な場所の出口IPアドレスを提供し、訪問先のWebサイトにはそのアドレスが見えます。多くのプロバイダーは大規模なプールの前に単一のゲートウェイを置き、リクエストごとに出口を選びます。これがバックコネクトモデルです。これを「リバースローテーティングプロキシ」と呼んで検索する人もいますが、クライアントであるあなたのために動作する以上、これもフォワードプロキシです。
リバースプロキシの仕組み
リバースプロキシはサーバー側で設定され、通常クライアントはその存在に気づきません。WebサイトのDNSレコードがリバースプロキシを指しているため、すべての訪問者はリバースプロキシに接続します。
- 訪問者のブラウザが、Webサイトだと思っている相手に接続します。
- リバースプロキシは通常TLSを終端し、リクエストを読み取って転送先を決めます。どのバックエンドサーバーか、どのサービスか、あるいはキャッシュから直接返すかを判断します。
- 選んだバックエンドにリクエストを転送します。その際、アプリケーションが訪問者の実際のIPアドレスを把握できるよう、
X-Forwarded-Forなどのヘッダーを付加することがよくあります。 - バックエンドからのレスポンスを、あたかも自分で生成したかのように訪問者へ返します。
Nginx、HAProxy、Envoy、Traefikは代表的なリバースプロキシであり、CDNやDDoS対策サービスも世界規模で同じ仕組みで動いています。導入する理由は、複数サーバー間の負荷分散、TLS証明書を一か所で管理できること、キャッシュ、圧縮、そして攻撃を吸収し不正なトラフィックがアプリケーションに届く前に遮断する防御層の役割です。
比較表
| フォワードプロキシ | リバースプロキシ | |
|---|---|---|
| 誰のために動作するか | クライアント | サーバー |
| 誰が設定するか | ユーザーまたはその所属企業 | Webサイトの運営者 |
| 誰がその存在を知っているか | クライアント | 運営者(訪問者は通常知らない) |
| 相手側に見えるもの | クライアントではなくプロキシのIP | 実際のサーバーではなくプロキシ |
| 代表的なソフトウェアやサービス | Squid、企業のゲートウェイ、レジデンシャルプロキシやISPプロキシのサービス | Nginx、HAProxy、Envoy、CDN、Webアプリケーションファイアウォール |
| 主な用途 | 地域別のテスト、データ収集、アクセス制御、宛先に対するプライバシー保護 | 負荷分散、TLS、キャッシュ、攻撃対策 |
3つ目の種類として透過型プロキシがあります。これはホテルや学校のネットワークなどで、クライアントが何も設定しなくてもトラフィックを傍受するものです。あなたではなくネットワーク運営者のために動作するもので、上記のフォワードとリバースの構図は変わりません。
フォワードプロキシが必要な場面
自分の送信トラフィックが他のWebサイトからどう見えるかが問題になるとき、フォワードプロキシが必要です。
- 他の国や都市からサイトを見る必要がある。 価格、検索結果、広告、コンテンツは地域によって変わり、現地版を確認できるのはその場所のIPアドレスだけです。
- 公開Webデータを大量に収集する。 多数のレジデンシャルIPアドレスにリクエストを分散させることで、サイトがIPごとに設けるレート制限を個々のアドレスが超えないようにできます。
- 一つの地域に固定すべきアカウントを管理している。 この場合はISPプロキシのモデルが適しています。各プロキシは請求期間を通じて選択した都市とISPにとどまり、ユーザー名も同じものを使い続けられます。
- 企業として外部へのアクセスを管理する。 企業のフォワードプロキシはポリシーを適用し、ネットワークから出ていく通信を記録します。
プロトコルの選択はプロキシの種類の選択とは別の問題です。詳しくはHTTPプロキシとSOCKS5プロキシの比較をご覧ください。
リバースプロキシが必要な場面
受信トラフィックが自社のサーバーにどう届くかが問題になるとき、リバースプロキシが必要です。
- 複数のバックエンドサーバーを運用しており、負荷を分散し、1台が停止しても稼働を続けたい。
- TLS、リダイレクト、圧縮、キャッシュを一か所で処理したい。
- リクエストがアプリケーションに届く前に、大量アクセスや悪質なボットから守りたい。
- 複数の社内サービスを一つのドメインで公開したい(例:
/apiと/app)。
Webサイトを運営しているだけなら、必要なのはフォワードプロキシではなくリバースプロキシです。多くの場合、ホスティング事業者やCDNが代わりに運用しています。
両方が必要な場面
トラフィックの向きごとに、両方を運用している企業は数多くあります。たとえば価格インテリジェンスのチームは、監視対象の市場にあるフォワードプロキシ経由で外向きのデータ収集を行い、顧客が利用するダッシュボードとAPIの前段にはリバースプロキシを置きます。
また、フォワードプロキシ経由で送るすべてのリクエストで、この2つは出会います。大規模なWebサイトの多くは、アプリケーションが訪問者を処理する前に検査を行うリバースプロキシやCDNの背後にあります。あなたのフォワードプロキシを評価するのは、このエッジ層です。IPアドレスの評価と種類、そこから届くリクエストの数、接続が本物のブラウザらしく見えるかどうかが判断されます。プロキシのソフトウェアよりも出口IPが重要なのはこのためであり、データセンターのIPレンジからのリクエストが家庭の回線からのリクエストよりはるかに頻繁にチャレンジを受けるのもこのためです。
よくある質問
VPNはフォワードプロキシですか?
クライアントのために動作し、WebサイトからそのIPアドレスを隠すという点で、似た役割を果たします。VPNは通常、デバイスのすべてのトラフィックをネットワークレベルで扱うのに対し、フォワードプロキシはアプリケーションごと、またはリクエストごとに設定します。
ロードバランサーはリバースプロキシですか?
HTTPレベルで動作するロードバランサーの多くはリバースプロキシです。クライアントの接続を受け付け、転送先のバックエンドを選びます。より下位のレベルで動作し、パケットのルーティングだけを行うものもあり、こちらは別種のツールです。
1台のサーバーがフォワードプロキシとリバースプロキシの両方として動作できますか?
はい。NginxやSquidなどのソフトウェアはどちらの用途にも設定でき、両方を兼ねる構成もあります。役割を決めるのはソフトウェアではなく、設定と、プロキシが誰のトラフィックを扱うかです。
レジデンシャルプロキシはフォワードプロキシとリバースプロキシのどちらですか?
フォワードプロキシです。クライアント側で設定し、あなたの代わりに動作します。訪問先のWebサイトには、あなたのIPアドレスではなくレジデンシャルの出口IPアドレスが見えます。
まとめ
プロキシがどちらの側に立っているかを考えてください。訪問先のWebサイトに対してあなたを代表するならフォワードプロキシであり、重要なのはそれが提供するIPアドレスです。Webサイトを訪問者に対して代表するならリバースプロキシであり、その目的は負荷、セキュリティ、速度です。Webからデータを収集するチームの多くには前者が必要で、Webサイトを運営するチームの多くはすでに後者を持っています。Shifterのフォワードプロキシには shifter.io/order から利用できる無料トライアルがあり、プランを選ぶ前に重要なサイトで試すことができます。