VPN & Proxy

SOCKS Proxy

約 4 分で読めます

SOCKS プロキシとは

SOCKS (Socket Secure) プロキシとは、TCP/UDP レベルで通信を中継する汎用的なプロキシサーバーです。HTTP プロキシがブラウザの Web 通信だけを中継するのに対し、SOCKS プロキシはプロトコルを問わず、あらゆるアプリケーションの通信を中継できます。

SOCKS プロキシはアプリケーション層のデータを解釈せず、単純にパケットを転送します。そのため、メール (SMTP/IMAP)、ファイル転送 (FTP)、SSH、P2P 通信など、HTTP 以外のプロトコルにも対応できる柔軟性を持っています。

SOCKS4 / SOCKS4a / SOCKS5 の違い

SOCKS4 (1996 年)
TCP のみ対応。認証機能なし。IPv4 のみサポート。接続先はクライアントが事前に DNS 解決した IP アドレスで指定するため、DNS リクエストがプロキシを経由せず ISP の DNS サーバーに直接送信される。これにより、どのドメインにアクセスしようとしているかが ISP に筒抜けになる (DNS リーク)。
SOCKS4a
SOCKS4 の拡張版。接続先をドメイン名で指定でき、DNS 解決をプロキシサーバー側で実行する。これにより DNS リークのリスクを軽減できる。ただし TCP のみ、認証なしの制約は SOCKS4 と同じ。Tor の初期実装で採用されていた。
SOCKS5 (RFC 1928、1996 年)
TCP と UDP の両方に対応。ユーザー名/パスワード認証 (RFC 1929) や GSSAPI 認証をサポート。IPv6 対応。DNS 解決をプロキシ側で実行可能。接続先の指定に IPv4 アドレス、IPv6 アドレス、ドメイン名の 3 種類が使える。現在の事実上の標準。

実務では SOCKS5 を選択するのが基本です。UDP 対応により、DNS クエリや VoIP、ストリーミングなどリアルタイム性が求められる通信も中継できます。

SSH ダイナミックポートフォワーディング

SOCKS プロキシを最も手軽に構築する方法が、SSH のダイナミックポートフォワーディングです。リモートサーバーへの SSH アクセス権があれば、追加のソフトウェアなしに暗号化された SOCKS5 プロキシを立ち上げられます。

ssh -D 1080 -N -f user@remote-server

このコマンドでローカルのポート 1080 に SOCKS5 プロキシが起動します。-N はリモートでコマンドを実行しないオプション、-f はバックグラウンド実行です。あとはブラウザやアプリケーションのプロキシ設定で localhost:1080 を SOCKS5 プロキシとして指定するだけです。

この方式の利点は、クライアントとリモートサーバー間の通信が SSH で暗号化される点です。通常の SOCKS プロキシは通信を暗号化しませんが、SSH トンネル上で動作させることで、カフェの公衆 Wi-Fi のような信頼できないネットワークでも安全に通信できます。

実務での活用場面

  • Tor ネットワーク: Tor はローカルに SOCKS5 プロキシ (通常ポート 9050) を立ち上げ、アプリケーションの通信を Tor 回線に流します。Tor Browser 以外のアプリケーション (curl、wget など) も --socks5-hostname localhost:9050 で Tor 経由の通信が可能です。
  • 企業のファイアウォール越え: HTTP プロキシでは通過できない独自プロトコルの通信を、SOCKS プロキシ経由で外部に接続するケースがあります。
  • アプリケーション単位のプロキシ: VPN が OS 全体の通信を転送するのに対し、SOCKS プロキシは特定のアプリケーションだけをプロキシ経由にできます。ブラウザだけプロキシ経由にし、他のアプリは直接接続するといった使い分けが可能です。
  • 開発・テスト: 特定の国や地域からのアクセスをシミュレーションする際に、SOCKS プロキシ経由で接続先を切り替えることがあります。

公開 SOCKS プロキシのリスク

SOCKS プロキシ自体は通信を暗号化しません。プロキシサーバーとの間の通信は平文で流れるため、信頼できないプロキシを使うと通信内容を傍受されるリスクがあります。

インターネット上には無料の SOCKS プロキシリストが多数公開されていますが、これらの利用は極めて危険です。具体的なリスクとして、以下が挙げられます。

  • 通信の傍受: HTTPS でない通信の内容 (ログイン情報、メール本文など) がプロキシ運営者に丸見えになる
  • 中間者攻撃: HTTPS 通信であっても、プロキシが偽の証明書を挿入して通信を復号する攻撃が可能な場合がある
  • マルウェア注入: HTTP レスポンスに悪意のある JavaScript やリダイレクトを挿入される
  • ハニーポット: 法執行機関や攻撃者が意図的に公開プロキシを運営し、利用者の通信を監視している場合がある

業務利用では自前で構築するか (SSH トンネルが最も手軽)、信頼できるプロバイダーのサービスを利用しましょう。

Common Misconceptions

SOCKS プロキシを使えば通信が暗号化される
SOCKS プロキシはパケットを中継するだけで、暗号化機能は持ちません。暗号化が必要な場合は SSH トンネルや VPN と組み合わせる必要があります。
SOCKS プロキシは VPN の代替になる
SOCKS プロキシは特定のアプリケーションの通信だけを中継します。VPN のように OS レベルで全通信を保護するわけではなく、設定していないアプリの通信は直接インターネットに出ます。

SOCKS プロキシと HTTP プロキシの違い

SOCKS プロキシ

プロトコル非依存で TCP/UDP を中継。HTTP 以外の通信 (SSH、FTP、P2P 等) にも対応。データの中身を解釈しない。

HTTP プロキシ

HTTP/HTTPS 通信のみ中継。リクエストヘッダーの書き換えやキャッシュが可能。Web ブラウジング用途に特化。

Related Terms

Related Articles