
लेयर 7 DDoS से लड़ने के लिए प्रूफ ऑफ वर्क के साथ समर्पित परियोजना, एक अतिरिक्त WAF और नियंत्रक के साथ। पूर्ण सुविधाओं के सेट के साथ पूर्ण और तेजी से तथा हल्के तैनाती के लिए कंटेनरीकृत।
PoW Shield OSI एप्लिकेशन लेयर पर बैकएंड सेवा और अंतिम उपयोगकर्ता के बीच प्रूफ ऑफ वर्क का उपयोग करके एक प्रॉक्सी के रूप में कार्य करके DDoS सुरक्षा प्रदान करता है। यह परियोजना Google के ReCaptcha जैसे सामान्य एंटी-DDoS तरीकों का एक विकल्प प्रदान करने का लक्ष्य रखती है, जो हमेशा एक समस्या रही है। PoW Shield द्वारा संरक्षित वेब सेवा तक पहुँचना कभी इतना आसान नहीं रहा, बस URL पर जाएँ, और आपका ब्राउज़र बाकी सत्यापन स्वचालित रूप से कर देगा।
PoW Shield का उद्देश्य निम्नलिखित सेवाओं को एक एकल वेबऐप / डॉकर इमेज में बंडल करना है:
(नया) लिंक्डइन पर लेख
PoW Phalanx नियंत्रक के माध्यम से समर्थित:
Go में वैकल्पिक कार्यान्वयन PoW-Shield-Go (WIP) तनाव परीक्षण उद्देश्यों और भविष्य के अनुकूलित उत्पादन संस्करण के लिए।
मूल रूप से, PoW Shield वास्तविक वेब ऐप/सेवा के सामने एक प्रॉक्सी के रूप में काम करता है। यह प्रूफ ऑफ वर्क के माध्यम से सत्यापन करता है और केवल अधिकृत ट्रैफ़िक को वास्तविक सर्वर तक पहुँचाता है। प्रॉक्सी आसानी से स्थापित होने योग्य है, और WAF के साथ कम सुरक्षा वाले अनुप्रयोगों की रक्षा करने में सक्षम है।
यहाँ बताया गया है कि जब कोई उपयोगकर्ता PoW Shield-संरक्षित वेबसेवा ब्राउज़ करता है तो पर्दे के पीछे क्या होता है:
आप PoW Shield को निम्नलिखित विधियों के माध्यम से कॉन्फ़िगर कर सकते हैं।
| चर | प्रकार | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
| PORT | सामान्य | 3000 | वह पोर्ट जिस पर PoW Shield सुनता है |
| SESSION_KEY | सामान्य | कुकी हस्ताक्षरों के लिए गुप्त कुंजी, सुरक्षा कारणों से एक अद्वितीय का उपयोग करें, अन्यथा कोई भी आपके हस्ताक्षरित कुकी को नकली बना सकता है | |
| BACKEND_URL | सामान्य | प्रमाणित ट्रैफ़िक को अग्रेषित करने का स्थान, IP और URL दोनों स्वीकार्य हैं (प्रोटोकॉल://url(:port) या प्रोटोकॉल://ip(:port) स्वीकार करता है) | |
| DATABASE_HOST | Redis | 127.0.0.1 | redis सेवा होस्ट |
| DATABASE_PORT | Redis | 6379 | redis सेवा पोर्ट |
| DATABASE_PASSWORD | Redis | null | redis सेवा पासवर्ड |
| POW | PoW | on | PoW कार्यक्षमता को चालू/बंद करता है (यदि अस्थायी रूप से बंद नहीं किया गया है, तो इस प्रोजेक्ट का उपयोग क्यों करें?) |
| NONCE_VALIDITY | PoW | 60000 | जनरेशन के बाद सर्वर को nonce जमा करने के लिए अधिकतम सेकंड निर्दिष्ट करता है (कठिनाई परिवर्तन को लागू करने और पुराने nonces को फ़िल्टर करने के लिए उपयोग किया जाता है) |
| DIFFICULTY | PoW | 13 | समस्या की कठिनाई, उत्पादित हैश में अग्रणी 0-बिट्स की संख्या (0: अत्यंत आसान ~ 256: असंभव, 13 (डिफ़ॉल्ट) ब्राउज़र के लिए गणना करने में लगभग 5 सेकंड लगता है) |
| RATE_LIMIT | दर सीमा | on | दर सीमा कार्यक्षमता को चालू/बंद करता है |
| RATE_LIMIT_SAMPLE_MINUTES | दर सीमा | 60 | निर्दिष्ट करता है कि सत्र/आईपी के लिए आँकड़े कितने मिनट में रीसेट होते हैं |
| RATE_LIMIT_SESSION_THRESHOLD | दर सीमा | 100 | एकल सत्र द्वारा टोकन रद्दीकरण को ट्रिगर करने से पहले किए जा सकने वाले अनुरोधों की संख्या |
| RATE_LIMIT_BAN_IP | दर सीमा | on | आईपी प्रतिबंध कार्यक्षमता को चालू/बंद करता है |
| RATE_LIMIT_IP_THRESHOLD | दर सीमा | 500 | एकल सत्र द्वारा आईपी प्रतिबंध को ट्रिगर करने से पहले किए जा सकने वाले अनुरोधों की संख्या |
| RATE_LIMIT_BAN_MINUTES | दर सीमा | 15 | आईपी प्रतिबंध कितने मिनट तक रहता है |
| WAF | WAF | on | waf कार्यक्षमता को चालू/बंद करता है |
| WAF_URL_EXCLUDE_RULES | WAF | अनुरोध URL को स्कैन करते समय जांचने के लिए नियमों को बाहर करें, नियम संख्याओं को अलग करने के लिए ',' का उपयोग करें, एक श्रेणी निर्दिष्ट करने के लिए '-' का उपयोग करें (जैसे: 1,2-4,5,7-10) |
# रिपॉजिटरी क्लोन करें
git clone https://github.com/RuiSiang/PoW-Shield.git
# निर्भरताएँ स्थापित करें
npm install
# सेटिंग्स कॉन्फ़िगर करें
cp -n .env.example .env
# .env संपादित करें
nano .env
# ट्रांसपाइल करें
npm run build
#############################################
# db (redis) के साथ चलाएँ, अनुशंसित और तेज #
# पहले redis स्थापित करें #
# sudo apt-get install redis-server #
#############################################
npm start
#############################################
#############################################
# db (mock redis) के बिना चलाएँ #
#############################################
npm run start:standalone # linux
npm run start:standalone-win # windows
#############################################
# कार्यक्षमताओं का परीक्षण करें (वैकल्पिक)
npm test
####################################################
# Docker db (redis) के साथ चलाएँ, अनुशंसित और तेज #
####################################################
docker run -p 3000:3000 -e BACKEND_URL="http://example.com" -d ruisiang/pow-shield
####################################################
####################################################
# Docker db (mock redis) के बिना चलाएँ #
####################################################
docker run -p 3000:3000 -e BACKEND_URL="http://example.com" -e NODE_ENV="standalone" -d ruisiang/pow-shield
####################################################
####################################################
# डॉकर कंपोज़ #
####################################################
# docker-compose.example.yaml कॉपी करें
cp -n docker-compose.example.yaml docker-compose.yaml
# docker-compose.yaml संपादित करें
nano docker-compose.yaml
# कंटेनर प्रारंभ करें
docker-compose -f docker-compose.yaml up
####################################################
नोट: यह केवल PoW Shield के गैर-कंटेनरीकृत संस्करण पर काम करता है, और परीक्षण चलाते समय आपका सिस्टम अस्थिर हो सकता है।
# तनाव परीक्षण प्रारंभ करें
npm run stress
# यदि आपने .env में PORT वेरिएबल बदल दिया है, तो आपको तनाव परीक्षण स्क्रिप्ट में target वेरिएबल भी बदलना चाहिए
nano scripts/stress.sh
निम्नलिखित परीक्षण i7-10870H CPU के एकल थ्रेड पर 60 सेकंड की अवधि के साथ प्रत्येक समवर्ती पैरामीटर के लिए किए गए हैं।
| समवर्ती कनेक्शन | औसत विलंबता | त्रुटि दर | अनुरोध/सेकंड |
|---|---|---|---|
| 64 | 15.3ms | 0.0000 | 4188 |
| 128 | 30.2ms | 0.0000 | 4229 |
| 256 | 60.4ms | 0.0000 | 4235 |
| 512 | 122.6ms | 0.0142 | 4166 |
| 1024 | 261.7ms | 0.1766 | 3894 |
| 2048 | 1966.5ms | 0.4979 | 1027 |
| 4096 | 4685ms | 0.7179 | 838 |
| समवर्ती कनेक्शन | औसत विलंबता | त्रुटि दर | अनुरोध/सेकंड |
|---|---|---|---|
| 64 | 15.6ms | N/A | 4094 |
| 128 | 31.5ms | N/A | 4058 |
| 256 | 61.5ms | N/A | 4159 |
| 512 | 129.5ms | N/A | 3945 |
| 1024 | 264.4ms | N/A | 3858 |
| 2048 | 592.1ms | N/A | 3407 |
| 4096 | 1212.6ms | N/A | 3322 |
उपरोक्त नमूने से, हम देख सकते हैं कि PoW Shield के लिए उपयुक्त अधिकतम लोड अनुमान लगभग 512 समवर्ती कनेक्शन है। उसके बाद त्रुटि दर और विलंबताएँ सामान्य स्वीकार्यता से बिगड़ जाती हैं। इसलिए मशीन पर लोड-बैलेंस वातावरण में (प्रत्येक 8 कोर पर 1 PoW Shield इंस्टेंस), इसे लगभग 4096 समवर्ती कनेक्शन (क्लाइंट) को कुल मिलाकर 32k अनुरोध/सेकंड की दर से संभालने में सक्षम होना चाहिए।
MIT
| WAF_HEADER_EXCLUDE_RULES | WAF | 14,33,80,96,100 | अनुरोध हेडर को स्कैन करते समय जांचने के लिए नियमों को बाहर करें, नियम संख्याओं को अलग करने के लिए ',' का उपयोग करें, एक श्रेणी निर्दिष्ट करने के लिए '-' का उपयोग करें (जैसे: 1,2-4,5,7-10) |
| WAF_BODY_EXCLUDE_RULES | WAF | अनुरोध बॉडी को स्कैन करते समय जांचने के लिए नियमों को बाहर करें, नियम संख्याओं को अलग करने के लिए ',' का उपयोग करें, एक श्रेणी निर्दिष्ट करने के लिए '-' का उपयोग करें (जैसे: 1,2-4,5,7-10) |
| SSL | SSL | off | SSL कार्यक्षमता को चालू/बंद करता है |
| SSL_CERT_PATH | SSL | tests/ssl/mock-cert.pem | SSL प्रमाणपत्र पथ |
| SSL_KEY_PATH | SSL | tests/ssl/mock-key.pem | SSL कुंजी पथ |
| SOCKET | सॉकेट | off | सॉकेट कार्यक्षमता को चालू/बंद करता है |
| SOCKET_URL | सॉकेट | PoW Phalanx नियंत्रक का स्थान, IP और URL दोनों स्वीकार्य हैं (प्रोटोकॉल://url:port या प्रोटोकॉल://ip:port स्वीकार करता है) |
| SOCKET_TOKEN | सॉकेट | PoW Phalanx नियंत्रक के लिए सदस्यता टोकन |