
Go 기반 MITM HTTP/HTTPS 프록시로, HTTP/2 및 HTTP/1.1 가로채기, 로컬 CA/호스트별 인증서 생성, CONNECT/WebSocket 터널링, 디스크 캐싱, 관리자 대시보드, 트래픽 캡처, 차단 정책, 그리고 선택적 AI 기반 위협 스캐닝(교정, 격리, 감사 로깅 포함)을 제공합니다.
Go로 작성된 가볍고 개발자 친화적인 중간자(MITM) HTTP/HTTPS 프록시입니다. HTTP/1.1 및 HTTP/2, CONNECT 터널링, WebSocket 터널링(ws/wss), 유연한 필터를 지원하는 디스크 기반 응답 캐싱, 그리고 실시간 설정 리로드를 지원합니다.

Go MITM Proxy는 디버깅, 테스트, 학습, 그리고 HTTP(S) 트래픽의 통제된 가로채기를 목적으로 하는 인터셉팅 프록시입니다. MITM이 활성화되면 로컬 CA가 서명한 호스트별 리프 인증서를 동적으로 생성하여 프록시가 HTTPS 트래픽을 복호화하고 검사할 수 있게 합니다. MITM이 비활성화되거나 제외된 도메인/포트의 경우 투명한 TCP 터널로도 작동할 수 있습니다.
중요: 이 애플리케이션은 HTTPS 트래픽을 복호화하기 위한 TLS 인증서의 생성 및 사용을 포함하여 능동적인 중간자(MITM) 가로채기를 수행합니다. 관할권과 네트워크 환경에 따라, 영향을 받는 모든 사용자로부터 명확하고 사전 동의 없이 트래픽을 가로채는 것은 불법일 수 있으며 개인정보 보호, 직장 정책 또는 규제 요구사항을 위반할 수 있습니다.
이 소프트웨어를 자신의 로컬 머신이 아닌 환경에서 사용하기 전에:
이 프록시가 트래픽을 가로챌 수 있는 모든 네트워크의 사용자는 HTTP(S) 가로채기 및 검사가 수행된다는 사실을 명확히 고지받아야 합니다. 동의는 명시적이어야 하며 이상적으로는 문서화되어야 합니다.
소유, 관리, 또는 테스트나 모니터링에 대한 명시적 권한이 없는 네트워크에서 이 소프트웨어를 실행하지 마십시오.
많은 지역에서는 사용자 데이터의 가로채기, 로깅, 저장을 규율하는 엄격한 법률이 있습니다(예: GDPR, CCPA, 통신 감청법). 귀하는 귀하의 사용이 모든 적용 가능한 규정을 준수하도록 할 책임이 있습니다.
생성된 CA 개인 키(보통 ca-key.pem)를 보유한 사람은 해당 인증서를 신뢰하는 사용자에 대해 모든 도메인을 사칭할 수 있습니다.
이 프록시는 개발, 디버깅, 통제된 테스트 또는 교육 목적으로 설계되었습니다 — 은밀한 모니터링이나 무단 감시를 위한 것이 아닙니다.
이 소프트웨어를 사용함으로써, 귀하는 귀하의 사용이 합법적이고 윤리적이며 모든 영향을 받는 사용자에게 적절히 고지되도록 할 전적인 책임을 인정하고 수락합니다.
전제 조건:
클론 및 빌드: ```bash git clone https://github.com/Welfordian/mitm-proxy.git cd mitm-proxy go build ./
이렇게 하면 프로젝트 루트에 mitm-proxy(Windows에서는 mitm-proxy.exe) 바이너리가 생성됩니다.
## 빠른 시작
1) 기본 설정으로 프록시를 실행합니다(:8080에서 수신 대기): ```bash
./mitm-proxy
처음 시작하면 로컬 CA가 생성되어 ca-cert.pem 및 ca-key.pem에 저장됩니다.
브라우저나 curl이 http://localhost:8080의 프록시를 사용하도록 구성합니다.
HTTPS 가로채기를 허용하려면 OS/브라우저에서 생성된 CA 인증서(ca-cert.pem)를 신뢰합니다. 로컬 CA 신뢰하기를 참조하세요.
프록시를 통해 HTTPS 사이트를 방문하고 로그를 확인합니다. 자세한 내용은 verbose 모드를 사용하세요: ```bash ./mitm-proxy --verbose
## 사용법
### 명령줄 플래그
- --config string: config.json 파일 경로
- --listen string: 수신 주소 (config 재정의)
- --ca-cert string: 기존 CA 인증서 경로 (config 재정의)
- --ca-key string: 기존 CA 키 경로 (config 재정의)
- --mitm bool: MITM 인터셉트 활성화 (기본값 true; false로 설정 시 터널링 강제)
- --verbose bool: 상세 로깅 활성화
- --watch-config bool: config.json의 변경 사항을 감시하고 자동 적용 (기본값 true)
- --admin-enabled bool: 로컬 관리 API/대시보드 활성화 (기본값 true)
- --admin-addr string: 관리 API/대시보드 수신 주소 (기본값 127.0.0.1:9090)
- --admin-token string: 관리자 bearer 토큰 (생략 시 시작 시 생성)
- --admin-read-token string: GET/HEAD/OPTIONS 관리 액세스용 읽기 전용 bearer 토큰
- --admin-ui bool: 내장 관리 UI 제공 (기본값 true)
- --admin-store string: 관리 SQLite 저장소 경로 (기본값 dashboard.db)
명시된 항목의 경우 CLI 플래그가 구성 파일 값을 재정의합니다.
### 구성 (config.json)
예제 config.json이 저장소에 포함되어 있습니다: ```json
{
"listen_addr": ":8080",
"proxy_name": "MITM-Proxy",
"ca_cert_path": null,
"ca_key_path": null,
"ca_cert_output_path": "ca-cert.pem",
"ca_key_output_path": "ca-key.pem",
"enable_mitm": true,
"admin_enabled": true,
"admin_addr": "127.0.0.1:9090",
"admin_token": "",
"admin_read_token": "",
"admin_ui": true,
"admin_store": "dashboard.db",
"excluded_domains": [],
"blocked_ports": [25, 445, 3389],
"blocked_domains": [],
"blocked_ips": [],
"block_action": "deny",
"block_response_status": 403,
"traffic_capture": {
"store_bodies": false,
"max_body_bytes": 32768,
"redact_bodies": true,
"store_headers": true,
"redacted_headers": ["Authorization", "Cookie", "Proxy-Authorization", "Set-Cookie", "X-Api-Key"],
"store_cookies": true,
"redacted_cookies": []
},
"proxy_auth": {
"enabled": false,
"realm": "MITM Proxy",
"require_auth_for_loopback": false,
"default_action": "allow"
},
"verbose_logging": true,
"log_requests": true,
"max_idle_conns": 200,
"idle_conn_timeout_seconds": 90,
"tls_handshake_timeout_seconds": 10,
"min_tls_version": "1.2",
"tls_next_protos": ["h2", "http/1.1"],
"cache": {
"enabled": true,
"directory": "/var/cache/mitm-proxy",
"include_domains": [],
"exclude_domains": [],
"include_extensions": ["jpg", "png", "webp", "css", "js"],
"exclude_extensions": [],
"ttl": 3600
}
}
참고:
관리자 서버는 기본적으로 http://127.0.0.1:9090/admin/에서 대시보드를 제공합니다. API 경로에는 Authorization: Bearer <token>이 필요합니다. 로컬 브라우저 사용의 경우 /admin/?token=<token>이 토큰을 브라우저 로컬 저장소에 저장합니다.
초기 대시보드/API 포함 범위는 다음과 같습니다.