
ルールベースのMITMエンジン。HTTP(S)リクエストとレスポンスの書き換え、リダイレクト、拒否を行い、JavaScriptルールをサポートします。
ルールベースのMITMエンジン。HTTP(S)リクエストおよびレスポンスの書き換え、リダイレクト、拒否を行い、JavaScriptをサポートします。
MITM技術の要件により、独自のルート証明書を生成して信頼する必要があります。
セキュリティ上の理由から、見知らぬ人が提供するルート証明書を盲目的に信頼しないでください。独自のルート証明書と秘密鍵を生成する必要があります。
経験のあるユーザーはOpenSSLを使用して必要な操作を実行できます。しかし、この分野の経験がないユーザーは、以下のコマンドを使用して必要なコンテンツを生成できます。生成された証明書と秘密鍵はcaディレクトリに保存されます。
good-mitm.exe genca
ブラウザでGood-MITMが提供するプロキシを使用した後、http://cert.mitm.plusにアクセスするだけで証明書を直接ダウンロードできます。これは、他のデバイスにサービスを提供する際に特に便利です。
必要に応じて、ルート証明書をオペレーティングシステムまたはブラウザの信頼ゾーンに追加できます。
Good-MITMを起動し、使用するルールファイルまたはディレクトリを指定します。
good-mitm.exe run -r rules
ブラウザまたはオペレーティングシステムで、Good-MITM が提供する HTTP プロキシを使用します: http://127.0.0.1:34567。
ドキュメントについては https://docs.mitmproxy.org/stable/howto-transparent/ を参照してください。
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
sudo sysctl -w net.ipv4.conf.all.send_redirects=0
sudo useradd --create-home mitm
sudo -u mitm -H bash -c 'good-mitm run -r rules/log.yaml -b 0.0.0.0:34567'
sudo iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner mitm --dport 80 -j REDIRECT --to-port 34567
sudo iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner mitm --dport 443 -j REDIRECT --to-port 34567
sudo ip6tables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner mitm --dport 80 -j REDIRECT --to-port 34567
sudo ip6tables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner mitm --dport 443 -j REDIRECT --to-port 34567
Rule は Good-MITM を操作するために使用されます。
有効なルールには以下のコンポーネントを含める必要があります:
Name:異なるルールを区別し、メンテナンスを容易にするために使用されます。Filter:一連の requests と responses から処理対象のコンテンツを選択するために使用されます。Action:redirect、reject、modification など、目的のアクションを実行するために使用されます。- name: "Block YouTube tracking"
mitm: "*.youtube.com"
filter:
url-regex: '^https?:\/\/(www|s)\.youtube\.com\/(pagead|ptracking)'
action: reject
さらに、有効なルールは以下の要件を満たす必要があります:
Filterは、処理が必要なリクエストとレスポンスを選択するために使用されます。
現在、Filterには以下の種類があります:
注意
現在のバージョンでは、domain関連の種類はhostフィールドにマッチしますが、これは通常結果に影響しません。 ウェブサイトが非標準ポートを使用している場合、ルールでポートを指定する必要があります。 この動作は将来のバージョンで最適化される予定です。
フィルターをallに指定すると、すべてのリクエストとレスポンスにマッチします。これは通常、ログ記録アクションを実行するために使用されます。
- name: "log"
filter: all
action:
- log-req
- log-res
domain はドメイン名に対して完全一致を実行します。
- name: "redirect"
filter:
domain: 'none.zu1k.com'
action:
redirect: "https://zu1k.com/"
domain-keyword はドメイン名に対してキーワードマッチを実行します。
- name: "reject CSDN"
filter:
domain-keyword: 'csdn'
action: reject
domain-prefix はドメイン名に対して前方一致を行います。
- name: "ad prefix"
filter:
domain-prefix: 'ads' // example: "ads.xxxxx.com"
action: reject
domain-suffix はドメイン名に対してサフィックスマッチを実行します。
- name: "redirect"
filter:
domain-suffix: 'google.com.cn'
action:
redirect: "https://google.com"
url-regex は URL 全体に対して正規表現マッチを実行します。
- name: "youtube tracking"
mitm: "*.youtube.com"
filter:
url-regex: '^https?:\/\/(www|s)\.youtube\.com\/(pagead|ptracking)'
action: reject
filters フィールドは単一フィルターと複数フィルターの両方をサポートしており、複数フィルター間の関係は OR です。
- name: "youtube-2"
mitm:
- "*.youtube.com"
- "*.googlevideo.com"
filters:
- url-regex: '^https?:\/\/[\w-]+\.googlevideo\.com\/(?!(dclk_video_ads|videoplayback\?)).+(&oad|ctier)'
- url-regex: '^https?:\/\/(www|s)\.youtube\.com\/api\/stats\/ads'
- url-regex: '^https?:\/\/(www|s)\.youtube\.com\/(pagead|ptracking)'
- url-regex: '^https?:\/\/\s.youtube.com/api/stats/qoe?.*adformat='
action: reject
同じアクションを持つ複数のルールは、メンテナンスを容易にするために単一のルールに集約できます。
Action は、リクエストまたはレスポンスに対して操作を実行するために使用されます。
現在、Action には以下のオプションがあります:
reject タイプは直接 502 ステータスコードを返し、特定のリクエストを拒否するために使用されます。トラッキングや広告のブロックに利用できます。
- name: "reject CSDN"
filter:
domain-keyword: 'csdn'
action: reject
redirect タイプはリダイレクトのために 302 ステータスコードを直接返します。
- name: "youtube-1"
filter:
url-regex: '(^https?:\/\/(?!redirector)[\w-]+\.googlevideo\.com\/(?!dclk_video_ads).+)(ctier=L)(&.+)'
action:
redirect: "$1$4"
modify-request はリクエストを変更するために使用します。具体的な変更ルールについては、Modify セクションを参照してください。
modify-response はレスポンスを変更するために使用します。具体的な変更ルールについては、Modify セクションを参照してください。
log-req はリクエストをログに記録するために使用し、log-res はレスポンスをログに記録するために使用します。
actions フィールドは単一のアクションと複数のアクションの両方をサポートします。複数のアクションを実行する必要がある場合は、配列を使用する必要があります。
- name: "youtube-1"
filter:
url-regex: '(^https?:\/\/(?!redirector)[\w-]+\.googlevideo\.com\/(?!dclk_video_ads).+)(ctier=L)(&.+)'
actions:
- log-req:
- redirect: "$1$4"
変更は、リクエストの変更やレスポンスの変更など、変更操作を実行するために使用されます。
変更対象コンテンツの位置に基づいて、モディファイアは以下のように分類できます:
TextModify は主にテキストの変更に使用されます。現在、2つの方法をサポートしています:
plain タイプの場合、コンテンツは指定されたテキストに直接設定されます。
- name: "modify response body plain"
filter:
domain: '126.com'
action:
modify-response:
body: "Hello 126.com, from Good-MITM"
置換は単純置換と正規表現置換の両方をサポートしています。
単純置換
- name: "modify response body replace"
filter:
domain-suffix: '163.com'
action:
modify-response:
body:
origin: "NetEase homepage"
new: "Good-MITM homepage"
正規表現による置換。
- name: "modify response body regex replace"
filter:
domain-suffix: 'zu1k.com'
action:
- modify-response:
body:
re: '(\d{4})'
new: 'maybe $1'
MapModify は、header や cookies などの辞書型のロケーションを変更するために使用されるモディファイアです。
key は辞書内のキーを表し、必ず指定する必要があります。