
IPSpinner works as a local proxy that redirects requests through external services.
IPSpinner एक स्थानीय प्रॉक्सी है जिसका उपयोग सभी आने वाले अनुरोधों को विभिन्न चयनित प्रदाताओं के माध्यम से पुनर्निर्देशित करने के लिए किया जा सकता है। इसका उद्देश्य एक पास-थ्रू प्रॉक्सी बनाना है जो प्रत्येक अनुरोध के स्रोत IP पते को घुमाता है। उदाहरण के तौर पर, IPSpinner के माध्यम से ब्रूटफोर्स ऑपरेशन चलाने से पकड़े जाने से बचने में मदद मिलेगी क्योंकि सर्वर को सैकड़ों विभिन्न IP पतों से अनुरोध प्राप्त होंगे।
IPSpinner वर्तमान में AWS (API Gateway), Azure (Cloud Shell) और GitHub (GitHub Actions) का समर्थन करता है।
चित्र 1: IPSpinner - समग्र आरेख
IPSpinner एक स्थानीय प्रॉक्सी के रूप में कार्य करता है जो अनुरोधों को बाहरी सेवाओं के माध्यम से पुनर्निर्देशित करता है। इस उद्देश्य के लिए, IPSpinner प्रदाताओं और लॉन्चरों का लाभ उठाता है।
एक प्रदाता किसी क्लाउड प्रदाता या ऑनलाइन सेवा प्रदाता (AWS, Azure, GitHub, आदि) के अनुरूप होता है, जो विभिन्न सेवाएँ प्रदान करता है, जिन्हें लॉन्चर कहा जाता है, जिनका उपयोग उपयोगकर्ता के अनुरोधों को रिले करने के लिए किया जा सकता है (AWS API Gateway, GitHub Actions, Azure Cloud Shells, आदि)।
इस प्रकार, IPSpinner को लॉन्च करने के लिए, उपयोगकर्ता को उन प्रदाताओं के लिए क्रेडेंशियल प्रदान करने होंगे जिन्हें वह उपयोग करना चाहता है और लॉन्चरों के लिए अतिरिक्त कॉन्फ़िगरेशन प्रदान करने होंगे। एक साथ कई लॉन्चर प्रकारों का उपयोग किया जा सकता है, IPSpinner प्रत्येक अनुरोध के लिए उपलब्ध लॉन्चरों में से यादृच्छिक रूप से एक का चयन करेगा।
इसके अलावा, IPSpinner एक प्रीलोड सुविधा लागू करता है। कुछ लॉन्चरों को प्रीलोड किया जा सकता है ताकि प्रॉक्सी द्वारा कोई नया होस्ट देखे जाने पर पुनर्विन्यास में देरी से बचा जा सके। इन लॉन्चरों के लिए, प्रीलोड प्रक्रिया अनुशंसित है लेकिन अनिवार्य नहीं है। अन्य लॉन्चरों के लिए, कोई प्रीलोडिंग आवश्यक नहीं है।
IPSpinner अनुरोध भेजने के लिए AWS API Gateway का लाभ उठा सकता है। यह कार्यान्वयन FireProx पर आधारित है, जो आने वाले अनुरोधों को पुनर्निर्देशित करने के लिए एक REST API Gateway बनाता है। इसलिए FireProx को प्रति API Gateway कई होस्टों को संभालने और नई सुविधाओं को लागू करने के लिए अनुकूलित किया गया है। संक्षेप में, जब IPSpinner को कोई अनुरोध प्राप्त होता है, तो यह सही API Gateway इंस्टेंस का चयन या निर्माण करता है और अनुरोध को उसकी ओर भेजता है। फिर, यह प्रतिक्रिया एकत्र करता है और उसे उपयोगकर्ता को लौटाता है। इस प्रकार, लक्षित सर्वर को अनुरोध API Gateway से प्राप्त हुआ है, न कि सीधे उपयोगकर्ता से। चूँकि API Gateway प्रत्येक अनुरोध के लिए अपना आउटगोइंग IP घुमाता है, IPSpinner इस सुविधा का उपयोग IP पते को घुमाने के लिए करता है।
चित्र 2: AWS API Gateway - समग्र आरेख
अगला ग्राफ, जो अक्टूबर 2024 में बनाया गया था, भेजे गए अनुरोधों की संख्या के अनुसार प्रति AWS क्षेत्र उपलब्ध अद्वितीय IP पतों की संख्या दिखाता है। अधिकांश क्षेत्र 100 से अधिक IP पते प्रदान करते हैं और एक साथ कई क्षेत्रों का उपयोग किया जा सकता है, जिससे उपयोगकर्ता अपने अनुरोधों को दुनिया भर के हजारों पतों के माध्यम से प्रॉक्सी कर सकता है।
चित्र 3: AWS API Gateway - प्रति क्षेत्र उपलब्ध IP पते
अंत में, चित्र 4 लघुगणकीय हरे रंग के स्तर के साथ दिखाता है कि प्रति देश कितने पते उपलब्ध हैं। यह प्रदर्शित करता है कि उपयोगकर्ता किसी भी महाद्वीप के पतों के साथ अपने स्रोत IP पते को जाली बना सकता है।
चित्र 4: AWS API Gateway - प्रति देश IP पते
IPSpinner एक रोटेशन सुविधा लागू करता है जो नियमित रूप से बनाए गए FireProx इंस्टेंसों को हटाता और नवीनीकृत करता है। जैसा कि निम्नलिखित ग्राफ दिखाता है, FireProx इंस्टेंस को घुमाने से IP का एक नया उपसमुच्चय प्राप्त हो सकता है। हालाँकि, प्रत्येक AWS क्षेत्र में IP का एक सीमित सेट होता है और इसलिए किसी बिंदु पर, रोटेशन नए IP प्रदान नहीं करेंगे।
चित्र 5: AWS API Gateway - रोटेशन प्रक्रिया
यह लॉन्चर एक प्रीलोडिंग प्रक्रिया लागू करता है। जैसा कि पहले कहा गया है, यह अनिवार्य नहीं है, लेकिन पुनर्विन्यास के बाद पहले कुछ सेकंड के दौरान कुछ पुनर्विन्यास देरी या सिंक्रनाइज़ेशन त्रुटियों को रोक सकता है।
इसके अलावा, API Gateways डिफ़ॉल्ट रूप से एक X-Forwarded-For हेडर सेट करते हैं, जिसे हटाया नहीं जा सकता लेकिन ओवरराइड किया जा सकता है। इस प्रकार, उपयोगकर्ता IPSpinner कॉन्फ़िगरेशन में एक IP पता रेंज निर्दिष्ट कर सकता है जिसमें से प्रत्येक अनुरोध के लिए एक यादृच्छिक IP चुना जाएगा (IPv4 या IPv6 रेंज)।
IPSpinner अनुरोध भेजने के लिए Azure Cloud Shell का लाभ उठाता है। Azure Cloud Shell Azure संसाधनों के प्रबंधन के लिए एक इंटरैक्टिव, प्रमाणित, ब्राउज़र-सुलभ टर्मिनल है। Cloud Shell प्रति-सत्र, प्रति-उपयोगकर्ता आधार पर प्रदान किए गए अस्थायी होस्ट पर चलता है।
इस प्रकार, IPSpinner कई Azure उपयोगकर्ताओं का उपयोग करता है जिनके लिए एक Cloud Shell सत्र तैयार किया जाता है। फिर, प्रत्येक अनुरोध को एक प्रारंभित Cloud Shell पर पुनर्निर्देशित किया जाएगा, और उसके IP पते को रीसेट करने के लिए उसे नवीनीकृत किया जाएगा।
चित्र 6: Azure Cloud Shell - समग्र आरेख
जैसा कि निम्नलिखित ग्राफ दिखाता है, Cloud Shell सत्रों को तैनात करने के लिए उपलब्ध विभिन्न क्षेत्र प्रत्येक दर्जनों IP पते प्रदान करते हैं। उपयोगकर्ता अपने IP पूल को बढ़ाने के लिए एक साथ कई क्षेत्रों को कॉन्फ़िगर कर सकता है।
चित्र 7: Azure Cloud Shell - प्रति क्षेत्र उपलब्ध IP पते
हालाँकि, IP पते AWS API Gateway की तुलना में अधिक केंद्रित हैं। जैसा कि निम्नलिखित मानचित्र दर्शाता है, उनमें से अधिकांश US, यूरोप और भारत में स्थित हैं।
चित्र 8: Azure Cloud Shell - प्रति देश IP पते
Cloud Shell नवीनीकरण प्रक्रिया में देरी के कारण, हम अनुरोध प्रवाह दर को सीमित करने की सलाह देते हैं। लॉन्चर तुलना उपधारा में अधिक जानकारी।
IPSpinner अनुरोध भेजने के लिए GitHub Actions का भी लाभ उठा सकता है। यह कार्यान्वयन git-rotate से प्रेरित है लेकिन कैचर सर्वर से छुटकारा पाने के लिए इसे पूरी तरह से संशोधित और अनुकूलित किया गया है।
यह एक पूर्वनिर्धारित वर्कफ़्लो टेम्पलेट के साथ एक रिपॉजिटरी बनाता है। फिर, प्रत्येक अनुरोध के लिए, यह पर्यावरण चर के माध्यम से अनुरोध की जानकारी देकर वर्कफ़्लो चलाता है। बाहरी उपयोगकर्ता द्वारा पठनीय होने से बचने के लिए सभी डेटा एन्क्रिप्ट किया जाता है। IPSpinner अंततः वर्कफ़्लो लॉग से प्रतिक्रिया डेटा एकत्र करता है।
चित्र 9: GitHub Actions - समग्र आरेख
निम्नलिखित चित्र दिखाता है कि GitHub Actions हजारों विभिन्न IP पते प्रदान करते हैं।
चित्र 10: GitHub Actions - प्रति क्षेत्र उपलब्ध IP पते
हालाँकि, निम्नलिखित मानचित्र दर्शाता है कि GitHub Actions केवल अमेरिकी IP पते प्रदान करते हैं। विश्लेषण के बाद, उनके वर्कर Azure इंफ्रास्ट्रक्चर पर तैनात प्रतीत होते हैं।
चित्र 11: GitHub Actions - प्रति देश IP पते
⚠️ इसके अलावा, "GitHub Actions के दुरुपयोग और स्पैम को गंभीरता से लेता है, और उनके पास “स्पैमी उपयोगकर्ताओं” पर नज़र रखने के लिए एक समर्पित टीम है।" इस प्रकार, उपयोगकर्ता को किसी भी खाता बंद होने की समस्या से बचने के लिए इस प्रदाता का उपयोग अपने स्वयं के खाते या कंपनी के खाते के साथ बिल्कुल नहीं करना चाहिए।
प्रति-घंटा GitHub REST API सीमा के कारण, किसी भी व्यवधान से बचने के लिए अधिकतम अनुरोध प्रवाह दर सीमित होनी चाहिए। लॉन्चर तुलना उपधारा में अधिक जानकारी।
इस प्रोजेक्ट का परीक्षण go संस्करण >= 1.21 के लिए किया गया है लेकिन यह कम go संस्करण के साथ भी काम कर सकता है।
Go स्थापना दस्तावेज़ देखें
स्थापना के बाद, सुनिश्चित करें कि डिफ़ॉल्ट go बाइनरी सही है:
$ go version
go version go1.21.1 linux/amd64
$ git clone https://github.com/synacktiv/IPSpinner.git
$ cd IPSpinner
$ go mod tidy
$ make build-linux # For Linux AMD64 arch
$ make build-windows # For Windows AMD64 arch
निष्पादन योग्य को डिफ़ॉल्ट रूप से Linux पर "ipspinner" या Windows पर "ipspinner.exe" नाम दिया जाएगा।
उपयोग के अंत में, आप बिल्ड को निम्न चलाकर साफ़ कर सकते हैं
$ make clean
IPSpinner का उपयोग करने में सहायता प्राप्त करने के लिए, आप बिना किसी तर्क के कमांड चला सकते हैं :
$ ./ipspinner -h
Help will be displayed
सभी जानकारी (अनुरोध पुनर्निर्देशन को छोड़कर) ipspinner.log फ़ाइल में लॉग की जाती है।
कुछ सामान्य विकल्प तर्कों के रूप में उपलब्ध हैं और अन्य कॉन्फ़िगरेशन जानकारी एक INI कॉन्फ़िगरेशन फ़ाइल में प्रदान करनी होती है।
उपयोगकर्ता कुछ कमांड लाइन तर्क निर्दिष्ट कर सकता है:
कुछ वैश्विक और प्रदाता पैरामीटर एक INI कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट किए जाने होते हैं। IPSpinner चलाने से पहले कॉन्फ़िगरेशन फ़ाइल तैयार की जानी चाहिए। इसकी सामग्री को अगले उपधाराओं में समझाया जाएगा। डिफ़ॉल्ट रूप से, IPSpinner config.ini नामक कॉन्फ़िगरेशन फ़ाइल की तलाश करता है।
https अनुरोधों को संभालने के लिए, IPSpinner को एक प्रमाणपत्र प्राधिकरण (CA) प्रमाणपत्र और एक कुंजी की आवश्यकता होती है। यदि उपयोगकर्ता प्रमाणपत्र प्रदान नहीं करता है, तो IPSpinner अपना स्वयं का स्व-हस्ताक्षरित प्रमाणपत्र और कुंजी उत्पन्न करेगा। उपयोगकर्ता --export-ca-cert के साथ उत्पन्न प्रमाणपत्र प्राप्त करने का अनुरोध कर सकता है (उदा: इसे ब्राउज़र में आयात करने के लिए)। अन्यथा, उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल में अपना स्वयं का CA प्रमाणपत्र और कुंजी प्रदान कर सकता है (अगले भाग देखें)।
उपयोगकर्ता --host और --port के साथ लिसनिंग होस्ट और पोर्ट निर्दिष्ट कर सकता है।
अंत में, तीन वर्बोज़ मोड उपलब्ध हैं:
फिर, INI कॉन्फ़िग फ़ाइल के लिए एक टेम्पलेट प्रोजेक्ट रिपॉजिटरी में उपलब्ध है।
proxy अनुभाग में, उपयोगकर्ता कुछ पैरामीटर निर्दिष्ट कर सकता है:
अन्य सभी अनुभागों का वर्णन संबंधित प्रदाता अध्याय में किया जाएगा।
यह ध्यान देना महत्वपूर्ण है कि एक उपयोगकर्ता एक साथ कई प्रदाताओं और लॉन्चरों को सक्षम कर सकता है। IPSpinner तब प्रत्येक अनुरोध के लिए सभी उपलब्ध लॉन्चरों में से एक यादृच्छिक लॉन्चर चुनेगा।
AWS के लिए कॉन्फ़िगरेशन पैरामीटर, aws अनुभाग में:
API Gateways के लिए कॉन्फ़िगरेशन पैरामीटर, aws अनुभाग में:
Azure के लिए कॉन्फ़िगरेशन पैरामीटर, azure अनुभाग में:
Azure Cloud Shell के लिए कॉन्फ़िगरेशन पैरामीटर, azure अनुभाग में:
GitHub के लिए कॉन्फ़िगरेशन पैरामीटर, github अनुभाग में:
| पैरामीटर | अनिवार्य | डिफ़ॉल्ट मान | विवरण |
|---|---|---|---|
| username | ✅ | GitHub उपयोगकर्ता नाम | |
| token | ✅ | प्रदान किए गए उपयोगकर्ता नाम से संबद्ध GitHub टोकन |
GitHub Actions के लिए कॉन्फ़िगरेशन पैरामीटर, github अनुभाग में:
| पैरामीटर | अनिवार्य (यदि ga_enabled=true) | डिफ़ॉल्ट मान | विवरण |
|---|---|---|---|
| ga_enabled | / | GitHub Actions लॉन्चर सक्षम करें |
IPSpinner HTTP/2 प्रोटोकॉल का समर्थन नहीं करता है। चूँकि प्रॉक्सी पहले TLS कनेक्शन को समाप्त करता है, प्रोटोकॉल के लाभ खो जाते हैं और यह एक बुनियादी HTTP/1.1 कनेक्शन के रूप में दिखाई देता है।
इस प्रकार, Burp Suite के साथ IPSpinner का उपयोग करते समय HTTP/2 समस्याओं से बचने के लिए, कृपया HTTP/2 क्लाइंट समर्थन हटा दें: Settings > Network > HTTP > HTTP/2 > HTTP/2 चेकबॉक्स को अनचेक करें।
| AWS API Gateway | Azure Cloud Shell | GitHub Actions |
|---|
| उपलब्ध IP पते | ≈ 12,418 | ≈ 276 | > 6,000 |
| औसत प्रतिक्रिया समय | 0.46s | 13.04s | 21.42s |
| औसत पुनर्विन्यास समय | कोई नहीं | 20s | कोई नहीं |
| अधिकतम सैद्धांतिक प्रवाह दर | 4,000 से 16,000 req/h | 107 req/h/cloud shell instance | 1,000 req/h |
| प्रीलोड किया जा सकता है/करना आवश्यक है? | ✅ | ❌ | ❌ |
| उपयोग: ब्राउज़िंग के लिए | ✅ | ❌ | ❌ |
| उपयोग: पासवर्ड स्प्रेइंग के लिए | ✅ | ✅ | ✅ |
| पैरामीटर | अनिवार्य | डिफ़ॉल्ट मान |
|---|
| --config | ❌ | config.ini |
| --export-ca-cert | ❌ | |
| --host | ❌ | |
| --port | ❌ | 8080 |
| --v, --vv, --vvv | ❌ |
| पैरामीटर | अनिवार्य | डिफ़ॉल्ट मान | विवरण |
|---|
| preload_hosts_file | ❌ | प्रीलोड करने के लिए URL/होस्ट की सूची, उन प्रदाताओं के लिए जो होस्ट प्रीलोड कर सकते हैं | |
| whitelist_hosts_file | ❌ | URL/होस्ट की सूची जो व्हाइटलिस्टेड हैं (अन्य सभी डिफ़ॉल्ट रूप से ब्लैकलिस्टेड होंगे) | |
| blacklist_hosts_file | ❌ | URL/होस्ट की सूची जो ब्लैकलिस्टेड हैं (यदि व्हाइटलिस्ट सेट है तो अनदेखा किया जाता है) | |
| ca_cert_file & ca_cert_key_file | ❌ | उपयोगकर्ता-प्रदत्त CA प्रमाणपत्र (यदि उपयोगकर्ता डिफ़ॉल्ट रूप से उत्पन्न प्रमाणपत्र को बदलना चाहता है) | |
| user_agents_file | ❌ | यूज़र एजेंट की सूची जो अनुरोधों के लिए यादृच्छिक रूप से चुनी जाएगी | |
| debug_response_headers | ❌ | false | प्रॉक्सी प्रतिक्रियाओं में दो डीबग हेडर जोड़ता है: X-IPSpinner-Provider और X-IPSpinner-Provider-NbTotalReqSent |
| wait_for_launcher_available_timeout | ❌ | 60 | यदि कोई लॉन्चर उपलब्ध नहीं होता है तो अनुरोध को टाइम आउट करने से पहले सेकंड की संख्या |
| पैरामीटर | अनिवार्य | डिफ़ॉल्ट मान | विवरण |
|---|
| regions | ✅ | क्षेत्रों की सूची, अल्पविराम से अलग की गई, जहाँ संसाधन तैनात किए जा सकते हैं | |
| profile | ❌ | उपयोग करने के लिए AWS CLI प्रोफ़ाइल | |
| access_key | ✅ (या profile) | AWS उपयोगकर्ता एक्सेस कुंजी | |
| secret_key | ✅ (या profile) | AWS उपयोगकर्ता गुप्त कुंजी | |
| session_token | ❌ | AWS उपयोगकर्ता सत्र टोकन |
| पैरामीटर | अनिवार्य (यदि ag_enabled=true) | डिफ़ॉल्ट मान | विवरण |
|---|
| ag_enabled | / | API Gateway लॉन्चर सक्षम करें | |
| ag_max_instances | ❌ | 5 | अधिकतम API Gateway इंस्टेंस जिन्हें तैनात किया जा सकता है (कुल अधिकतम, प्रति क्षेत्र नहीं) |
| ag_rotate_nb_requests | ❌ | 5,000 | API Gateway को घुमाने से पहले अनुरोधों की संख्या |
| ag_forwarded_for_range | ❌ | 35.180.0.0/16 | X-Forwarded-For हेडर के लिए IP पता रेंज (IPv4 या IPv6 रेंज) |
| ag_instance_title_prefix | ❌ | fpr | API Gateway जानकारी अनुकूलन |
| ag_instance_deployment_description | ❌ | IPSpinner FireProx Prod | API Gateway जानकारी अनुकूलन |
| ag_instance_deployment_stage_description | ❌ | IPSpinner FireProx Prod Stage | API Gateway जानकारी अनुकूलन |
| ag_instance_deployment_stage_name | ❌ | 3 यादृच्छिक अंग्रेजी शब्द | API Gateway जानकारी अनुकूलन |
| पैरामीटर | अनिवार्य | डिफ़ॉल्ट मान | विवरण |
|---|
| admin_email | ✅ (या accounts_file) | Azure व्यवस्थापक ईमेल | |
| admin_password | ✅ (या accounts_file) | Azure व्यवस्थापक पासवर्ड | |
| tenant_id | ✅ | टेनेंट ID | |
| subscription_id | ✅ | सब्सक्रिप्शन ID | |
| accounts_file | ❌ | पूर्व-निर्मित खातों की सूची (ईमेल और पासवर्ड, प्रति पंक्ति एक जानकारी) जो admin_email और admin_password को ओवरराइड करती है |
| पैरामीटर | अनिवार्य (यदि cs_enabled=true) | डिफ़ॉल्ट मान | विवरण |
|---|
| cs_enabled | / | Cloud Shell लॉन्चर सक्षम करें | |
| cs_preferred_locations | ✅ | Cloud Shell इंस्टेंस तैनात करने के लिए स्थान | |
| cs_nb_instances | ❌ | 5 | तैनात करने के लिए Cloud Shell इंस्टेंस की संख्या |