Docker と mitmproxy の WireGuard モード(--mode wireguard)を利用し、OSプロキシ設定を無視するアプリ(Flutter等)のHTTPS通信をネットワーク(VPN)レベルで傍受・解析するための超シンプルなプロキシ環境です。
物理的な専用デバイスや複雑なネットワーク設定(iptables 等)を必要とせず、お使いの PC/Mac 1台とスマホがあればすぐに透過プロキシ環境を構築できます。
- Docker Desktop (Mac / Windows) または Docker (Linux)
- スマートフォン側: 公式の WireGuard アプリをインストールしておいてください。
リポジトリのルートディレクトリで以下のコマンドを実行し、テンプレートから .env ファイルを作成します。
cp .env.example .env作成した .env ファイルをテキストエディタで開き、Web UI のログインパスワード(WEB_PASSWORD)を任意の安全な値に変更します。
# Web UI のログインパスワード
WEB_PASSWORD=your_secure_password以下のコマンドを実行します。
docker compose up -d- PC/Mac のブラウザで
http://localhost:8081にアクセスします。 .envに設定したパスワード(デフォルト:password)を入力してログインします。- ログインすると、画面に WireGuard の接続用 QR コード が表示されます!
Docker コンテナ内で動作している関係上、mitmproxy から出力される QR コード内の接続先(Endpoint)は、コンテナ内のローカルIP(172.20.0.X:51820 等)になっています。
スマホから Mac/PC の Docker へ正しくパケットを送るため、スキャン後にスマホ側でエンドポイントを手動で書き換える必要があります。
- スマホの WireGuard アプリを起動し、右上の「+」ボタンから 「QRコードから作成」 を選択します。
- ブラウザ画面上の QR コードをスキャンし、適当なトンネル名(例:
mitm-proxy)を入力して一旦保存します。
- 登録したトンネル(
mitm-proxy)の画面を開き、右上の 「編集(Edit)」 をタップします。 [Peer]セクションにあるEndpoint欄を見つけます(デフォルトでは172.20.0.2:51820等のコンテナ内IPになっています)。- この値を あなたの PC/Mac の実際のローカル IP アドレス に書き換えます。
例:
192.168.1.150:51820 - 右上の「保存(Save)」をタップし、VPN をオンにします。
💡 ローカル IP アドレスの確認方法
- Mac: ターミナルで
ipconfig getifaddr en0を実行するか、「システム設定」→「Wi-Fi」→「詳細...」から確認。- Windows: コマンドプロンプトで
ipconfigを実行し、IPv4 アドレスを確認。- Linux: ターミナルで
hostname -Iを実行。
VPN をオンにした状態で、スマホのブラウザ(Safari/Chrome)から以下にアクセスします。
http://mitm.it
画面の指示に従ってプロファイルをダウンロードし、以下の手順で証明書を信頼してください。
- iOS の場合:
- 「設定」→「プロファイルがダウンロード済み」から mitmproxy をインストール。
- 「設定」→「一般」→「情報」→「証明書信頼設定」(一番下)を開く。
mitmproxyのスイッチをオン(信頼)にする。
- Android の場合:
- 「設定」→「セキュリティ」→「暗号化と認証情報」→「資格情報のインストール」→「CA証明書」から、ダウンロードした証明書を選択してインストール。
VPN 接続と証明書の設定が完了したら、mitmweb(http://localhost:8081)のダッシュボードに自動的にトラフィックが流れ込みます。
スマホでアプリを操作すると、SSL/TLS で暗号化されていたはずの通信も含めて、リクエストとレスポンスがリアルタイムに平文で表示されます!
終了する際は、スマホの WireGuard アプリで VPN をオフにし、PC/Mac 側で以下のコマンドを実行してコンテナを停止します。
docker compose down