Konfigurierbarer Rust-HTTP-MITM-Proxy mit TLS-, HTTP/2- und TCP-Fingerprint-Spoofing.
Ein HTTP-MITM-Proxy, entwickelt mit Rust, tokio und btls.
Dieses Projekt wurde vollständig neu geschrieben, um btls (BoringSSL) für fortgeschrittene TLS-Fingerprinting-Fähigkeiten zu nutzen. Die TLS-Fingerprinting-Schicht (JA3/JA4) ist nun vollständig spoofbar — Cipher Suites, Kurven, Signaturalgorithmen, ALPN, Record-Size-Limit, Zertifikatskompression, GREASE, Extension-Permutation/-Reihenfolge, OCSP-Stapling, Certificate Transparency (SCT), Session Tickets, ALPS und Encrypted Client Hello (ECH, live über DoH aufgelöst, mit GREASE-Fallback) werden alle durch ein YAML-Profil gesteuert. HTTP/2-Fingerprinting (Akamai) sowie HTTP/1.1-Header-Reihenfolge/-Umschreibung sind ebenfalls vollständig konfigurierbar. Auch TCP-(L4-)Fingerprinting ist live: SYN-Pakete von Upstream-Verbindungen werden in NFQUEUE umgeschrieben (TTL, Fenstergröße, MSS, Window Scale, DF-Flag, Zeitstempel, exakte TCP-Option-Reihenfolge, Markierungen pro Domain) mit automatischer iptables-Verwaltung.
MITM (Man-in-the-Middle) — Transparente HTTPS-Interception. Es verwendet rcgen, um Zertifikate dynamisch on-the-fly auszustellen und zu signieren, und cached sie über moka für bessere Performance.
BoringSSL-Integration — Verwendet btls und tokio-btls für die TLS-Handshake-Verarbeitung und MITM-Interception.
TLS-Fingerprint-Spoofing (JA3/JA4) — vollständig. Die Upstream-TLS-Verbindung wird vollständig aus einem YAML-Profil aufgebaut, das über -c / --config <path> übergeben wird (das Format ist in config.yaml beschrieben):
brotli, zlib, zstd) mit echter Dekompressionsunterstützung.TLS.md.Upstream-First-ALPN-Aushandlung — Der Proxy baut die TLS-Verbindung zum Upstream-Server auf und handelt sie aus, bevor der browser-seitige TLS-Handshake abgeschlossen wird. Das vom Upstream-Server gewählte ALPN wird dann verwendet, um den clientseitigen TLS-Acceptor zu konfigurieren, wodurch verhindert wird, dass der Browser ein Protokoll wählt, das die Upstream-Verbindung nicht unterstützt.
HTTP/2-Fingerprint-Spoofing (Akamai) — Vollständig konfigurierbares HTTP/2-Fingerprinting über das YAML-Profil:
END_STREAM-Platzierung für leere Requests.HTTP/1.1-Header-Spoofing — Konfigurierbare Header-Reihenfolge und -Inhalt für reine HTTP/1.1-Upstream-Verbindungen (wenn ALPN kein h2 aushandelt), mit denselben Override-/Removal-Semantiken wie bei HTTP/2.
TCP-Fingerprint-Spoofing (L4) — vollständig. Ausgehende Upstream-Verbindungen werden auf Paketebene über Linux NFQUEUE gefingerprintet (src/tcp_fingerprint/):
Accept-Urteil, sodass Warteschlangen nie blockieren.SO_MARK-basiertes Routing zu TCP-Profilen pro Domain, automatische iptables-Verwaltung (oben eingefügt über Tools wie zapret/nfqws, dedupliziert, bei Ctrl+C-Shutdown entfernt) mit --queue-bypass-Sicherheit.TCP.md und den tcp-Block in config.yaml.Unterstützung für vorgelagerte HTTP-Proxys — Kann Verbindungen über einen vorgelagerten HTTP-Proxy mittels der CONNECT-Methode proxyen.
Pro-Domain-Profil-Routing — Übergeben Sie -d / --domain <path> mit einer Zuordnung von Domain-Mustern zu partiellen Profil-Overlays (siehe domain.yaml). Jede Verbindung wird per SNI abgeglichen (exakt → *.root → *.label.* → label.* → Basisprofil) und mit ihren eigenen TCP/TLS/HTTP2/HTTP1/Upstream-Einstellungen bedient, die beim Start einmalig vorab erstellt werden. Es müssen nur die Felder angegeben werden, die vom Basisprofil abweichen; alles andere wird geerbt.
Asynchron — Basiert auf tokio für hochperformante, nicht-blockierende asynchrone I/O.
cap_net_admin,cap_net_raw=+eip (für SO_MARK, NFQUEUE-Bind und automatisches iptables; ohne dies setzen Sie "auto_iptables": false im tcp-Block und wenden die Mangle-Regeln manuell an — siehe TCP.md)Der Proxy verwendet tracing mit Filterung pro Modul über RUST_LOG.
Beispiele:
RUST_LOG='H2=error' cargo run --release -- -c profile.yaml
RUST_LOG='TCP=debug,H2=error,TLS=warn' cargo run --release -- -c profile.yaml
RUST_LOG='CA=info,TLS=warn,H2=error' cargo run --release -- -c profile.yaml
Unterstützte Tags sind dieselben Modulnamen, die im Code verwendet werden: TCP, HTTP, H1, H2, TLS, CA, ECH, CFG, IPT, NFQUEUE, Runtime.
Logzeilen enthalten standardmäßig einen Zeitstempel, sodass Debugging-Sitzungen leichter korreliert werden können.
git clone https://github.com/3Radiance/mitm-proxy-ja3-ja4.git
cd mitm-proxy-ja3-ja4
cargo build --release
Alle Einstellungen – Port, Upstream-Proxy und CA-Dateipfade – befinden sich in der YAML-Konfiguration, die über -c / --config <path> übergeben wird. Es gibt keine --port / --upstream CLI-Flags.
config:
port: 9090
upstream_proxy: "127.0.0.1:10808"
cert: "/path/to/ca.crt"
key: "/path/to/ca.key"
Um ohne einen vorgeschalteten Proxy zu laufen, setzen Sie upstream_proxy: null.
cargo run --release -- --config profile.yaml
# or
cargo run --release -- -c profile.yaml