mitmproxy とは
mitmproxy はペネトレーションテスターとソフトウェア開発者のための、TLS に対応した対話型のインターセプト HTTP プロキシです。ブラウザ、スマートフォン、CLI、コンテナ丸ごとをこれに向ければ、すべてのリクエストとレスポンスが目の前を通ります。ヘッダー、ボディ、タイミング、TLS の詳細。飛んでいる途中のリクエストを止めて書き換えてから送り出すことも、100 回リプレイすることも、数行の Python でトラフィックを自動的に書き換えることもできます。HTTP/1、HTTP/2、HTTP/3、WebSocket、生の TLS を話し、通常、透過、リバース、アップストリーム、SOCKS5、WireGuard、ローカルキャプチャの各モードで動きます。1 つのパッケージにフロントエンドが 3 つ。対話型コンソール UI の mitmproxy、同じものをブラウザで使う mitmweb、そして HTTP 版 tcpdump とも言えるコマンドライン版の mitmdump です。
⚡ mitmproxy の主な機能
🔓 TLS の中まで見える
mitmproxy は初回起動時に ~/.mitmproxy/ に自前の認証局を作り、訪れるホストごとにその場で証明書を発行します。クライアントでその CA を一度信頼すれば、HTTPS の通信がリクエスト単位で読めるようになります。
✋ 止めて、書き換える
コンソールで i を押して ~d api.example.com のようなフィルターを渡すと、合致したリクエストがその場で止まります。e でメソッド、URL、ヘッダー、ボディを編集し、a で送り出します。
🔁 何でもリプレイ
r はコンソールからリクエストを 1 件リプレイします。-w でセッションを保存しておけば、--client-replay でクライアント側を再生したり、--server-replay で記録したレスポンスをクライアントに返したりできます。
🐍 Python アドオン
-s script.py でスクリプトを読み込めば、すべてのリクエスト、レスポンス、WebSocket メッセージ、TLS ハンドシェイクにフックできます。ヘッダーの書き換え、エンドポイントのモック、トラッキングの除去、ファイルへのログ出力。アドオン API は mitmproxy 自身の機能が使っているのと同じものです。
🧭 あらゆるプロキシモード
通常、透過、リバース(--mode reverse:https://example.com)、アップストリーム、SOCKS5、スマートフォンや VM 向けの WireGuard、そして単一アプリケーションのローカルキャプチャ。--mode を複数回渡せば、いくつものモードを同時に動かせます。
🌐 コンソール、Web、ヘッドレス
ターミナルや SSH セッションにはキーボード操作のコンソール、クリックで操作するフロー一覧には http://127.0.0.1:8081 の mitmweb、スクリプトや CI ジョブ、無人の長時間キャプチャには mitmdump。
apt upgrade を実行するだけで、常に最新版を使い続けられます。
📦 deb.griffo.io からインストールする
ステップ 1: リポジトリを追加する
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo apt updateinstall -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
apt updatesudo apt install extrepo
sudo extrepo enable griffo
sudo apt update🆓 ずっと無料のミラーがあります。 deb-free.griffo.io は、アカウントもサブスクリプションもなしでパッケージをずっと無料で配布しています。上流より最大2か月遅れ、セキュリティ修正は即座に公開されます。現在収録しているのは cliamp、Ghostty、lazydocker、Oh My Posh、Uncloud と Zed です。mitmproxy は含まれていないため、今日入手する方法は上のリポジトリだけですが、ご要望があれば追加できます。
🧩 extrepo オプションについて。 extrepo は外部リポジトリを扱う Debian 標準のツールです。署名済みメタデータと照合して鍵を検証したうえで、sources ファイルの作成と署名鍵のインストールを代わりに行います。このリポジトリは griffo、ずっと無料のミラーは griffo-free という名前で登録されているので、Debian(bookworm、trixie、forky、sid)では上のコマンドだけで設定は完了です。
extrepo が用意するのは sources ファイルと鍵だけなので、サブスクリプションの認証情報は引き続き /etc/apt/auth.conf.d/deb.griffo.io.conf に書きます。extrepo は Debian のスイート向けメタデータしか公開していないため Ubuntu は対象外です。Ubuntu では sudo または root のコマンドを使ってください。
ステップ 2: mitmproxy をインストールする
# 最新の mitmproxy をインストール
sudo apt install mitmproxy
# パッケージは 1 つ、コマンドは mitmproxy、mitmweb、mitmdump の 3 つ。
# Python と OpenSSL を同梱しているので、ほかには何も引き込みません
# インストールを確認
mitmproxy --version
mitmdump --version# 最新の mitmproxy をインストール
apt install mitmproxy
# パッケージは 1 つ、コマンドは mitmproxy、mitmweb、mitmdump の 3 つ。
# Python と OpenSSL を同梱しているので、ほかには何も引き込みません
# インストールを確認
mitmproxy --version
mitmdump --versionステップ 3: 最初の起動
# コンソール UI を起動。ポート 8080 で待ち受けます
mitmproxy
# あるいは Web UI。http://127.0.0.1:8081 が開きます
mitmweb
# 別のターミナルから、プロキシ経由でリクエストを送る
curl -x http://127.0.0.1:8080 http://example.com
# 初回起動で ~/.mitmproxy/ に CA ができています。クライアントを
# プロキシ経由にして http://mitm.it を開けばそのクライアントに入れられ、
# このマシン全体で信頼させるならこうします
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
sudo update-ca-certificates# コンソール UI を起動。ポート 8080 で待ち受けます
mitmproxy
# あるいは Web UI。http://127.0.0.1:8081 が開きます
mitmweb
# 別のターミナルから、プロキシ経由でリクエストを送る
curl -x http://127.0.0.1:8080 http://example.com
# 初回起動で ~/.mitmproxy/ に CA ができています。クライアントを
# プロキシ経由にして http://mitm.it を開けばそのクライアントに入れられ、
# このマシン全体で信頼させるならこうします
cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
update-ca-certificates🎯 基本的な使用例
通信をキャプチャする:
# 別のポートで待ち受ける
mitmproxy --listen-port 9090
# 1 つのコマンドだけをプロキシ経由にする
HTTPS_PROXY=http://127.0.0.1:8080 curl https://example.com
# UI なしで、すべてをファイルに記録する
mitmdump -w session.mitm
# 1 つのホスト宛てのリクエストだけを表示する
mitmdump "~d api.example.com"
# ブラウザの開発者ツールやバグ報告用に HAR ファイルを保存する
mitmdump --set hardump=./session.harリプレイと調査:
# 保存したセッションをコンソールで開く
mitmproxy -r session.mitm
# プロキシを起動せずに、その中の POST リクエストを表示する
mitmdump -n -r session.mitm "~m POST"
# 記録したリクエストをもう一度送る
mitmdump -n --client-replay session.mitm
# 本物のサーバーの代わりに、記録したレスポンスでクライアントに答える
mitmdump --server-replay session.mitmプロキシモードとアドオン:
# 1 台のサーバーの前に立つリバースプロキシ
mitmproxy --mode reverse:https://example.com --listen-port 8443
# SOCKS5 と通常のプロキシを同じインスタンスで
mitmdump --mode socks5 --mode regular
# WireGuard: mitmweb に出る QR コードをスマートフォンの WireGuard アプリで読む
mitmweb --mode wireguard
# Python アドオンで通信を書き換える。たとえば addon.py の中身は:
# def response(flow):
# flow.response.headers["x-seen-by"] = "mitmproxy"
mitmdump -s addon.py🔧 ツール連携
mitmproxy は、あなたがすでに使っている道具と、それらが話すネットワークの間に入ります:
- curl、wget、たいていの CLI:
HTTP_PROXYとHTTPS_PROXYを尊重するものなら環境変数 1 つで mitmproxy を通り、curl -xならコマンド単位で通せます - ブラウザとスマートフォン: プロキシをポート 8080 に向けて
http://mitm.itを開き、そのプラットフォーム用の CA を入れます。Android や iOS なら、プロキシ設定なしで WireGuard モードも使えます - ブラウザの開発者ツール:
hardumpは HAR ファイルを書き出し、mitmproxy は-rで HAR ファイルを読み戻せるので、キャプチャを Chrome や Firefox との間で双方向にやり取りできます - Python アドオン:
-sで読み込むスクリプトは mitmproxy 同梱の Python の中で動くので、標準ライブラリと mitmproxy が同梱しているものは import できますが、システムのpython3向けに入れたパッケージは使えません - テストスイートと CI:
mitmdumpに--server-replayを付ければ記録したレスポンスを返すので、不安定な外部 API も結合テストで再現可能になります
🚀 deb.griffo.io を選ぶ理由
- 公式 Debian: bookworm、forky、sid には 2022 年の 8.1.1、現行安定版の trixie にはそもそも収録されていません
- pipx や pip: 最新にはなりますが、手元のシステム Python に縛られ、apt からは見えません
- 上流の tarball: このパッケージと同じスタンドアロンビルドですが、展開も更新も手作業です
- deb.griffo.io: 最新版を自動更新でお届け
- ✅ アーカイブより何年も先: 8.1.1 ではなく mitmproxy の最新リリース。HTTP/3、WireGuard モード、ローカルキャプチャモードも入っています
- ✅ 1 つのパッケージに 3 つのコマンド:
mitmproxy、mitmweb、mitmdumpがすべて PATH に入ります。どのチュートリアルも使っている名前です - ✅ 自動更新: 上流のリリースから数時間以内にパッケージを更新
- ✅ 完全なパッケージ: 上流公式の自己完結型 Linux ビルド。足しても当ててもいません
- ✅ Python 依存なし: Python と OpenSSL を同梱しているので、システムの Python パッケージとぶつかることも、その更新を待つこともありません
- ✅ 2 つのアーキテクチャ: amd64 と arm64。どのスイートでも同じスタンドアロンビルドです
- ✅ マルチディストリビューション: Bookworm、Trixie、Forky、Sid で動作
- ✅ 手間のかからない運用: 更新は通常の apt コマンドだけ
📦 パッケージのビルドリポジトリ
Debian パッケージは、この GitHub リポジトリで自動的にビルド・管理されています:
- 🕵️ mitmproxy-debian - 最新リリースのビルド
🔗 関連パッケージ
deb.griffo.io では、こちらも配布しています:
- yq - キャプチャから取り出した JSON ボディの検索と整形に
- Headscale - セルフホストの WireGuard ネットワーク。トンネルの向こう側に
- k9s - 結局プロキシすることになる Kubernetes サービスのためのターミナル UI
- lazydocker - 通信をデバッグしているコンテナのためのターミナル UI