मैं अपाचे के साथ दर सीमित कैसे लागू कर सकता हूं? (अनुरोध प्रति सेकंड)


84

अपाचे में मजबूत दर सीमा (अनुरोध | बाइट्स / आईपी / यूनिट समय) को लागू करने के लिए कौन सी तकनीक और / या मॉड्यूल उपलब्ध हैं?


मैं वेब सर्वर पर लिनक्स के tc का उपयोग कर रहा हूं , क्योंकि Red Hat 6 में केवल Apache 2.2 है।
ceving

जवाबों:


55

सबसे अच्छा

  • mod_evasive (DoS जोखिम को कम करने पर अधिक ध्यान केंद्रित)
  • mod_cband ('सामान्य' बैंडविड्थ नियंत्रण के लिए सर्वोत्तम)

और बाकी


10
मुझे IP पते द्वारा प्रति दिन कनेक्शन सीमित करने के लिए कुछ भी नहीं मिला। मैंने सारी रात खोज में बिताई, यह शर्म की बात है।
ग्रेग

1
किसी को पता है कि अगर वहाँ एक mod_evasive पाने के लिए एक आईपी के बजाय हेडर को देखने के लिए है, जब एक रिवर्स प्रॉक्सी के पीछे चल रहा है?
स्टावरोस कोरोकिथेकिस 17

6
4 साल बाद, mod_evasive अभी भी "सबसे अच्छा" है?
Zac थॉम्पसन

6
अपने दावे का समर्थन करें। _वेसिव और _cband सबसे अच्छे क्यों हैं?
रीड

4
mod_evasiveबहुत सारी ऑनलाइन सिफारिशें मिलती हैं, लेकिन 2017 के मध्य तक, इसके लेखक, जोनाथन ज़डज़ार्स्की ने इसे छोड़ दिया है, जिन्होंने अपने ब्लॉग से सभी संदर्भों को अजीब तरीके से हटा दिया है - हालांकि स्रोत कोड अभी भी अपलोड के रूप में उपलब्ध है । अन्य परियोजनाओं में से कोई भी पिछले 6 वर्षों में अद्यतन नहीं किया गया है (या मामले में 15 साल mod_limitipconn)।
एंथनी जोगेगन

19

जैसा कि इस ब्लॉग पोस्ट में कहा गया है कि प्रति सेकंड की दर सीमा को लागू करने के लिए mod_security का उपयोग करना संभव है ।

कॉन्फ़िगरेशन कुछ इस प्रकार है:

SecRuleEngine On

<LocationMatch "^/somepath">
  SecAction initcol:ip=%{REMOTE_ADDR},pass,nolog
  SecAction "phase:5,deprecatevar:ip.somepathcounter=1/1,pass,nolog"
  SecRule IP:SOMEPATHCOUNTER "@gt 60" "phase:2,pause:300,deny,status:509,setenv:RATELIMITED,skip:1,nolog"
  SecAction "phase:2,pass,setvar:ip.somepathcounter=+1,nolog"
  Header always set Retry-After "10" env=RATELIMITED
</LocationMatch>

ErrorDocument 509 "Rate Limit Exceeded"

3
यह मेरे लिए एकदम सही था, modsec2 पहले से ही चल रहा है। बस modsec संस्करण से मेल करने के लिए नियमों में id जोड़ना पड़ता है, जैसे: <LocationMatch "^ / somepath"> SecAction initcol: ip =% {REMOTE_ADDR}, पास, nolog, id, 10000001 SecAction "चरण: 5, deprecatevar: ip.somepathcounter = 1/1, pass, nolog, id: 10000002 "SecRule IP: SOMEPATHCOUNTER" @gt 60 "" चरण: 2, ठहराव: 300, इनकार, स्थिति, 509, setenv: RATELIMITED, छोड़ें: 1, nolog id: 10000003 "SecAction" चरण: 2, पास, सेवार: ip.somepathcounter = + 1, nolog, id: 10000004 "हैडर हमेशा रिट्री-आफ्टर सेट करता है" 10 "env = RATIMIMITED </ LocationMatch>
नाथन स्ट्रेच

2
यह भी ध्यान दें कि आप "@ 60 टीटी" को संपादित करके कितने प्रारंभिक फट अनुरोधों की अनुमति दे सकते हैं, साथ ही साथ यह कितनी जल्दी "रीचार्ज" कर सकते हैं। 1/1 प्रति सेकंड एक अतिरिक्त अनुरोध की अनुमति देता है। 1/2 हर 2 सेकंड में एक अतिरिक्त अनुरोध की अनुमति देता है,
नाथन स्ट्रेच

3
Apache 2.4 ErrorDocument में 509 के बारे में शिकायत करेगा, एक विकल्प इसे 429 में बदल रहा है (जो -of कोर्स-अपाचे 2.2 में समर्थित नहीं है)। इसके अलावा, सभी SecAction और SecRule-s को mod_security 2.7 के बाद से एक आईडी की आवश्यकता होती है।
श्रीमती

1
एफवाईआई mod_securityएक अपाचे परियोजना नहीं है।
क्रिस्टोफर शुल्त्स

12

वेब एप्लिकेशन फ़ायरवॉल सहित कई तरीके हैं लेकिन अपाचे मॉड का उपयोग करने पर सबसे आसान काम है।

ऐसा एक मॉड जिसे मैं सुझाता हूं वह है mod_qos । यह एक फ्री मॉड्यूल है जो सर्टिफाइड DOS, Bruteforce और Slowloris प्रकार के हमलों के खिलाफ बहुत प्रभावी है। इससे आपका सर्वर लोड काफी कम हो जाएगा।

