HTTPSSHSMTPUDPCUSTOMSOCKS5:1080INTERNET

SOCKSプロキシ

10 最小読み取りネットワーキング

SOCKS はプロトコルに依存しないプロキシです。 HTTP プロキシは Web トラフィックのみを理解しますが、SOCKS プロキシは問答無用であらゆる TCP (SOCKS5 では UDP) 接続をトンネリングします。この一般性が、SSH がすぐに使える SOCKS サポートを提供する理由、Tor が SOCKS5 リスナーを公開する理由、および任意のアプリケーション トラフィックを転送するほぼすべてのプライバシー ツールが最終的に SOCKS5 リスナーを使用する理由です。

記事全文は以下に英語で記載されています。

SOCKS (「ソケット セキュア」) は、ファイアウォールで囲まれたホストに外部の世界にアクセスするクリーンな方法を提供するために、1990 年代初頭に MIPS Computer Systems で設計されました。 SOCKS サーバーは、HTTP プロキシのようにすべてのアプリケーション プロトコルを解析するのではなく、クライアントに代わって TCP 接続を開き、バイトを前後にシャッフルします。 HTTP、SMTP、IRC、カスタム バイナリなど、最上位にあるプロトコルは何であっても、変更されずに機能します。

SOCKS4 と 1992 年に標準化された SOCKS5

SOCKS4 は、IPv4 と TCP のみをサポートし、認証はありません。現在では基本的に廃止されていますが、レガシー ソフトウェアでは依然として広く使用されています。RFC 1928 (1996) で定義されている

SOCKS5 は、現在使用されているバージョンです。

  • IPv6 宛先アドレス
  • ドメイン名 宛先 (クライアントではなくプロキシが解決します - プライバシーにとって重要です)
  • 認証 メソッド (ユーザー名/パスワードは共通です) 1)
  • UDPアソシエイト - クライアントがUDPデータグラムをトンネルできるようにする制御チャネル。DNS、VoIP、およびゲームプロトコルに便利

接続フロー

A SOCKS5の会話は次のようになります:

  1. CクライアントはSOCKSサーバーに接続します
  2. Client は、サポートされている認証方法をリストした greeting を送信します。
  3. Server は 1 つを選択して応答します。
  4. 認証がネゴシエートされた場合、クライアントとサーバーはそれを実行します。
  5. Client は、 CONNECT リクエストは宛先ホストとポートを指定します。
  6. Server はその TCP 接続を開き、成功とバインドされたアドレスで応答します。それ以降、クライアントが書き込むすべてのものが宛先に転送され、その逆も同様です。

アプリケーションの最初のバイトが移動するまでに 5 回ラウンドトリップします。 SOCKS は遅延に優しいわけではありませんが、シンプルです。

SOCKS と DNS: リークの原因

SOCKS5 の微妙な機能の 1 つは、宛先の名前の付け方です。 CONNECT リクエストでは、IPv4、IPv6、または ドメイン名 で名前を付けることができます。クライアントが IP を送信する場合、クライアントはローカルで DNS ルックアップを実行します。プロキシの背後に隠れようとした場合、ローカル リゾルバーは名前を認識するだけです。クライアントが domain を送信すると、プロキシはそれを解決します。これは Tor ユーザーが望んでいることです。

これが無数の DNS リークの根本原因です。SOCKS5 用に構成されたアプリケーションが依然としてホスト名をローカルで解決します。 Curl には、--socks5 ではなく、--socks5-hostname が必要です。 Firefox には、network.proxy.socks_remote_dns = true が必要です。 DNS リーク テスト は障害モードを捕捉します。

SSH 動的転送

SOCKS の最も実用的な用途の 1 つは、ssh -D 1080 user@server です。 SSH はローカル SOCKS5 リスナーを生成します。これを指すアプリケーションは、その TCP トラフィックが SSH セッションを介して server にトンネリングされ、アウトバウンド接続が確立されます。無料で、ユーザーと SSH サーバーの間でエンドツーエンドで暗号化され、ポート 22 を許可するほぼすべてのローカル ネットワーク制限を迂回してルーティングされます。

