2010-09-21 18 views
8

मैं अपने रेल सास ऐप के लिए आईपी एड्रेस फ़िल्टरिंग को लागू करने पर विचार कर रहा हूं। संक्षेप में मैं प्रशासकों को एक या अधिक आईपी पते (या आईपी पते की एक श्रृंखला) निर्दिष्ट करने में सक्षम होना चाहता हूं और फिर मेरा ऐप केवल निर्दिष्ट पते से उनके उदाहरण पर अनुरोध स्वीकार करता है।आईपी पता फ़िल्टरिंग

मैं पते/पते के प्रत्येक पते के पारदर्शी/सत्यापन के लिए आईपीएड्रेस (http://github.com/bluemonk/ipaddress) का उपयोग कर रहा हूं। क्या यह एक अच्छा फिट है या बेहतर/अधिक उचित पुस्तकालय हैं?

क्या किसी ने इस तरह के फ़िल्टरिंग को लागू किया है जो उनके लिए काम करने वाले दृष्टिकोण का वर्णन कर सकता है या क्या कोई गॉथस है जिसके बारे में मुझे चिंता करने की ज़रूरत है?

वैकल्पिक रूप से, क्या मौजूदा रूबी लाइब्रेरी है जो यह सब स्वचालित रूप से संभालती है जो मेरे गुगलिंग को दूर करने में कामयाब रही है?

कई धन्यवाद, ऐश

+0

नायब मैं IP पते साइट का उपयोग कर सकते श्वेत सूची में डालने के लिए इच्छुक रहा हूँ के लिए एक DSL - पते कि नहीं कर सकते हैं – Ash

उत्तर

6

ipaddress एक भयानक पुस्तकालय (मैं लेखक जानते हैं) है, लेकिन आप शायद यह की जरूरत नहीं होगी जब तक कि आप आईपी पते के कुछ दक्षता से प्रदर्शन करने के लिए योजना बना रहे हैं।

वास्तव में, सबसे आसान तरीका

  1. दुकान आईपी की सरणी कहीं फिल्टर करने के लिए संबोधित करता है। आप स्ट्रिंग प्रस्तुति (1 9 2.168.1.1) या लंबे int प्रतिनिधित्व का उपयोग कर सकते हैं। स्ट्रिंग संस्करण के साथ, आप भी वाइल्डकार्ड अनुमति दे सकते हैं (192.168.1। *)

  2. तो एक before_filter नियंत्रक में है कि प्रतिबंध लगा दिया आईपी की सूची लोड करेगा कॉन्फ़िगर और जांच करने के लिए एक सरल स्ट्रिंग मैच प्रदर्शन है कि क्या वर्तमान request.ip_address (request.remote_ip रेल में 3) एक प्रतिबंधित आईपी से मेल खाता है। यदि सही है, तो त्रुटि पृष्ठ पर रीडायरेक्ट करें।

जैसा कि आप देख सकते हैं, आपको आईपी ऑब्जेक्ट्स में आईपी को कन्वर्ट करने की भी आवश्यकता नहीं है, जब तक आपको अन्य प्रकार की कुशलताएं करने की आवश्यकता न हो।

+0

के बारे में क्या संचित पन्ने को ब्लैकलिस्ट नहीं? –

+0

जब तक आप सर्वर स्तर पर फ़िल्टरिंग सिस्टम लागू नहीं करते हैं तब तक आप कैश किए गए पृष्ठों का उपयोग नहीं कर सकते। –

+0

उत्तर सिमोन के लिए धन्यवाद। मैं मुख्य रूप से आईपी पते की पार्सिंग के लिए आईपैड्रेस का उपयोग करने पर विचार कर रहा था - वे उपयोगकर्ता को आपूर्ति की जाएगी इसलिए मैं उन्हें सत्यापित करने में सक्षम होना चाहता था। जहां तक ​​मैं कह सकता हूं, आईपी पते मुझे एहसास से थोड़ा अधिक जटिल लग रहा है, इसलिए मैं उन्हें पार्स करने में शामिल नहीं होना चाहता था! क्या मैंने कुछ ऐसा पढ़ा है जिसने मुझे अनावश्यक रूप से चिंतित किया है - क्या मानक पैटर्न से मेल खाने के लिए केवल रेगेक्सपी का उपयोग करना पर्याप्त है? – Ash

3

मुझे लगता है कि आप रेल 3 निर्मित अंतर्निहित रूटिंग सुविधाओं का उपयोग करके जो चाहते हैं उसे प्राप्त कर सकते हैं। ग्रेग पोलैक Rails 3 Action Dispatch प्रस्तुत करता है और उल्लेख करता है (स्क्रीनकास्ट से) :constraints => {:ip => /192\.168\.1\.\d{1,3}}/} विकल्प जहां आप आईपी एड्रेस रेंज से मेल खाने वाली नियमित अभिव्यक्ति की आपूर्ति कर सकते हैं, जिसे आप अनुमति देना चाहते हैं।

Advanced constraints को देखते हुए थोड़ा और विस्तार करना और उनका उदाहरण डेटाबेस से ब्लैकलिस्टेड आईपी की सूची खींचने और ब्लैकलिस्टेड आईपी की सूची में request.remote_ip की जांच करने का प्रदर्शन करता है। ऐसा लगता है कि आप स्वीकृत (उर्फ श्वेतसूची आईपी) की एक सूची चाहते हैं लेकिन कोड रेल गाइड में उदाहरण के समान होगा।

तो मैं आपके व्यवस्थापक दृश्य को अनुमोदित आईपी पते इनपुट करने में सक्षम होने के लिए तैयार करूंगा, फिर एप्लिकेशन रूटिंग आने वाली अनुरोधों के लिए इस सूची को खींच सकता है।

+0

इस तरह आप उपयोगकर्ता-आधारित फ़िल्टरिंग सिस्टम को लागू नहीं कर सकते हैं। दूसरे शब्दों में, आप अलग-अलग उपयोगकर्ताओं के लिए एक अलग ब्लैकलिस्ट नहीं दे सकते क्योंकि स्थिति एक रूटिंग स्तर है और उपयोगकर्ता खाते के बावजूद किसी भी अनुरोध पर लागू होती है। –

+0

ओह, ठीक है, अब मैं देखता हूं कि उसके अनुवर्ती पोस्ट में नीचे आ गया है। अपनी मूल पोस्ट पढ़ते हुए, मैंने सोचा कि आईपी को बैक एंड पर एक व्यवस्थापक द्वारा दर्ज किया गया था। –

4

पार्टी के लिए थोड़ा देर हो चुकी है, लेकिन जब से मैं कुछ इसी तरह की तलाश कर रहा था और इस अच्छे रूबी मणि में घुस गया था, तो मैं इसे थ्रेड में योगदान करने के लिए यहां जोड़ूंगा। मुझे @ सिमोन का समाधान पसंद है, लेकिन अगर आपको अधिक नियंत्रण की आवश्यकता है तो Rack::Attack एक अच्छा विकल्प हो सकता है।

https://github.com/kickstarter/rack-attack

रैक :: हमला !!!

थ्रॉटल अवरुद्ध & अपमानजनक ग्राहकों

+0

हरोकू समर्थन वास्तव में मुझे सीधे इसकी सिफारिश की। +1 – nfriend21

संबंधित मुद्दे