SMTPトンネルプロキシ – DPI回避のための高速SMTPベースSOCKS5

はじめに

DPI (Deep Packet Inspection) によってウェブトラフィックがブロックされる時代に、研究者やプライバシー擁護者は、目に見えずに高速で機能するソリューションが必要です。SMTPトンネルプロキシは、そのニッチを満たし、任意のTCPストリームをSMTP会話に変換し、SMTPで許可されているポート(通常は25、587、または465)を通過させることでデータを通過させます。純粋なPythonで構築されており、迅速にデプロイでき、カーネル変更を必要としません。

問題定義

  • 企業や国のファイアウォールはポート80/443上のトラフィックをフィルタリングし、HTTPSをブロックします。
  • 従来のVPNやSSHトンネルはDPIにより検出またはスロットルされます。
  • Censorship(検閲)回避には、無害に見えるツールが必要です。

解決策: 標準のSMTPプロトコルをカバーとして使用し、TLSを暗号化に活用し、ファイアウォールがほとんど検査しない標準メールリレーポートを利用します。

アーキテクチャ概要

ブラウザ   →   SOCKS5クライアント   →   SMTPトンネルサーバー   →   インターネット
     TCPトラフィック   SMTPとして偽装   TLS越し   通常のアウトバウンド

主要構成要素: * サーバー – TCP 587でリッスンし、STARTTLSハンドシェイクを実行、そしてカスタムバイナリプロトコルに切り替えます。 * クライアント – デフォルトでポート1080を使用するローカルSOCKS5プロキシ、サーバーを経由してトラフィックを転送します。 * ユーザーレイヤ – 各ユーザーには一意の事前共有キー、オプションのIPホワイトリスト、ユーザーごとのロギングが設定されます。

コア機能

機能 説明
TLS 1.2+ STARTTLS後に全データを暗号化
DPI回避 ハンドシェイクを実際のPostfixサーバに似せる
高速 最小オーバーヘッドでのバイナリストリーミング
マルチユーザー 各ユーザー別シークレット、IP制限、ロギング
自動再接続 クライアントがドロップした際に再接続
ワンライナーインストール curl … | sudo bash
Systemdサービス バックグラウンドで実行し、再起動時に再起動

クイックスタートガイド

1. サーバー設定(Linux VPS)

# 1. VPSを指すドメインを選択(DuckDNS, No-IP, など)
# 2. ワンライナーインストーラを実行
curl -sSL https://raw.githubusercontent.com/x011/smtp-tunnel-proxy/main/install.sh | sudo bash
インストーラの機能: * すべての必要ファイルをダウンロード。 * ドメイン名を入力を求める。 * TLS証明書を生成。 * 最初のユーザーを作成。 * ファイアウォールを設定し、systemdサービスを開始。

2. 追加ユーザーを作成

sudo smtp-tunnel-adduser alice   # クライアント設定を含むZIPを作成
sudo smtp-tunnel-adduser bob
ZIPには client.pystart.sh/.bat、ユーザー秘密情報を含む config.yaml が含まれます。

3. クライアント設定(Windows/Linux/macOS)

オプションA – 簡単(推奨) 1. alice.zip を解凍。 2. start.bat (Windows) または ./start.sh (Linux/macOS) を実行。

オプションB – 手動

cd alice
pip install -r requirements.txt
python client.py
クライアントは自動で 127.0.0.1:1080 にSOCKS5リスナーを起動します。

4. アプリケーションをSOCKSプロキシへ接続

  • ブラウザ → http://127.0.0.1:1080 (Firefox, Chrome)。
  • システム全体 → 環境変数 ALL_PROXY=socks5://127.0.0.1:1080
  • curl -x socks5://127.0.0.1:1080 https://ifconfig.me でテスト。

高度な設定

  • IPホワイトリストusers.yaml を編集し、各ユーザーの下でCIDRブロックを追加。
  • ロギング – ユーザー単位で logging: true/false を切替。
  • カスタムポートconfig.yamlsocks_port または server_port を変更。
  • アップグレードsmtp-tunnel-update は最新コードを同期しつつ設定を保持します。

セキュリティ推奨事項

  1. ドメインを使用 – TLS証明書はホスト名を必要とし、IPアドレスだと検証エラーが発生します。
  2. ca.crt を保持 – クライアントにCAファイルを配布しMITMを防止。
  3. IP制限 – 既知のクライアントIPをホワイトリストに設定できる場合は設定。
  4. users.yaml を保護 – ファイル権限を 600 に設定。
  5. 機密ユーザーのログを無効化 – ログ漏れを防止。

トラブルシューティングFAQ

症状 典型的な原因 対処
接続拒否 サーバーが稼働していない sudo systemctl status smtp-tunnel または ps aux | grep server.py
認証失敗 シークレット不一致 users.yaml を確認し、smtp-tunnel-adduser で再生成
IPがホワイトリストにない 現在のIPがリストに無い users.yaml を更新またはホワイトリストキーを削除
証明書検証失敗 IP使用、ドメイン不一致 server_host が証明書と一致するようにし、ca.crt をコピー

結論

SMTPトンネルプロキシ は、正当なSMTPトラフィックに偽装された高速信頼性の高いトンネルを構築できることを示しています。純粋なPython実装で、ワンライナーインストーラが簡単で、堅牢な機能セットがあり、開発者、システム管理者、プライバシー擁護者が複雑なVPN設定なしに制限ネットワークを回避するには最適です。

リポジトリのフォーク、改善への貢献、または自身の検閲回避ニーズに合わせたカスタマイズを自由に行ってください。楽しいトンネリングを!

この記事を共有