SOCKS と HTTP CONNECT

HTTP CONNECT (HTTPS の HTTP プロキシによって使用されるトンネリング動詞) は機能的に SOCKS と似ており、どちらも生の TCP トンネルを確立します。違い:

  • HTTP CONNECT は HTTP 上で実行されるため、HTTP 認証を継承し、ポート 80 または 443 でファイアウォールに適しています。
  • SOCKS は専用ポート上の専用プロトコルであり、よりクリーンな UDP サポートとより豊富な認証を備えています。
  • HTTP CONNECT は HTTPS 対応によってインターセプトおよび検査できます。フィルター。 SOCKS は、それらに対してより不透明です。TLS

    SOCKS 上の

SOCKS 自体は暗号化されていません。クライアント/プロキシ リンクは、認証交換を含めてプレーンテキストです。リンクを保護するために、最新の展開では SOCKS を TLS でラップするか、SSH トンネル内で実行します。 Shadowsocks は異なるアプローチを採用しました。SOCKS5 のアイデアを維持しながら、ディープ パケット インスペクションを無効にするために接続ごとの暗号化と難読化を追加しました.

SOCKS が VPN の隣にある場所

A VPN は、デバイスからの all トラフィックをトンネル経由でルーティングします。 SOCKS プロキシは、指定されたアプリケーションのみをルーティングします。そのため、SOCKS は選択的なトンネリング (ブラウザのみを Tor 経由でルーティングし、ゲームはローカル リンク上に残す) には最適ですが、デバイス全体の保護にはあまり適していません。一部の商用 VPN プロバイダー (Mullvad、IVPN) もネットワーク内で SOCKS5 エンドポイントを公開しているため、完全な VPN を起動せずに単一のアプリをルーティングできます。

よくある質問

SOCKS5は暗号化されていますか?
いいえ — SOCKS5 はトランスポート プロトコルであり、暗号化プロトコルではありません。全体を TLS でラップするか、SSH トンネル経由で実行しない限り、認証とデータは両方ともユーザーとプロキシの間で平文で送信されます。暗号化の外部層を使用せずに、敵対的なネットワーク上で SOCKS を使用しないでください。
SOCKS はどのポートを使用しますか?
慣例により、1080 です。これは厳密な要件ではなく、多くの展開では他のポートが使用されます (Tor にバンドルされている SOCKS5 リスナーは 9050 にあります)。ただし、1080 は IANA によって割り当てられたデフォルトです。
Tor が HTTP ではなく SOCKS5 を使用するのはなぜですか?
SOCKS5 は、HTTP だけでなく、あらゆる TCP プロトコルをトンネリングできます。 Tor ユーザーは、Web トラフィックだけでなく、IRC、電子メール、カスタム アプリなどをオニオン ルーティングしたいと考えています。 SOCKS5 はまた、ドメイン名をプロキシに渡します。これにより、ローカルで検索を漏らすのではなく、Tor がネットワーク内でドメイン名を解決できるようになります。
SOCKS は UDP を処理できますか?
SOCKS5 には、クライアントがプロキシ経由で UDP データグラムをトンネリングできるようにする UDP-associate コマンドが追加されました。サポートにはばらつきがあり、SOCKS サーバー実装の多くは TCP のみを実行します。しかし、仕様は存在しており、Tor と Shadowsocks が UDP ベースの DNS を処理する方法になっています。
SOCKS5 と VPN のどちらを選択したほうがよいでしょうか?
デバイス全体のプライバシーを確​​保するには、VPN を使用します。すべてをトンネリングし、リンクを暗号化します。 1 つの特定のアプリケーションをトンネリングする場合、または Tor とチェーンする場合、SOCKS5 は適切なツールです。この 2 つは競合するものではなく、補完的なものです。
SOCKS プロキシの説明: SOCKS4、SOCKS5、および SOCKS Over TLS の仕組み