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
2. 追加ユーザーを作成
sudo smtp-tunnel-adduser alice # クライアント設定を含むZIPを作成
sudo smtp-tunnel-adduser bob
client.py、start.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
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.yamlのsocks_portまたはserver_portを変更。 - アップグレード –
smtp-tunnel-updateは最新コードを同期しつつ設定を保持します。
セキュリティ推奨事項
- ドメインを使用 – TLS証明書はホスト名を必要とし、IPアドレスだと検証エラーが発生します。
ca.crtを保持 – クライアントにCAファイルを配布しMITMを防止。- IP制限 – 既知のクライアントIPをホワイトリストに設定できる場合は設定。
users.yamlを保護 – ファイル権限を600に設定。- 機密ユーザーのログを無効化 – ログ漏れを防止。
トラブルシューティング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設定なしに制限ネットワークを回避するには最適です。
リポジトリのフォーク、改善への貢献、または自身の検閲回避ニーズに合わせたカスタマイズを自由に行ってください。楽しいトンネリングを!