
高速な秘密トンネルで、TCPトラフィックをSMTPメール通信として偽装し、Deep Packet Inspection(DPI)ファイアウォールをバイパスします。
TCPトラフィックをSMTPメール通信に偽装してDPI(深いパケット検査)ファイアウォールをバイパスする、高速な隠蔽トンネルです。
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│ アプリケーション │─────▶│ クライアント │─────▶│ サーバー │─────▶│ インターネット │
│ (ブラウザ) │ TCP │ SOCKS5:1080 │ SMTP │ ポート587 │ TCP │ │
│ │◀─────│ │◀─────│ │◀─────│ │
└─────────────┘ └─────────────┘ └─────────────┘ └──────────────┘
│ │
│ メールトラフィックに見える │
│ │
▼ ▼
┌────────────────────────────────┐
│ DPI ファイアウォール │
│ ✅ 見える: 通常のSMTPセッション │
│ ❌ 見えない: トンネルデータ │
└────────────────────────────────┘
| 機能 | 説明 |
|---|---|
| 🔒 TLS暗号化 | STARTTLS後、すべてのトラフィックをTLS 1.2+で暗号化 |
| 🎭 DPI回避 | 初期ハンドシェイクは本物のSMTPサーバー(Postfix)を模倣 |
| ⚡ 高速 | ハンドシェイク後はバイナリストリーミングプロトコル - オーバーヘッド最小 |
| 👥 マルチユーザー | ユーザーごとのシークレット、IPホワイトリスト、ログ設定 |
| 🔑 認証 | HMAC-SHA256を使用したユーザーごとの事前共有鍵 |
| 🌐 SOCKS5プロキシ | 標準プロキシインターフェース - あらゆるアプリケーションで動作 |
| 📡 多重化 | 単一トンネル上で複数接続 |
| 🛡️ IPホワイトリスト | IPアドレス/CIDRによるユーザーごとのアクセス制御 |
| 📦 簡単インストール | systemdサービスによるワンライナーサーバーインストール |
| 🎁 クライアントパッケージ | ユーザーごとに自動生成されるZIPファイル |
| 🔄 自動再接続 | 接続断時にクライアントが自動的に再接続 |
📚 詳細な技術的詳細、プロトコル仕様、セキュリティ分析については、TECHNICAL.mdを参照してください。
VPSを指す無料ドメインを取得します:
例: myserver.duckdns.org → 203.0.113.50(VPSのIP)
curl -sSL https://raw.githubusercontent.com/x011/smtp-tunnel-proxy/main/install.sh | sudo bash
インストーラは以下を行います:
これだけです! サーバーの準備は完了です。
smtp-tunnel-adduser bob # ユーザー追加 + クライアントZIP生成
smtp-tunnel-listusers # 全ユーザー一覧表示
smtp-tunnel-deluser bob # ユーザー削除
smtp-tunnel-update # コードのみ更新、設定/証明書/ユーザーは保持
username.zip ファイルを入手する| プラットフォーム | 実行方法 |
|---|---|
| 🪟 Windows | start.bat をダブルクリック |
| 🐧 |
ランチャーは自動的に依存関係をインストールし、クライアントを起動します。
✅ 以下のように表示されるはずです:
SMTP Tunnel Proxy Client
User: alice
[INFO] Starting SMTP Tunnel...
[INFO] SOCKS5 proxy will be available at 127.0.0.1:1080
Connecting to myserver.duckdns.org:587
Connected - binary mode active
SOCKS5 proxy on 127.0.0.1:1080
cd alice
pip install -r requirements.txt
python client.py
# ファイルをダウンロード
scp [email protected]:/etc/smtp-tunnel/ca.crt .
# config.yaml を作成:
cat > config.yaml << EOF
client:
server_host: "myserver.duckdns.org"
server_port: 587
socks_port: 1080
username: "alice"
secret: "your-secret-from-admin"
ca_cert: "ca.crt"
EOF
# クライアントを実行
python client.py -c config.yaml
SOCKS5プロキシを 127.0.0.1:1080 に設定します。
127.0.0.1、ポート: 1080127.0.0.1:1080 のプロファイルを作成設定 → ネットワークとインターネット → プロキシ → 手動セットアップ → socks=127.0.0.1:1080
システム環境設定 → ネットワーク → 詳細 → プロキシ → SOCKSプロキシ → 127.0.0.1:1080
export ALL_PROXY=socks5://127.0.0.1:1080
# curl
curl -x socks5h://127.0.0.1:1080 https://ifconfig.me
# git
git config --global http.proxy socks5://127.0.0.1:1080
# 環境変数
export ALL_PROXY=socks5://127.0.0.1:1080
# VPSのIPが表示されるはず
curl -x socks5://127.0.0.1:1080 https://ifconfig.me
config.yaml)users.yaml)各ユーザーは個別の設定を持つことができます:
users:
alice:
secret: "auto-generated-secret"
# whitelist: # オプション: 特定のIPに制限
# - "192.168.1.100"
# - "10.0.0.0/8" # CIDR表記対応
# logging: true # オプション: falseでこのユーザーのログを停止
bob:
secret: "another-secret"
whitelist:
- "203.0.113.50" # BobはこのIPからのみ接続可能
logging: false # Bobのアクティビティをログに記録しない
| オプション | 説明 | デフォルト |
|---|---|---|
secret | ユーザーの認証シークレット |
# 状態確認
sudo systemctl status smtp-tunnel
# 設定変更後に再起動
sudo systemctl restart smtp-tunnel
# ログ表示
sudo journalctl -u smtp-tunnel -n 100
# アンインストール
sudo /opt/smtp-tunnel/uninstall.sh
python server.py [-c CONFIG] [-d]
-c, --config 設定ファイル(デフォルト: config.yaml)
-d, --debug デバッグログを有効にする
python client.py [-c CONFIG] [--server HOST] [--server-port PORT]
[-p SOCKS_PORT] [-u USERNAME] [-s SECRET] [--ca-cert FILE] [-d]
-c, --config 設定ファイル(デフォルト: config.yaml)
--server サーバーのドメインを上書き
--server-port サーバーのポートを上書き
-p, --socks-port ローカルのSOCKSポートを上書き
-u, --username ユーザー名
-s, --secret シークレットを上書き
--ca-cert CA証明書のパス
-d, --debug デバッグログを有効にする
smtp-tunnel-adduser <username> [-u USERS_FILE] [-c CONFIG] [--no-zip]
新しいユーザーを追加し、クライアントパッケージを生成
smtp-tunnel-deluser <username> [-u USERS_FILE] [-f]
ユーザーを削除(-f で確認をスキップ)
smtp-tunnel-listusers [-u USERS_FILE] [-v]
全ユーザーを一覧表示(-v で詳細情報)
smtp-tunnel-update
サーバーを最新バージョンに更新(設定/証明書/ユーザーは保持)
smtp_proxy/
├── 📄 server.py # サーバー(VPS上で実行)
├── 📄 client.py # クライアント(ローカルで実行)
├── 📄 common.py # 共有ユーティリティ
├── 📄 generate_certs.py # 証明書生成ツール
├── 📄 config.yaml # サーバー/クライアント設定
├── 📄 users.yaml # ユーザーデータベース
├── 📄 requirements.txt # Python依存関係
├── 📄 install.sh # ワンライナーサーバーインストーラ
├── 📄 smtp-tunnel.service # systemdユニットファイル
├── 🔧 smtp-tunnel-adduser # ユーザー追加スクリプト
├── 🔧 smtp-tunnel-deluser # ユーザー削除スクリプト
├── 🔧 smtp-tunnel-listusers # ユーザー一覧スクリプト
├── 🔧 smtp-tunnel-update # サーバー更新スクリプト
├── 📄 README.md # このファイル
└── 📄 TECHNICAL.md # 技術文書
/opt/smtp-tunnel/ # アプリケーションファイル
/etc/smtp-tunnel/ # 設定ファイル
├── config.yaml
├── users.yaml
├── server.crt
├── server.key
└── ca.crt
/usr/local/bin/ # 管理コマンド
├── smtp-tunnel-adduser
├── smtp-tunnel-deluser
├── smtp-tunnel-listusers
└── smtp-tunnel-update
systemctl status smtp-tunnel または ps aux | grep server.pynetstat -tlnp | grep 587ufw statususername と secret が users.yaml と一致しているか確認smtp-tunnel-listusers -v を実行してユーザーが存在するか確認10.0.0.0/8)server_host が証明書のホスト名と一致していることを確認ca.crt を取得していることを確認# 詳細ログを有効にする
python server.py -d
python client.py -d
# systemdログを表示
journalctl -u smtp-tunnel -f
ca_cert を使用するsmtp-tunnel-adduser を使用するusers.yaml を保護する(すべてのユーザーシークレットを含むため、chmod 600)logging: false でログを無効化する📚 詳細なセキュリティ分析と脅威モデルについては、TECHNICAL.mdを参照してください。
このプロジェクトは教育目的および許可された使用のために提供されています。責任を持って、適用される法律に従って使用してください。
このツールは、正当なプライバシーと検閲回避の目的のために設計されています。ユーザーは、自身の使用が適用される法律や規制に準拠していることを確認する責任を負います。
インターネットの自由を愛して ❤️
./start.sh を実行 |
| 🍎 macOS | ./start.sh を実行 |
| オプション | 説明 | デフォルト |
|---|
host | 待受インターフェース | 0.0.0.0 |
port | 待受ポート | 587 |
hostname | SMTPホスト名(証明書と一致する必要あり) | mail.example.com |
cert_file | TLS証明書のパス | server.crt |
key_file | TLS秘密鍵のパス | server.key |
users_file | ユーザー設定ファイルのパス | users.yaml |
log_users | グローバルログ設定 | true |
| 必須 |
whitelist | このユーザーに許可するIP(CIDR対応) | すべてのIP |
logging | このユーザーのアクティビティログを有効にする | true |
| オプション | 説明 | デフォルト |
|---|
server_host | サーバーのドメイン名 | 必須 |
server_port | サーバーのポート | 587 |
socks_port | ローカルのSOCKS5ポート | 1080 |
socks_host | ローカルのSOCKS5インターフェース | 127.0.0.1 |
username | ユーザー名 | 必須 |
secret | 認証シークレット | 必須 |
ca_cert | 検証用のCA証明書 | 推奨 |