mitmproxy를 개인 방화벽으로 사용
자체 인증 기관을 정의하고 이 새로운 기관을 신뢰하도록 브라우저에 명시적으로 지시하기 때문에 이 연결이 TLS를 통해 이루어진 경우에도 mitmproxy가 브라우저와 원격 웹 사이트 간의 트래픽을 스누핑하도록 허용할 수 있습니다. 또한 강력한 애드온 시스템을 사용하여 데이터 스트림을 변조하고 예를 들어 리소스를 자동으로 저장하고 일부 다운로드를 거부하고 헤더를 수정하고 쿠키를 삭제하는 등의 작업을 수행할 수도 있습니다. 이러한 스크립트는 전용 mitmproxy Python API를 사용하는 간단한 Python 스크립트입니다. .
이것은 디지털 마케팅 서비스와 같은 성가신 모든 광고 리소스를 제거하기 위해 작은 개인 방화벽을 구현하는 간단한 방법을 개발하는 아이디어를 주었습니다. 3개의 mitmproxy 명령 중 하나를 사용하면 Chrome 개발자 메뉴를 사용할 수 있는 것처럼 웹사이트로 이동할 때 다운로드되는 리소스의 수를 알 수 있습니다.
시작되면 mitmproxy가 브라우저와 원격 사이트 간의 모든 https 트래픽을 보고 가로챌 수 있습니다. 따라서 다른 사람이 구성을 사용하지 못하도록 필요한 모든 보안 조치를 취해야 합니다.
그럼 조금 더 자세히 알아보도록 하겠습니다.
첫 번째 단계
./mitmdump
기본적으로 8080 TCP 포트를 수신합니다.
google-chrome --proxy-server="http://127.0.0.1:8080"
mitmproxy-ca-cert.pem
Note: I didn't try to install the CA file for other browsers, but it seems a little bit trickier.
데이터 변조
애드온은 https 트래픽을 가져오거나 수정하는 데 사용되는 간단한 Python 스크립트입니다. 애드온 샘플 목록은 다음 위치에 있습니다. https://docs.mitmproxy.org/stable/addons-examples/
이 샘플 애드온은 URL 정규식 목록에 따라 리소스를 차단하는 데 사용됩니다. 다음과 같이 확실히 향상될 수 있습니다.
"""
Block URLs matching a regex, by just returning an HTTP 404 code. As addons can be called with an argument,
the file containing the URLs is hardcoded, but could be extracted from an environment variable for example.
Unfortunately in Python, contrary to Rust, you can't define a regex set and try to match any regex for a string.
"""
import re
from mitmproxy import http
from mitmproxy import ctx
class BlockResource:
def __init__(self):
# define a new list for holding all compiled regexes. Compilation is done once when the addon
# is loaded
self.urls = []
# read the configuration file having all string regexes
for re_url in open('urls.txt'):
self.urls.append(re.compile(re_url.strip()))
# log how many URLS we have read
ctx.log.info(f"{len(self.urls)} urls read")
def response(self, flow):
# test if the request URL is matching any of the regexes
if any(re.search(url, flow.request.url) for url in self.urls):
ctx.log.info(f"found match for {flow.request.url}")
flow.response = http.HTTPResponse.make(404)
addons = [
BlockResource()
]
urls.txt에 대한 샘플:
scorecardresearch\.com
geo\.yahoo\.com
adversting\.
ads\.
\.taboola\.
\.doubleclick\.
\.xiti\.
criteo
\.pubmatic\.
\.chartbeat\.net
\.twimg\.com
\.keywee\.co
\.\w+adserver\.com
outbrain
\.bouncex\.
이제 -s 매개변수를 사용하여 mitmproxy를 시작하십시오.
./mitmdump -s ./block-urls.py
확실히 많은 URL 정규식의 경우 Python이 일치하는 정규식까지 모든 정규식을 일치시켜야 하기 때문에 이것이 차선책일 수 있습니다.
이 멋진 코드 조각에 대해 mitmproxy 팀에 감사를 표합니다!
도움이 되었기를 바랍니다!
Photo by Blaz Erzetic on Unsplash
Reference
이 문제에 관하여(mitmproxy를 개인 방화벽으로 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dandyvica/use-mitmproxy-as-a-personal-firewall-4m6h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)