SOCKS(SOCKetS)—ネットワークプロキシプロトコルのバージョン、用途と違い
SOCKSは、中継サーバーを介してTCP/UDPトラフィックを転送するネットワークプロキシプロトコルです。複数のアプリケーションに対応し、認証方式はさまざまで、HTTPプロキシやVPNとは異なります。
概要
SOCKS(「SOCKetS」に由来)は、中継プロキシサーバーを介して、あるコンピューターが別のコンピューターへ接続できるようにする汎用的なインターネットプロトコルです。特定のアプリケーションプロトコルを扱うのではなく、SOCKSサーバーはクライアントと宛先ホストの間で、任意のTCPトラフィック、ならびに新しいバージョンではUDPトラフィックを中継します。アプリケーション層より下で動作するため、中継側がペイロードを理解しなくても、ウェブ閲覧、ファイル転送、チャット、ゲームなどのトラフィックを運ぶことができます。
SOCKSの仕組み
クライアントはSOCKSサーバーへの接続を確立し、対象ホストとポートへの接続をサーバーが開くよう要求します。その後、セッションが終了するまで、サーバーは両端点間でバイト列を転送します。現在の実装では通常、認証とオプションをネゴシエートする初期ハンドシェイクがサポートされています。実際に広く使われるプロトコルバージョンは2つあり、基本的なTCP中継をサポートするSOCKS4と、認証方式、サーバーによるドメイン名解決、UDP中継のサポートを追加したSOCKS5です。SOCKS自体はデフォルトではトラフィックを暗号化しないため、暗号化は別途、たとえばTLSまたは暗号化トンネルによって重ねて適用する必要があります。
特性と機能
- プロトコル非依存:上位レベルのプロトコルを解釈せず、ほとんどのTCPトラフィックと、SOCKS5ではUDPトラフィックを転送できます。
- 認証:SOCKS5は複数の認証方式をサポートしており、サーバーはアクセスを制御できます。
- DNSの処理:クライアントはSOCKSサーバーにドメイン名の解決を依頼でき、匿名性の向上やローカルDNSの制限の回避につながる場合があります。
- 透過的な中継:アプリケーションがSOCKSに対応しているか、SOCKSプロキシを使用するよう設定されていれば利用できます。それ以外の場合は、OSレベルまたはアプリケーションレベルのプロキシを用いることができます。
歴史と発展
SOCKSは、商用インターネットの初期に軽量なプロキシ機構として生まれ、ファイアウォールとネットワークアドレス変換(NAT)が一般化するにつれて、より多くの用途を支えるよう改良されました。初期のバージョンは単純なTCP中継を提供していましたが、後の改訂では認証やUDP処理などの追加機能が標準化されました。やがてSOCKSは、プロトコル固有のフィルタリングではなく汎用的なプロキシ機能を必要とするツールにとって、安定した構成要素となりました。
一般的な用途と例
柔軟性があるため、SOCKSはさまざまな場面で使用されます。具体的には、制限的なネットワークポリシーの回避、ファイアウォール越しのピアツーピア通信やゲームトラフィックの有効化、インスタントメッセージング(たとえばMSNやAOLのような旧来のサービス)の経路設定、FTPなどのファイル転送プロトコルの中継が挙げられます。ウェブブラウザーや他のクライアントは、任意の要求をSOCKSサーバー経由で送信するよう設定できます。SSHなどのツールは、保護されたSSHセッションを通じてトラフィックを転送するローカルSOCKSリスナー(動的ポートフォワーディング)を作成できます。プライバシーネットワークや匿名化サービスも、クライアントアプリケーションがプロトコル固有のアダプターなしにトラフィックを経路設定できるよう、SOCKSインターフェースを提供することが一般的です。
相違点、制限およびセキュリティ上の考慮事項
SOCKSはHTTPプロキシとは異なります。HTTPプロキシはHTTPメッセージを理解し、キャッシュまたは変更できますが、SOCKSは単にバイト列を中継し、アプリケーションプロトコルに依存しません。SOCKSはVPNとも異なります。VPNは通常、ネットワークインターフェース全体をトンネル化し、暗号化されたリンクを通じてすべてのトラフィックを経路設定します。一方、SOCKSが転送するのは、それを使用するよう設定されたアプリケーションのトラフィックだけであり、デフォルトで暗号化を提供しません。SOCKS中継はペイロードを本質的に暗号化しないため、機密データはエンドツーエンド暗号化(HTTPS、TLS)で保護するか、暗号化トンネル上で利用すべきです。また、SOCKSサーバーは宛先アドレスとポートを記録できるため、追加の対策がなければ匿名性を保証するものではないことに、管理者は留意する必要があります。
実用的な導入と主な事項
オープンソースおよび商用のSOCKSサーバーとクライアントの実装は数多く存在します。SOCKSは、システムのプロキシ設定やアプリケーションの構成に一般的に統合されています。プライバシーを重視するプロジェクトでは、アプリケーション対応を容易にするためSOCKSエンドポイントが提供されることがよくあります。SOCKSプロキシを利用できるクライアントは、プロトコル固有のアダプターなしでこのようなサービスを活用できます。簡潔な追加情報については、プロキシプロトコルとネットワークトンネリング技術に関する一般的な資料を参照してください(プロトコルの概要、クライアント向けガイダンス)。
関連項目
著者
AlegsaOnline.com SOCKS(SOCKetS)—ネットワークプロキシプロトコルのバージョン、用途と違い Leandro Alegsa
URL: https://ja.alegsaonline.com/art/91483
出典
- hummingbird.com : "What does SOCKS stand for?"