
규칙 기반 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는 주로 텍스트를 수정하는 데 사용됩니다. 현재 두 가지 방법을 지원합니다:
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는 딕셔너리의 키를 나타내며 반드시 지정해야 합니다.
value는 TextModify 유형이며 위에서 언급한 메서드를 따릅니다.