यह बहुत शक्तिशाली है

Mod_qos मॉड्यूल की वर्तमान रिलीज़ को लागू करने के लिए नियंत्रण तंत्र लागू करता है:

  • किसी स्थान / संसाधन (URL) या वर्चुअल होस्ट के समवर्ती अनुरोधों की अधिकतम संख्या।

  • बैंडविड्थ की सीमा जैसे किसी URL के लिए प्रति सेकंड अधिकतम अनुमत संख्या या डाउनलोड किए गए kbytes की अधिकतम / न्यूनतम सीमा।

  • प्रति सेकंड अनुरोध घटनाओं की संख्या (विशेष अनुरोध की स्थिति) को सीमित करता है।

  • समय की एक निर्धारित अवधि के भीतर अनुरोध घटनाओं की संख्या को सीमित करता है।
  • यह बहुत महत्वपूर्ण व्यक्तियों (वीआईपी) का भी पता लगा सकता है, जो कम प्रतिबंधों के बिना या बिना वेब सर्वर तक पहुंच सकते हैं।
  • जेनेरिक अनुरोध लाइन और हेडर फिल्टर अनधिकृत संचालन से इनकार करने के लिए।

  • शरीर डेटा सीमा और फ़िल्टरिंग का अनुरोध करें (mod_parp की आवश्यकता है)।

  • व्यक्तिगत ग्राहकों (आईपी) के लिए अनुरोध घटनाओं की संख्या को सीमित करता है।

  • टीसीपी कनेक्शन स्तर पर सीमाएं, उदाहरण के लिए, एकल आईपी स्रोत पते या डायनामिक कीप-ज़िंदा नियंत्रण से अनुमत कनेक्शनों की अधिकतम संख्या।

  • जब ज्ञात सर्वर मुफ्त टीसीपी कनेक्शन से बाहर निकलता है, तो ज्ञात आईपी पते को प्राथमिकता देता है।

यह एक नमूना विन्यास है जिसे आप इसके लिए उपयोग कर सकते हैं। आपकी आवश्यकताओं के अनुरूप सैकड़ों संभावित विन्यास हैं। नियंत्रण पर अधिक जानकारी के लिए साइट पर जाएँ।

Sample configuration:
# minimum request rate (bytes/sec at request reading):
QS_SrvRequestRate                                 120

# limits the connections for this virtual host:
QS_SrvMaxConn                                     800

# allows keep-alive support till the server reaches 600 connections:
QS_SrvMaxConnClose                                600

# allows max 50 connections from a single ip address:
QS_SrvMaxConnPerIP                                 50

# disables connection restrictions for certain clients:
QS_SrvMaxConnExcludeIP                    172.18.3.32
QS_SrvMaxConnExcludeIP                    192.168.10.

http://opensource.adnovum.ch/mod_qos/


यह केवल पुराने Apache2.2 में काम करता है। Apache2.4 + में काम नहीं करता है, क्या यह है?
infiniteloop

@infiniteloop mod_quos sourceforge पेज का कहना है कि यह apache2.4 के साथ ठीक काम करता है। लेकिन कुछ विशेषताओं के बारे में एक विशिष्ट चर्चा है जो यहां काम नहीं करती हैं: stackoverflow.com/a/15726540/1402498
JamesHoux

6

Apache 2.4 में, एक नया स्टॉक मॉड्यूल है जिसे mod_ratelimit कहा जाता है । मॉडेम की गति का अनुकरण करने के लिए, आप mod_dialup का उपयोग कर सकते हैं । हालाँकि मैं यह नहीं देखता कि आप हर चीज़ के लिए mod_ratelimit का उपयोग क्यों नहीं कर सकते।


ध्यान दें कि mod_dialup एक अतुल्यकालिक SUSPENDEDस्थिति का उपयोग करता है , प्रतीक्षा पर धागे बर्बाद नहीं करता है , जबकि mod_ratelimit, अब तक, सख्ती से थ्रेड-प्रति-कनेक्शन है। सीएफ thread.gmane.org/gmane.comp.apache.cvs/20490
आर्टेमग्र जूल

6

दुर्भाग्य से, mod_evasiveगैर-प्रीफ़ॉर्क कॉन्फ़िगरेशन (हाल ही में अपाचे सेटअप मुख्य रूप से एमपीएम) में उपयोग किए जाने पर अपेक्षित रूप से काम नहीं करेगा



1

इस पर निर्भर करता है कि आप दर सीमा क्यों चाहते हैं।

यदि यह सर्वर को ओवरलोड करने से बचाने के लिए है, तो यह वास्तव में एनजीआईएनएक्स को इसके सामने रखने के लिए समझ में आता है, और वहां दर को सीमित करता है। यह समझ में आता है क्योंकि NGINX बहुत कम संसाधनों का उपयोग करता है, कुछ एमबी प्रति दस हजार कनेक्शन की तरह। इसलिए, यदि सर्वर में बाढ़ आ गई है, तो NGINX रेट लिमिटिंग (संसाधनों की तुच्छ मात्रा का उपयोग करके) करेगा और केवल Apache को अनुमत ट्रैफ़िक पास करेगा।

यदि आप सब के बाद सरलता है, तो mod_evasive की तरह कुछ का उपयोग करें।

हमेशा की तरह, अगर इसे DDoS या DoS हमलों से बचाना है, तो Cloudflare जैसी सेवा का उपयोग करें, जिसमें दर सीमित भी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.