
وكيل 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": "example rule",
"interval": 60,
"limit": 10,
"filters": ["GET:q", "Header:User-Agent=^curl"],
"actions": [
{"name": "log",
"params": {"destination": "stderr"}},
{"name": "block",
"params": {"message": "Not allowed"}}
]
}
الشرح: السماح فقط بـ 10 طلبات في الدقيقة حيث يتم تمثيل q كمعامل GET ويبدأ رأس وكيل المستخدم بـ curl. يتم تسجيل الطلب إلى STDERR وحظره برسالة خطأ مخصصة إذا تم تجاوز الحد. راجع أمثلة إضافية هنا.
actionsيتم تنشيط إجراءات القاعدة بشكل تسلسلي إذا تجاوز الطلب حد القاعدة
ملاحظة: فقط الإجراء الأول للقاعدة الذي يقدم استجابة مخصصة سينفذ
logتسجيل الطلب
blockتقديم استجابة HTTP 429 بدلاً من تمرير الطلب إلى التطبيق
shell تنفيذ أمر شيل. المعاملات المطلوبة هي cmd (سلسلة نصية) و args (قائمة من المحددات) (مثال: {"name": "shell", "params": {"cmd": "echo %v is the IP", "args": ["IP"]}})
filtersإذا تم العثور على جميع المحددات، فإنه يزيد عدادًا. تمنع القاعدة الطلب إذا وصل العداد إلى limit
aggregationsيحسب القيم التي تُرجعها المحددات. تمنع القاعدة الطلب إذا وصل عدد أي قيمة إلى limit
subrulesيمكن أن تحتوي كل قاعدة على أي عدد من القواعد الفرعية. تنشط عند تطابق مرشح القاعدة الأم.
يمكن استخراج أجزاء مختلفة من الطلب باستخدام تعبيرات المحددات.
المحددات هي سلاسل نصية يمكنها مطابقة أي سمة من سمة طلب HTTP بالصيغة التالية:
[!]RequestAttribute[:SubAttribute][=Expression]
! يمكنها نفي المحددRequestAttribute (إلزامي) يختار جزءًا محددًا من الطلب - القيم الممكنة:
IPHostPathMethodGETPOSTParam - هو اسم مستعار لكل من GET و POSTCookieHeaderSubAttribute إذا لم يكن قيمة واحدة، فيمكنه تحديد السمة الداخليةIP يعيد عنوان IP للعميل
GET:x يعيد معامل GET x إذا كان موجودًا
!Header:Accept-Language يعيد صحيحًا إذا لم يكن هناك رأس HTTP Accept-Language
Path=^/(x|y)$ يطابق إذا كان المسار هو /x أو /y
IP=nslookup(example.com) يطابق إذا كان عنوان IP للعميل هو أحد عناوين IP الخاصة بـ example.com.
يمكن تكوين Filtron من خلال REST API الخاصة به والتي تستمع على 127.0.0.1:4005 افتراضيًا.
/rulesالقواعد المحملة بتنسيق JSON
/rules/reloadإعادة تحميل ملف القواعد المحدد عند بدء التشغيل
واجهة المستخدم المبنية على API

أخطاء أو اقتراحات؟ تفضل بزيارة متتبع المشكلات.
RequestAttributeExpression القيم الممكنة:
nslookup(Hostname) لتصفية قيم السمة المحددة باستخدام عناوين IP الخاصة بـ Hostname. يحل Filtron Hostname إلى عناوين IP الخاصة به عند تحميل القاعدة (IPv4 و IPv6).