
TLS, HTTP/2 और TCP फिंगरप्रिंट स्पूफिंग के साथ कॉन्फ़िगर करने योग्य Rust HTTP MITM प्रॉक्सी।
Rust, tokio और btls के साथ बनाया गया एक HTTP MITM प्रॉक्सी।
इस प्रोजेक्ट को उन्नत TLS फिंगरप्रिंटिंग क्षमताओं के लिए btls (BoringSSL) का उपयोग करने के लिए पूरी तरह से फिर से लिखा गया है। TLS फिंगरप्रिंटिंग परत (JA3/JA4) अब पूरी तरह से स्पूफ़ करने योग्य है — सिफर सूट, कर्व्स, सिग्नेचर एल्गोरिदम, ALPN, रिकॉर्ड साइज़ लिमिट, सर्टिफिकेट कम्प्रेशन, GREASE, एक्सटेंशन परम्युटेशन/ऑर्डरिंग, OCSP स्टेपलिंग, सर्टिफिकेट ट्रांसपेरेंसी (SCT), सेशन टिकट, ALPS, और एन्क्रिप्टेड क्लाइंट हेलो (ECH, DoH के माध्यम से लाइव रिज़ॉल्व किया गया, GREASE फ़ॉलबैक के साथ) — ये सभी एक YAML प्रोफ़ाइल द्वारा नियंत्रित होते हैं। HTTP/2 फिंगरप्रिंटिंग (Akamai) और HTTP/1.1 हेडर ऑर्डरिंग/रिराइटिंग भी पूरी तरह से कॉन्फ़िगर करने योग्य हैं। TCP (L4) फिंगरप्रिंटिंग भी लाइव है: अपस्ट्रीम कनेक्शन के SYN पैकेट NFQUEUE में रिराइट किए जाते हैं (TTL, विंडो साइज़, MSS, विंडो स्केल, DF फ़्लैग, टाइमस्टैम्प, सटीक TCP विकल्प क्रम, प्रति-डोमेन मार्क) स्वचालित iptables प्रबंधन के साथ।
MITM (Man-in-the-Middle) — पारदर्शी HTTPS इंटरसेप्शन। यह प्रदर्शन के लिए moka के माध्यम से उन्हें कैश करते हुए, गतिशील रूप से प्रमाणपत्र जारी करने और हस्ताक्षर करने के लिए rcgen का उपयोग करता है।
BoringSSL एकीकरण — TLS हैंडशेक हैंडलिंग और MITM इंटरसेप्शन के लिए btls और tokio-btls का उपयोग करता है।
TLS फिंगरप्रिंट स्पूफ़िंग (JA3/JA4) — पूर्ण। अपस्ट्रीम TLS कनेक्शन पूरी तरह से -c / --config <path> के माध्यम से पास किए गए YAML प्रोफ़ाइल से बनाया जाता है (प्रारूप के लिए config.yaml देखें):
brotli, zlib, zstd) वास्तविक डीकम्प्रेशन समर्थन के साथ।TLS.md देखें।अपस्ट्रीम-फ़र्स्ट ALPN नेगोशिएशन — प्रॉक्सी ब्राउज़र-साइड TLS हैंडशेक पूरा करने से पहले अपस्ट्रीम सर्वर के साथ TLS स्थापित और नेगोशिएट करता है। अपस्ट्रीम सर्वर द्वारा चयनित ALPN का उपयोग फिर क्लाइंट-साइड TLS एक्सेप्टर को कॉन्फ़िगर करने के लिए किया जाता है, जिससे ब्राउज़र को ऐसा प्रोटोकॉल चुनने से रोका जाता है जिसे अपस्ट्रीम कनेक्शन समर्थित नहीं करता।
HTTP/2 फिंगरप्रिंट स्पूफ़िंग (Akamai) — YAML प्रोफ़ाइल के माध्यम से पूरी तरह से कॉन्फ़िगर करने योग्य HTTP/2 फिंगरप्रिंटिंग:
END_STREAM प्लेसमेंट।HTTP/1.1 हेडर स्पूफ़िंग — सादे HTTP/1.1 अपस्ट्रीम कनेक्शन के लिए कॉन्फ़िगर करने योग्य हेडर क्रम और सामग्री (जब ALPN h2 नेगोशिएट नहीं करता), HTTP/2 के लिए उपयोग किए जाने वाले समान ओवरराइड/रिमूवल सिमैंटिक्स को दर्शाता है।
TCP फिंगरप्रिंट स्पूफ़िंग (L4) — पूर्ण। आउटगोइंग अपस्ट्रीम कनेक्शन Linux NFQUEUE (src/tcp_fingerprint/) के माध्यम से पैकेट स्तर पर फिंगरप्रिंट किए जाते हैं:
Accept निर्णय मिलता है ताकि कतारें कभी रुकें नहीं।SO_MARK-आधारित रूटिंग से प्रति-डोमेन TCP प्रोफ़ाइल तक, स्वचालित iptables प्रबंधन (zapret/nfqws जैसे टूल के ऊपर टॉप-इंसर्टेड, डुप्लिकेट हटाए गए, Ctrl+C शटडाउन पर हटाए गए) --queue-bypass सुरक्षा के साथ।TCP.md और config.yaml में tcp ब्लॉक देखें।अपस्ट्रीम HTTP प्रॉक्सी समर्थन — CONNECT विधि के माध्यम से अपस्ट्रीम HTTP प्रॉक्सी के ज़रिए कनेक्शन प्रॉक्सी कर सकता है।
प्रति-डोमेन प्रोफ़ाइल रूटिंग — -d / --domain <path> पास करें, जिसमें डोमेन पैटर्न से आंशिक प्रोफ़ाइल ओवरले का मैप हो (देखें domain.yaml)। प्रत्येक कनेक्शन SNI द्वारा मिलान किया जाता है (सटीक → *.root → *.label.* → label.* → बेस प्रोफ़ाइल) और अपनी स्वयं की TCP/TLS/HTTP2/HTTP1/अपस्ट्रीम सेटिंग्स के साथ परोसा जाता है, जो स्टार्टअप पर एक बार पहले से बनाई जाती हैं। केवल वे फ़ील्ड निर्दिष्ट करने की आवश्यकता होती है जो बेस प्रोफ़ाइल से भिन्न हैं; बाकी सब कुछ विरासत में मिलता है।
अतुल्यकालिक — उच्च-प्रदर्शन, नॉन-ब्लॉकिंग अतुल्यकालिक I/O के लिए tokio पर निर्मित।
cap_net_admin,cap_net_raw=+eip (SO_MARK, NFQUEUE बाइंड, और स्वचालित iptables के लिए; इसके बिना tcp ब्लॉक में "auto_iptables": false सेट करें और mangle नियमों को मैन्युअल रूप से लागू करें — देखें TCP.md)प्रॉक्सी RUST_LOG के माध्यम से प्रति-मॉड्यूल फ़िल्टरिंग के साथ tracing का उपयोग करता है।
उदाहरण:
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
समर्थित टैग वही मॉड्यूल नाम हैं जो कोड में उपयोग किए गए हैं: TCP, HTTP, H1, H2, TLS, CA, ECH, CFG, IPT, NFQUEUE, Runtime।
लॉग पंक्तियों में डिफ़ॉल्ट रूप से एक टाइमस्टैम्प शामिल होता है, इसलिए डिबगिंग सत्रों को सहसंबंधित करना आसान हो जाता है।
git clone https://github.com/3Radiance/mitm-proxy-ja3-ja4.git
cd mitm-proxy-ja3-ja4
cargo build --release
सभी सेटिंग्स — पोर्ट, अपस्ट्रीम प्रॉक्सी, और CA फ़ाइल पथ — -c / --config <path> के माध्यम से पास किए गए YAML कॉन्फ़िग में मौजूद होती हैं। कोई --port / --upstream CLI फ़्लैग नहीं हैं।
config:
port: 9090
upstream_proxy: "127.0.0.1:10808"
cert: "/path/to/ca.crt"
key: "/path/to/ca.key"
अपस्ट्रीम प्रॉक्सी के बिना चलाने के लिए, upstream_proxy: null सेट करें।
cargo run --release -- --config profile.yaml
# or
cargo run --release -- -c profile.yaml
पहले रन पर, यदि cert/key अभी तक मौजूद नहीं हैं, तो प्रॉक्सी कॉन्फ़िगर किए गए पाथ पर CA फ़ाइलें जनरेट करेगा:
ca.crt — रूट CA प्रमाणपत्र। आपको इसे Firefox/अपने ब्राउज़र में इम्पोर्ट करना होगा और वेबसाइटों की पहचान के लिए इसे ट्रस्ट करना होगा।ca.key — CA के लिए निजी कुंजी।cargo run --release -- -c profile.yaml -d domain.yaml
domain.yaml डोमेन पैटर्न को आंशिक ओवरले से मैप करता है — केवल वे फ़ील्ड जो बेस प्रोफ़ाइल से भिन्न हैं: