プロキシリストや一部のプロバイダーは、プロキシを透過(transparent)、匿名(anonymous)、エリート(elite)という3つの匿名性レベルに分類しています。これらのラベルが表しているのは、プロキシがリクエストのHTTPヘッダーに何を追加するかという、ごく限られた一点だけです。透過プロキシは実際のIPアドレスをそのまま伝え、匿名プロキシはIPアドレスを隠すもののプロキシであることは明かし、高匿名プロキシとも呼ばれるエリートプロキシは何も追加しません。
これを知っておくことには意味がありますが、多くの購入者が考えているよりも小さな問いにしか答えていません。ターゲットサイトはヘッダーよりもはるかに多くの情報を見ており、匿名性ラベルよりもIPアドレスの種類のほうが重要です。このガイドでは、各レベルで何が明らかになるのか、プロキシを自分で確認する方法、そしてヘッダーを追加しないレジデンシャルプロキシこそが、実際に一般の訪問者のように見える組み合わせである理由を解説します。
3つのレベルをヘッダーごとに比較
プロキシが平文のHTTPリクエストを転送する際、プロキシが関与したことを宛先に伝えるヘッダーを追加することがあります。重要なのは次の3つです。
- Via はリクエストを処理したプロキシを示します。HTTPの標準仕様では、プロキシにこのヘッダーを追加するよう求めています。
- X-Forwarded-For は元のクライアントのアドレスを伝えます。中核の標準仕様には含まれていませんが、ほぼすべてのプロキシとロードバランサーが解釈できます。
- Forwarded は同じ考え方を標準化したもので、RFC 7239で定義されており、クライアントのアドレス、プロトコル、ホストを示すフィールドを持ちます。
匿名性レベルは、これらのヘッダーの組み合わせにすぎません。
| レベル | 実際のIPが見えるか | プロキシの使用が見えるか | 追加される主なヘッダー |
|---|---|---|---|
| 透過 | はい | はい | Via、あなたのIPを含むX-Forwarded-For |
| 匿名 | いいえ | はい | Via、またはプロキシ自身のIPや空の値を含むX-Forwarded-For |
| エリート(高匿名) | いいえ | ヘッダーからは見えない | なし |
透過プロキシは壊れたプロキシではありません。企業ネットワーク、学校、キャッシュサーバーは意図的にこれを使っています。目的はトラフィックのフィルタリングやキャッシュであり、誰かを隠すことではないからです。また、ネットワークの分野では「透過」という言葉に、まったく別の意味もあります。クライアント側で設定しなくてもトラフィックを傍受するプロキシのことです。この意味についてはプロキシサーバーの用語解説で取り上げています。匿名性の尺度においては、「あなたのアドレスをそのまま渡す」という意味しかありません。
このラベルは平文のHTTPにしか当てはまらない
現在、ウェブの大部分はHTTPSで動いており、それによって状況は変わります。HTTPSサイトの場合、クライアントはCONNECTリクエストでプロキシにトンネルを開くよう依頼し、そのトンネルを通じて宛先と直接TLSで通信します。プロキシは暗号化されたバイトを中継するだけです。トンネル内のヘッダーを読むことも追加することもできないため、たとえそうしたくてもViaやX-Forwarded-Forを追加することはできません。
実際には、次のような意味になります。
- HTTPSのターゲットに対しては、正常に動作するプロキシはヘッダーに関する限りすべてエリートプロキシのように振る舞います。
- 平文のHTTPのターゲットに対しては、匿名性レベルは実際に意味があり、確認する価値があります。
- HTTPSのテストで「エリート」と判定されたプロキシでも、HTTPではヘッダーが漏れる可能性があるため、実際に使うプロトコルでテストしてください。
ターゲットサイトがヘッダー以外に確認すること
プロキシヘッダーを取り除くのは簡単な部分です。自動化されたトラフィックやプロキシ経由のトラフィックを気にかけるサイトは、プロキシが単純に省くことのできないシグナルを見ています。
IPアドレスそのもの。 すべてのアドレスはいずれかのネットワークに属しており、IPデータベースには、そのネットワークが家庭用ブロードバンドのプロバイダーなのか、モバイルキャリアなのか、ホスティング企業なのか、既知のプロキシ範囲なのかが記録されています。クラウドのデータセンターから送られたリクエストは、プロキシヘッダーがなくてもサーバーから来たように見えます。データセンタープロキシが、エリートと表示されていても保護されたサイトでブロックされやすいのはこのためです。
IPレピュテーション。 スパムや攻撃、大量の自動化トラフィックを送信したアドレスはブロックリストに載ります。公開リストにある無料の「エリート」プロキシは、通常多くの見知らぬ人と共有されており、すでにフラグが付いていることもよくあります。
クライアント。 TLSハンドシェイク、HTTP/2の設定、ヘッダーの順序から、リクエストを送っているソフトウェアが識別されます。プロキシはこれらを一切変更しません。TLSとHTTP/2のフィンガープリンティングに関するガイドでは、最初のページが読み込まれる前にクライアントがどれだけの情報を明かしているかを解説しています。
一貫性。 タイムゾーン、言語、位置情報がIPアドレスと一致しないブラウザは、ヘッダーの内容にかかわらず目立ちます。
行動。 リクエストの頻度、ナビゲーションのパターン、通常のページアセットが読み込まれないことは、それだけで自動化を見破る手がかりになります。
つまり、「エリート」は必要条件ではあっても十分条件ではありません。簡単に見つかるシグナルを1つ取り除くだけで、リクエストを自宅にいる人から送られたように見せるわけではありません。
プロキシの匿名性レベルを確認する方法
どのプロキシでも数分でテストできます。受け取ったヘッダーをそのまま返すサーバーに、プロキシ経由で平文のHTTPリクエストを送り、プロキシが何を追加したかを確認します。
エコーサーバーは自分で管理しているものを使ってください。公開されているヘッダーエコーサービスは、通常それ自体がロードバランサーの背後にあり、エコーのコードに届く前にX-Forwarded-Forを削除したり書き換えたりするため、透過プロキシがエリートのように見えてしまうことがあります。パブリックIPを持つ小さなサーバーであれば、数行のコードで十分です。
# echo.py: run on your own server, e.g. python3 echo.py
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
class Echo(BaseHTTPRequestHandler):
def do_GET(self):
body = json.dumps({
"remote_addr": self.client_address[0],
"headers": dict(self.headers),
}).encode()
self.send_response(200)
self.send_header("Content-Type", "application/json")
self.end_headers()
self.wfile.write(body)
HTTPServer(("0.0.0.0", 8080), Echo).serve_forever()
次に、平文のHTTPでプロキシ経由でこのサーバーを呼び出します。
import os
import requests
PROXY = os.environ["PROXY_URL"] # e.g. http://user:pass@host:port
ECHO = "http://YOUR_SERVER_IP:8080/" # plain HTTP on purpose
seen = requests.get(ECHO, proxies={"http": PROXY}, timeout=20).json()
PROXY_HEADERS = ["via", "x-forwarded-for", "forwarded", "x-real-ip", "proxy-connection"]
found = {k: v for k, v in seen["headers"].items() if k.lower() in PROXY_HEADERS}
print("Address the server saw:", seen["remote_addr"])
print("Proxy headers added:", found or "none (elite for HTTP)")
X-Forwarded-Forにあなた自身のアドレスが含まれていれば、そのプロキシは透過プロキシです。プロキシヘッダーはあるものの、あなたのアドレスが含まれていなければ匿名プロキシです。余分なものが何も届かなければ、HTTPトラフィックに関してはエリートプロキシです。続いて、出口アドレスをIPデータベースで調べ、どの種類のネットワークに属しているかを確認してください。それが、ターゲットサイトが次にチェックする項目だからです。
レジデンシャルプロキシの位置づけ
プロキシにとって理想的なのは、ヘッダーを一切追加せず、一般的な家庭回線に属するアドレスから出ていくことです。それを実現するのがレジデンシャルプロキシネットワークです。リクエストは選択した国や都市の家庭用ブロードバンド回線から送信され、途中でプロキシヘッダーが追加されることもありません。Shifterのレジデンシャルゲートウェイは、転送するリクエストにViaやX-Forwarded-Forを追加しません。
限界についても明確にしておく価値があります。どの匿名性レベルであっても、アカウント、Cookie、ブラウザのフィンガープリントを隠すことはできず、プロバイダーは自社の顧客が誰であるかを把握しています。プロキシが匿名化ツールではない理由に関する記事では、プロキシが隠せるものと隠せないものを詳しく説明しています。公開データの収集、他の市場でのサイトの挙動のテスト、多数のアドレスへのリクエストの分散といった用途では、クリーンな出口IPと、通常のブラウザのように振る舞うクライアントを組み合わせるのが正しい構成です。
よくある質問
エリートプロキシとは何ですか?
エリートプロキシは、高匿名プロキシやレベル1プロキシとも呼ばれ、あなたのIPアドレスやプロキシを使用していることを明かすヘッダーを一切追加せずにリクエストを転送します。宛先に見えるのはプロキシのアドレスだけです。
エリートプロキシとレジデンシャルプロキシは同じものですか?
いいえ。「エリート」はプロキシがどのヘッダーを追加するかを表します。「レジデンシャル」は出口IPがどこから来ているか、つまりデータセンターではなく家庭用インターネット回線であることを表します。データセンタープロキシはエリートであっても、IPアドレスから簡単に見分けられることがあります。
HTTPSサイトでも匿名性レベルは重要ですか?
重要性はかなり低くなります。HTTPSの場合、プロキシは暗号化されたトンネルを中継するだけで、その内部にヘッダーを追加することはできません。匿名性レベルが意味を持つのは、プロキシがリクエストを読み取り変更できる平文のHTTPトラフィックの場合です。
エリートプロキシを使っていることはウェブサイトに分かりますか?
ヘッダーからは分かりませんが、他のシグナルからは分かります。IPアドレスの種類とレピュテーション、クライアントのTLSフィンガープリント、位置情報の設定の不一致、リクエストの挙動などです。
まとめ
透過、匿名、エリートという分類は、プロキシが平文のHTTPヘッダーに何を追加するかを表しているにすぎません。HTTPSではその違いはなくなり、ターゲットサイトは代わりにIPアドレス、そのレピュテーション、クライアントのフィンガープリント、行動を手がかりにします。ヘッダーを追加しないプロキシを選び、実際に使うプロトコルで確認し、何よりも出口IPがどこから来ているかに注意を払ってください。