
फ़िल्टरिंग रिवर्स HTTP प्रॉक्सी
रिवर्स HTTP प्रॉक्सी विभिन्न नियमों द्वारा अनुरोधों को फ़िल्टर करने के लिए। प्रोडक्शन वेबसर्वर और एप्लिकेशन सर्वर के बीच उपयोग किया जा सकता है ताकि एप्लिकेशन बैकएंड के दुरुपयोग को रोका जा सके।
इस प्रोग्राम का मूल उद्देश्य searx की रक्षा करना था, लेकिन इसका उपयोग किसी भी वेब एप्लिकेशन की सुरक्षा के लिए किया जा सकता है।
$ go install github.com/asciimoo/filtron
$ "$GOPATH/bin/filtron" --help
एक नियम में दो आवश्यक गुण होते हैं: name और actions
एक नियम में निम्नलिखित सभी गुण हो सकते हैं:
limit पूर्णांक - परिभाषित करता है कि interval सेकंड के भीतर कितने मिलान अनुरोध एप्लिकेशन तक पहुँच सकते हैं। (यदि 0 है तो छोड़ा जा सकता है)interval पूर्णांक - नियम संख्याओं को रीसेट करने के लिए सेकंड में समय सीमा (यदि limit 0 है तो छोड़ा जा सकता है)filters चयनकर्ताओं की सूचीaggregations चयनकर्ताओं की सूची (यदि filters निर्दिष्ट है तो यह केवल तब सक्रिय होता है जब फ़िल्टर मेल खाता है)subrules नियमों की सूची (यदि filters निर्दिष्ट है तो यह केवल तब सक्रिय होता है जब फ़िल्टर मेल खाता है)disabled बूल - एक नियम को अक्षम करें (डिफ़ॉल्ट false है)stop बूल - अनुरोध सत्यापन तुरंत समाप्त करें और शेष नियमों को छोड़ें (डिफ़ॉल्ट false है)एक नियम का JSON प्रतिनिधित्व:
{
"name": "उदाहरण नियम",
"interval": 60,
"limit": 10,
"filters": ["GET:q", "Header:User-Agent=^curl"],
"actions": [
{"name": "log",
"params": {"destination": "stderr"}},
{"name": "block",
"params": {"message": "अनुमति नहीं"}}
]
}
स्पष्टीकरण: केवल 10 अनुरोध प्रति मिनट की अनुमति दें जहाँ q GET पैरामीटर के रूप में प्रस्तुत है और उपयोगकर्ता-एजेंट हेडर curl से शुरू होता है। अनुरोध STDERR पर लॉग किया जाता है और यदि सीमा पार हो जाती है तो कस्टम त्रुटि संदेश के साथ ब्लॉक कर दिया जाता है। अधिक उदाहरण यहाँ देखें।
actionsयदि कोई अनुरोध नियम की सीमा पार करता है तो नियम की क्रियाएँ क्रमिक रूप से सक्रिय होती हैं
नोट: केवल नियम की पहली क्रिया निष्पादित होगी जो कस्टम प्रतिक्रिया प्रदान करती है
logअनुरोध को लॉग करें
blockअनुरोध को एप्लिकेशन पर भेजने के बजाय HTTP 429 प्रतिक्रिया प्रदान करें
shellएक शेल कमांड निष्पादित करें। cmd (स्ट्रिंग) और args (चयनकर्ताओं की सूची) आवश्यक पैरामीटर हैं (उदाहरण: {"name": "shell", "params": {"cmd": "echo %v आईपी है", "args": ["IP"]}})
filtersयदि सभी चयनकर्ता मिल जाते हैं, तो यह एक काउंटर बढ़ाता है। नियम अनुरोध को ब्लॉक करता है यदि काउंटर limit तक पहुँचता है
aggregationsचयनकर्ताओं द्वारा लौटाए गए मानों की गणना करता है। नियम अनुरोध को ब्लॉक करता है यदि किसी भी मान की संख्या limit तक पहुँचती है
subrulesप्रत्येक नियम में कितनी भी उप-नियम हो सकते हैं। मूल नियम के फ़िल्टर मिलान पर सक्रिय होता है।
अनुरोध के विभिन्न भागों को चयनकर्ता अभिव्यक्तियों का उपयोग करके निकाला जा सकता है।
चयनकर्ता स्ट्रिंग्स हैं जो निम्नलिखित सिंटैक्स के साथ HTTP अनुरोध के किसी भी गुण से मेल खा सकती हैं:
[!]RequestAttribute[:SubAttribute][=Expression]
! चयनकर्ता को नकार सकता हैRequestAttribute (आवश्यक) अनुरोध का विशिष्ट भाग चुनता है - संभावित मान:
IPHostPathMethodGETPOSTParam - यह GET और POST दोनों का उपनाम हैCookieHeaderSubAttribute यदि एकल मान नहीं है, तो यह आंतरिक गुण निर्दिष्ट कर सकता हैIP क्लाइंट का IP पता लौटाता है
GET:x यदि मौजूद है तो x GET पैरामीटर लौटाता है
!Header:Accept-Language true लौटाता है यदि कोई Accept-Language HTTP हेडर नहीं है
Path=^/(x|y)$ मेल खाता है यदि पथ /x या /y है
IP=nslookup(example.com) मेल खाता है यदि क्लाइंट का IP पता example.com के IP पतों में से एक है।
Filtron को इसके REST API के माध्यम से कॉन्फ़िगर किया जा सकता है जो डिफ़ॉल्ट रूप से 127.0.0.1:4005 पर सुनता है।
/rulesJSON प्रारूप में लोड किए गए नियम
/rules/reloadस्टार्टअप पर निर्दिष्ट नियम फ़ाइल को पुनः लोड करें
API पर निर्मित UI

बग या सुझाव? समस्या ट्रैकर पर जाएँ।
RequestAttributeExpression संभावित मान:
Hostname के IP पतों से फ़िल्टर करने के लिए nslookup(Hostname)। Filtron जब नियम लोड होता है तो Hostname को इसके IP पतों (IPv4 और IPv6) में हल कर लेता है।