Apache 2: SetEnvIf "आईपी रेंज"


10

मेरे अपाचे कॉन्फ़िगरेशन में मैं एक पर्यावरण चर सेट करना चाहता हूं यदि मैं देखता हूं कि आगंतुक एक विशिष्ट आईपी रेंज से आता है। वर्तमान में मैं इसे इस तरह से करता हूं:

SetEnvIfNoCase Remote_Addr "^194\.8\.7[45]\." banned=spammer-ip
SetEnvIfNoCase Remote_Addr "^212\.156\.170\." banned=spammer-ip

मैं इस तरह से कुछ पसंद करूंगा:

SetEnvIfIpRange 194.8.74.0/23 banned=spammer-ip
SetEnvIfIpRange 212.156.170.0/24 banned=spammer-ip

... क्योंकि मुझे लगता है कि एक आईपी पते को एक स्ट्रिंग में परिवर्तित करना और फिर एक नियमित अभिव्यक्ति करना कुल स्रोतों की बर्बादी है।

मैं ए कर सकता था

Deny From 194.8.74.0/23

... लेकिन फिर मुझे एक चर नहीं मिलता है जिसे मैं अपने 403 त्रुटि पृष्ठ में देख सकता हूं - इस कारण को खोजने के लिए कि पहुंच से इनकार क्यों किया गया है।

कोई भी सुझाव जो मुझे याद हो सकता है? क्या एक Apache2 MOD है जो "आईपी एड्रेस रेंज" के आधार पर पर्यावरण चर सेट कर सकता है?

जवाबों:


4

आपको जो मिला है (SetEnvIfNoCase Remote_Addr "^ abc" env_key = env_value) वह सबसे अच्छा है जो आप आसानी से करेंगे। मैंने इस विन्यास शैली को मशीनों के भारी लोड वाले क्लस्टर पर लागू किया है, बिना किसी ध्यान देने योग्य प्रदर्शन में गिरावट के। मैं नियमित अभिव्यक्तियों का उपयोग करते हुए सहमत हूं, जब CIDR पर्वतमाला अधिक उपयुक्त हैं कष्टप्रद है। आप CIDR पर्वतमाला की सूची से स्वचालित रूप से कॉन्फ़िगरेशन उत्पन्न करने के लिए एक छोटा प्रोग्राम लिख सकते हैं।

यदि आप पर्ल से परिचित हैं, तो आप एक मॉडेलर हैंडलर बना सकते हैं, जो आपके द्वारा चुने जाने के अनुरोधों को अस्वीकार / अनुमति देगा। modperl आपके कोड को HTTP अनुरोध - mod_perl 2.0 HTTP अनुरोध चक्र चरणों में अलग-अलग बिंदुओं पर चलाने की अनुमति देता है । PerlAuthzHandler उपयोग करने के लिए उपयुक्त हैंडलर होगा।

Lockie


8

ध्यान रखें कि सेटएव के माध्यम से सेट किए गए चर कुछ कार्यों पर दिखाई नहीं देते हैं (मैट्रिक्स देखें):

http://www.onlinesmartketer.com/2010/05/27/apache-environment-variables-visibility-with-setenv-setenvif-and-rewriterule-directives/

आपका समाधान है

SetEnvIfExpr "-R '10.0.0.0/8' || -R '172.16.0.0/12' || -R '192.168.0.0/16'" rfc1918

देख https://httpd.apache.org/docs/trunk/mod/mod_setenvif.html#SetEnvIfExpr


यह स्वीकृत उत्तर होना चाहिए! यह सर्वोत्तम हैं। यह भी .htaccess में काम करता है
जेरोन वर्म्यूलेन - MageHost

8

आप Apache 2.4 के साथ CIDR फॉर्मेटिंग का उपयोग कर सकते हैं जो अनुमति देता है <If>:

<If "%{REMOTE_ADDR} -ipmatch 194.8.74.0/23">
    SetEnv banned = spammer-ip
</If>

आपका जवाब धन्यवाद! ध्यान दें कि मेरे अपाचे संस्करण में एक बग था, ताकि मुझे एकल उद्धरणों में आईपी रेंज को संलग्न करना पड़े
लुकास

0

यह वास्तव में RegExp से IP Ranges तक जाने के लिए एक समाधान नहीं है , लेकिन मुझे Google द्वारा होस्ट की गई एक अच्छी स्क्रिप्ट मिली जो IP रेंज को मेल खाते हुए regexp में बदल देती है। आप में से कुछ के लिए भी इस्तेमाल किया जा सकता है ...

मैं IP पते की एक सीमा से ट्रैफ़िक को कैसे निकालूं?

[अपडेट करें]

ऐसा लगता है जैसे Google ने IP पता टूल हटा दिया है (या उनकी साइट पर कम से कम लिंक टूटा हुआ है), लेकिन यहाँ एक समान टूल है: http://www.analyticsmarket.com/freetools/ipregex

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