web-dev-qa-db-ja.com

HTTPプロキシはどのように機能しますか?

Http-proxyに関する何かをウェブで検索しました。プロキシサーバーに関するwiki記事を読みます。しかし、私はまだhttpプロキシがどのように機能するか理解していません。

Httpプロキシがどのように機能するかについての私の仮定は次のとおりです。http-proxyを特定のプロキシ(Proxy_Aなど)に設定し、chrome/IEを起動するときに特定のURL(URL_Aなど)を入力するとchrome/IEが送信されますProxy_Aに直接リクエストを送信すると、Proxy_AはURL_Aの実サーバーにリクエストを送信しますか?

53
Alcott

HTTPプロキシはHTTPプロトコルを話します。これは特にHTTP接続用に作られていますが、他のプロトコルでも悪用される可能性があります(これは既に標準です)

ブラウザ(CLIENT)はGET http://SERVER/path HTTP/1.1プロキシへ
PROXYは実際のリクエストをサーバーに転送します。
サーバーは、PROXYを接続とし​​てのみ表示し、クライアントと同様にPROXYに応答します。
PROXYは応答を受信し、クライアントに送り返します。

これは透過的なプロセスであり、サーバーと直接通信するのとほぼ同じであるため、ブラウザーがHTTPプロキシを実装するのはほんのわずかなオーバーヘッドです。
クライアントを識別するために送信できる追加のヘッダーがあり、プロキシを使用していることを明らかにします。
プロキシは、さまざまな目的でデータストリーム内のコンテンツを変更/追加することがあります。
たとえば、一部のプロキシには、サーバー側で記録したり、スクリプトでインターセプトしたりできる特別なHTTP HEADERに実際のIPが含まれます。

CLIENT <---> PROXY <---> SERVER

更新:
セキュリティ/プライバシー機能としてのプロキシの使用に関連する
上記のasciiを見るとわかるように、CLIENTとSERVERの間には直接通信はありません。両方の当事者は、両者の間でPROXYと会話するだけです。
現代の世界では、CLIENTはブラウザであることが多く、SERVERはWebサーバー(Apacheなど)であることがよくあります。

このような環境では、ユーザーは多くの場合、PROXYが安全であることを信頼し、IDを漏らしません。
ただし、ブラウザで実行されている複雑なソフトウェアフレームワークのために、このセキュリティモデルを台無しにする多くの可能な方法があります。
たとえば、FlashまたはJavaアプレットは、プロキシ接続が切断される可能性のある完璧な例です。FlashとJavaどちらもあまり気にしないかもしれません親アプリケーション(ブラウザ)のプロキシ設定。
別の例は、PROXYおよびアプリケーション設定に応じて、PROXYなしで宛先ネームサーバーに到達できるDNS要求です。
別の例としては、Cookieまたはブラウザメタフットプリント(解像度、応答時間、ユーザーエージェントなど)があります。これらは両方とも、Webサーバーが過去からあなたを知っている(またはプロキシなしで再びあなたに会う)場合にあなたを識別します。

そして最終的に、プロキシ自体は信頼される必要があります。プロキシを通過するすべてのデータを読み取ることができ、その上でSSLセキュリティを破ることさえできるかもしれません(中間の人に読んでください)

プロキシの入手先
プロキシはサービスとして購入、スキャン、または自分で実行できます。

公開プロキシ
これらは最も頻繁に使用されるプロキシであり、通常の「パブリック」という用語は非常に誤解を招くものです。
より適切な用語は「オープンプロキシ」です。ファイアウォールや認証なしでプロキシサーバーを実行すると、世界中のだれでもそれを見つけて悪用できます。
プロキシを販売している企業の大部分は、インターネット上でそのようなプロキシをスキャンするか、ハッキングされたWindowsコンピューター(ボットネット)を使用して、ほとんど違法/スパム活動のために販売しています。
最近のほとんどの国では、許可なしにオープンプロキシを悪用と見なすことがあります。これは非常に一般的なことですが、実際には刑務所の時間につながる可能性があります。
インターネットで開いているポートを検索することでプロキシをスキャンできます。典型的な無料プログラムは https://nmap.org です
注意事項:大規模なスキャンでは、ほぼ確実にISPによってインターネット接続が禁止されます。

有料プロキシ
ここには、4種類のプロキシがあります。
1)有料パブリック(オープン)プロキシ
基本的にこれらの売り手は、定期的に更新されて死んだものを削除するプロキシの膨大なリストを販売または再販します。
プロキシは大規模に悪用され、通常Googleを含むほとんどのサイトでブラックリストに登録されています。
さらに、これらのプロキシは通常非常に不安定で非常に低速です。
これらのプロキシの大部分は、誤って構成されたサーバーを悪用しているだけです。これは非常に競争の激しい「市場」であり、Googleは多くの例を導きます。

2)有料のハッキングされた(ボットネット)プロキシ
これらは、主にプロキシホストとしてのモノのインターネットまたはWindowsデスクトップを悪用するコンピューターです。攻撃者は、さまざまな違法目的のために大規模にそれらを使用します。
販売者は通常、彼らの違法な性質を隠すために「住宅用プロキシ」と呼びます。
このようなプロキシを使用することは間違いなく違法であり、悪用されたユーザーは、接続すると「宛先」への接続をハイジャックする可能性を含め、「自分の」IPを簡単に記録できます。
ソースによっては、それらのIPはブラックリストに載っていないため、「品質」は公開プロキシよりもはるかに優れています。

3)有料の共有プロキシ
これらはデータセンタープロキシであり、通常は合法であり、高速アップリンクの可能性があります。

典型的な用途は、クレイグリストの制限または地理的制限の回避です。

4)有料のプライベート/専用プロキシ
「プライベート」は専用を意味します。オペレーターがプロなら、プロキシが他の人と共有されていないことを意味します。
これらは、特にプロキシIPがより長い期間レンタルされる場合、より専門的かつ法的活動に使用されることがよくあります。
よく知られている演算子は https://us-proxies.com

所有プロキシ
独自のプロキシを実行することも可能です。さまざまなオープンソースプロジェクトが利用可能です。
主に使用されるプロキシサーバーは https://squid-cache.org です。

71
John

上記のジョンのすばらしい答えに追加するための重要なステップの1つは、PROXYとクライアント間の最初のCONNECTハンドシェイクです。 Websocket RFC から

CONNECT example.com:80 HTTP/1.1
Host: example.com

これは、クライアントがSSLトンネルを開くために使用するのと同じリクエストであり、本質的にはプロキシを使用します

14
trik