Skip to content

セキュリティモデル ​

mqproxy は 信頼されたプロキシ モデルを採用します。mqproxy-client、mqproxy-server、そしてその間の MPQUIC コネクションは信頼されます。TCP プロキシモードと透過キャプチャモード (--mitm なし) では、アプリケーション↔オリジンの TLS はエンドツーエンドに保たれます (mqproxy は平文を一切見ず、生の TLS バイトを不透明にリレーします)。証明書ピンニングを行うアプリケーションも引き続き動作します。

HTTP リクエスト実行ゲートウェイは明示的な委譲モデルです — クライアントは、オリジン TLS を確立し (常に検証する) 信頼されたゲートウェイへ HTTP リクエストの実行を委譲します — 透過的な MITM ではありません。ゲートウェイリクエストは個別に認証されます (X-Mq-Auth、リクエストごと)。Authorization はオリジン用に予約され転送されますが、Cookie と X-Mq-* がゲートウェイを離れることは決してありません。

TLS MITM イングレス ​

TLS MITM イングレス (--mitm、オプトイン) は、オペレータの CA がローカルにインストールされたマネージドデバイス向けの オペレータ管理/同意済みエンドポイント モデルです — 企業プロキシや個人 VPN の姿勢であり、第三者への透過的な攻撃ではありません。クライアントはその CA からホストごとのリーフを偽造し、ブラウザの TLS を HTTP/2 として終端し、各リクエストをゲートウェイトンネルにマッピングします。

その信頼の前提:

  • CA 秘密鍵が起点 です (暗号化されていない PKCS#8 ファイルで、実行ユーザーの所有、グループ/他ユーザーがアクセス不可、シンボリックリンク不可。mqproxy の実行中はメモリ上に残ります)。
  • CA は X.509 の nameConstraints 拡張で自分のドメインに限定できます。範囲外のホストは mqproxy が不透明にリレーします。
  • ブラウザが提供する X-Mq-* ヘッダは 常に除去 されます (制御として解釈されることは決してなく、クライアントが自身の x-mq-auth を注入)。
  • 機能は フェイルクローズ です (設定不備は起動エラーであり、決して暗黙のパススルーにならず、サイズ上限付きの ClientHello 読み込みと、ヘッダ・ストリーム・コネクションの制限を伴う)。
  • 有効なホスト名に対する HTTP/2 の TLS クライアントだと肯定的に確認できないもの (非 h2、非 TLS、SNI なし、ignore 対象のホストなど) は、不透明にリレーされ、検査されません。

証明書ピンニングされたホストは --ignore-host(s) で除外でき、不透明にリレーされてオリジンの本物の証明書がクライアントに届きます。

既知の制限: 受信側のデバイスがトンネルより遅い場合、クライアントの HTTP/3 受信側は大きなダウンロードをメモリに溜め込みます。xquic 上流の修正が入るまでの制限です (詳細はガイド)。運用上の詳細は TLS MITM ガイド を参照してください。

ライセンス ​

Apache-2.0。LICENSE を参照してください。

免責事項 ​

mqproxy は Apache License 2.0 の下でライセンスされ、現状有姿("AS IS")で提供され、いかなる種類の保証も条件も伴いません。

mqproxy の利用は自己責任で行ってください。その適合性・セキュリティ・運用上の安全性の検証は、特に本番環境や商用環境において、利用者が単独で責任を負うものとします。

謝辞 ​

  • XQUIC (Alibaba) — QUIC/MPQUIC トランスポート。mp0rta フォーク 経由。
  • BoringSSL — TLS バックエンド。
  • nghttp2 — C ビルドの TLS MITM イングレスの HTTP/2 フレーミング (Rust バイナリは h2 クレートと rustls を使用)。

Apache License 2.0 に基づき公開