TCPポートが開いていてもプロキシが使える証拠にはならない
ポート確認の成功で分かるのは接続できたことだけです。プロキシのハンドシェイクと接続先の期待どおりの応答も確認しましょう。
TCPポートが開いているとは、待受先が接続を受け入れたということです。プロキシ、通常のWebサーバー、別のサービスの可能性があり、8080というポートだけではプロトコルは分かりません。
HTTPプロキシと説明されている接続先では、実際のアドレスを時間制限付きのHTTPSリクエストに指定します。
curl --proxy http://203.0.113.10:8080 --noproxy '' --connect-timeout 5 --max-time 15 --verbose https://example.com/
文書用アドレスは、自分のHTTP接続先かHTTPプロキシ一覧の候補に置き換える必要があります。SOCKSでは対応するSOCKSクライアントモードを使い、ネゴシエーションを完了させてください。ハンドシェイクが違えば、TCP接続を受け入れた直後に失敗することがあります。
| 観測した段階 | 分かること |
|---|---|
| TCP接続を受け入れた | 待受先に到達できる。 |
| プロキシのハンドシェイクを受け入れた | 待受先が今回のプロキシ操作を受け入れた。 |
| 接続先のTLS検証が完了した | クライアントの信頼設定に従って、意図した安全な接続が完了した。 |
| 期待したステータスと内容を受信した | アプリケーションのリクエストが期待した結果を得た。 |
HTTPプロキシ経由のHTTPSには、接続先ポートへのCONNECTが許可されている必要があります。CONNECT 200でも中間段階です。TLSや最終リクエストが成功する前にトンネルが閉じることがあります。平文HTTPの成功では、このトンネル機能は確認できません。
内容を予測できる接続先を使い、できれば自分で管理するものを選び、取得できるならリクエスト記録も確認します。平文HTTPの待受先は、接続先に一切アクセスせず固定ページをステータス200で返すこともできます。何らかの成功ステータスより、期待した応答との一致の方が強い証拠です。HTTPSの識別情報検証は追加の保護になります。
最後に成功した段階を記録してください。「ポートは開いているがSOCKSネゴシエーションは拒否された」という記録は、次の調査の出発点になります。