الانتقال إلى المحتوى الرئيسي
تطابق قاعدة جدار حماية استدعاء أداة على محورين: أي أداة (tool_name_glob) وأي وسائط (عبارات args_match على حقول JSONPath). هذه الصفحة هي القواعد الدقيقة لكليهما — ما يطابقه نمط، وما لا يطابقه، وكيف يكره كل مُسنِد الأنواع — حتى تتصرّف قاعدة تؤلّفها في وحدة التحكم تماماً كما تقرأها هنا. حالة الاستخدام الرئيسية: حوّل “احجب shell.exec” الفظّ إلى “احجب shell.exec فقط عندما يبدو الأمر مثل rm -rf” الجراحي. يلتقط الـ glob عائلة الأداة؛ وتلتقط مُسنِدات الوسائط الاستدعاء الخطير داخلها.
هذا مرجع الصياغة. لمعرفة أين تعيش هذه العبارات على قاعدة، وترتيب القواعد، والأحكام، انظر مرجع قواعد جدار الحماية العميق. لحقول القاعدة نفسها، انظر نظرة جدار الحماية العامة.

1. أين تنطبق هذه الصياغة

كلا الشكلين مؤلَّف على قاعدة جدار حماية، في وحدة التحكم تحت /console/firewall (الكتابات تتطلب Developer+). لا تستدعي المُطابِق مباشرة أبداً — تقيّمه البوابة على كل استدعاء أداة مقابل السياسة المُحَلّة. تطابق القاعدة عندما يطابق سطحها، وtool_name_glob الخاص بها، وglob المهارة الاختياري، و عبارات args_match الخاصة بها كلها؛ أول مطابقة تفوز.
قاعدة بـ لا عبارات args_match تطابق على glob اسم الأداة وحده. أضِف عبارات وسائط فقط عندما لا يكون اسم الأداة محدّداً كفاية.

2. قواعد glob لاسم الأداة

tool_name_glob قواعد صغيرة ومتوقّعة عمداً — لا regex كامل. تُطابَق الأنماط مع التمييز بين حالة الأحرف (أسماء أدوات MCP عرفاً صغيرة-بنقاط، فطيّ الحالة سيفاجئك عند نسخ اسم من تبويب الأدوات المكتشفة).
نمط فارغ أو * مجرّد يطابق كل الأدوات. استخدمه على قاعدة شاملة، أو اعتمد على default_verdict للسياسة بدلاً منه.
shell.* يطابق shell.exec وshell.read وshell.write. وهو لا يطابق shell المجرّد (النقطة مطلوبة — glob البادئة يغطّي الأبناء ذوي مساحة الأسماء فقط).
*.exec يطابق shell.exec ذا مساحة الأسماء و exec المجرّد غير ذي مساحة الأسماء (استدعاءات الدوال الأصلية للمزود وخوادم MCP غير المُنشئة لمساحات الأسماء تكشف الأدوات تحت الفعل المجرّد، فقاعدة لاحقة تغطّي كلا الشكلين). تبقى اللاحقة مرتكزة عند نقطة أو بداية السلسلة، فـ *.exec لا يطابق shell.execute.
*.shell.* يطابق أي شكل <server>.shell.<verb>local.shell.exec وbyo.shell.run. يتطلب حرفاً واحداً على الأقل على كل جانب من الـ infix، فـ *.shell.* لا يطابق shell المجرّد أو .shell. وحده. يُعامَل فقط شكل *.X.* المتماثل كـ infix؛ نمط مختلط مثل foo.*.bar يسقط إلى مطابقة دقيقة.
أي نمط ليس واحداً من الأشكال البديلة الأربعة أعلاه (بما فيه اسم أداة حرفي، أو تركيب مشوّه مثل foo.*.bar) يُقارَن كسلسلة دقيقة مع التمييز بين حالة الأحرف.
لا يوجد بديل حرف واحد ?، ولا فئات أحرف، ولا * وسط الرمز (مثل sh*l.exec). النمط الذي ليس واحداً من الأشكال الأربعة المدعومة يُطابَق حرفياً — sh*l.exec يطابق فقط أداة مسمّاة حرفياً sh*l.exec. ألّف بالأشكال أعلاه، لا بذاكرة regex العضلية.

3. عبارات وسائط JSONPath

args_match مجموعة عبارات، كلٌّ منها ثلاثية {path, op, value}. الـ path هو JSONPath داخل كائن وسائط استدعاء الأداة؛ op أحد سبعة مُسنِدات؛ value هو ما يُقارَن مقابله. كل العبارات في قاعدة مربوطة بـ AND معاً — يجب أن تطابق كل عبارة لتُطلق القاعدة.
{
  "clauses": [
    {"path": "$.command", "op": "regex", "value": "rm -rf|drop table"},
    {"path": "$.connection", "op": "in", "value": ["prod", "replica"]}
  ]
}

مجموعة JSONPath الفرعية المدعومة

الشكليطابق
$.fooمفتاح في المستوى الأعلى.
$.foo.barمفتاح متداخل.
$.foo[0]عنصر مصفوفة بالفهرس.
$.arr[1].kفهرس ثم مفتاح (تركيبات مما سبق).
تلك هي المجموعة الفرعية كلها. لا توجد بدائل ($.*)، ولا مرشّحات ($.foo[?(...)])، ولا شرائح ($.foo[0:2])، ولا نزول تكراري ($..foo).
Fail-closed على المسار. إذا حُلّ مسار عبارة إلى لا شيء — المفتاح مفقود، أو الوسائط ليست JSON صالحاً، أو القيمة من النوع الخاطئ للمُسنِد — تُقيَّم تلك العبارة بـ false، ولا تُطلق القاعدة، ويسقط التقييم إلى القاعدة التالية أو افتراضي السياسة. وسيطة مشوّهة لا ترفض تلقائياً ولا تُعطِّل المحرك أبداً.

4. مُسنِدات الوسائط

سبعة مُسنِدات، مجموعة مغلقة. مُحقّق وحدة التحكم والمحرك الحيّ يتشاركان نفس المفردات بالضبط، فالعبارة التي تُحفظ هي العبارة التي تعمل.
المُسنِديقارنقواعد النوع
eqتساوٍ دقيق.مُصنّف: string↔string، أو bool↔bool، أو number↔number. الأنواع المختلطة لا تطابق أبداً.
containsاحتواء سلسلة فرعية.يجب أن يكون الجانبان سلسلتين؛ أي شيء آخر لا يطابق. قيمة فارغة تطابق أي سلسلة.
regexنمط RE2 (خطّي الزمن، لا مراجع خلفية) مقابل سلسلة.يجب أن تكون القيمة والوسيطة المُحَلّة سلسلتين. نمط غير صالح يُعطّل العبارة (لا يطابق أبداً).
inعضوية — القيمة تساوي أي عنصر من قائمة.يجب أن تكون القيمة مصفوفة JSON؛ يُقارَن كل عنصر بدلالات eq.
cidr_matchالقيمة المُحَلّة IP داخل الشبكة المعطاة.القيمة سلسلة CIDR (IPv4 أو IPv6، مثل 10.0.0.0/8، fd00::/8)؛ يجب أن تُحلَّل الوسيطة كـ IP.
gtأكبر من، عددي.يجب أن يُكرَه الجانبان إلى عدد. سلسلة تبدو عددية لا تُكرَه — إنها عدم تطابق نوع.
ltأصغر من، عددي.نفس قاعدة العدد فقط في gt.
gt وlt عدديان بحتاً. إذا أرسلت أداة {"max_rows": "10000"} (سلسلة)، عبارة gt 5000 لا تُطلق — السلسلة لا تُكرَه أبداً. قارن الأعداد مقابل الأعداد؛ استخدم regex أو contains للقيم على هيئة سلسلة.

5. مثال مُعالَج

احجب تصدير قاعدة بيانات مدمّراً، لكن فقط عندما يستهدف اتصال إنتاج عبر مضيف شبكة خاصة:
{
  "tool_name_glob": "db.*",
  "args_match": {
    "clauses": [
      {"path": "$.statement", "op": "regex", "value": "(?i)drop|truncate|delete from"},
      {"path": "$.connection.name", "op": "in", "value": ["prod", "prod-replica"]},
      {"path": "$.connection.host_ip", "op": "cidr_match", "value": "10.0.0.0/8"}
    ]
  }
}
اقرأها من أعلى لأسفل: الـ glob db.* يقصر القاعدة على عائلة أداة قاعدة البيانات؛ والعبارات الثلاث تُربط بـ AND فيُطلق الحكم (مثلاً deny) فقط عندما تكون العبارة مدمّرة و يكون الاتصال أحد هدفي إنتاج مسمّيين و يقع مضيفه في النطاق الخاص 10.0.0.0/8. استدعاء db.query مقابل اتصال تطوير على IP عام يُبحر متجاوزاً هذه القاعدة بلا مساس.
أثبت العبارة قبل أن تثق بها: تبويب Test على سياسة يجري تشغيلاً تجريبياً لاستدعاء أداة عينة ويُظهر القاعدة المطابقة والحكم، دون حفظ شيء أو إرسال شيء. انظر قابلية ملاحظة جدار الحماية.

6. قواعد Egress (host / CIDR)

مُسنِد cidr_match أعلاه يطابق IP تبلّغ عنه أداة في وسائطها. ذلك مختلف عن قاعدة سطح egress، التي تقيّم الوجهة الصادرة التي تصل إليها أداة فعلاً بقائمة سماح أو رفض host/CIDR — دفاع SSRF و تسريب البيانات الأساسي. تستخدم قواعد egress نفس تدوين CIDR لكنها تعيش على سطح egress؛ انظر قواعد جدار الحماية لصيغة قائمة egress.
لا إعداد مسبق يشحن قواعد egress بـ CIDR لك — مستوى الاستقلالية tight يرفض أسماء الأدوات الشائعة على هيئة جلب (http_fetch، fetch_url، web_search، request)، لا نطاقات الشبكة. ألّف قاعدة رفض host/CIDR الخاصة بك عندما تحتاج تثبيت egress إلى وجهات محدّدة.

7. مرجع سريع

أشكال Glob

* الكل · foo.* بادئة · *.exec لاحقة (+ فعل مجرّد) · *.X.* وسطى · أي شيء آخر دقيق. مع التمييز بين حالة الأحرف.

JSONPath

$.foo · $.foo.bar · $.foo[0] · $.arr[1].k. لا بدائل، ولا مرشّحات، ولا شرائح، ولا نزول تكراري.

مُسنِدات السلاسل

eq (مُصنّف) · contains (سلسلة فرعية) · regex (RE2) · in (عضوية قائمة).

مُسنِدات عددية وشبكية

gt / lt (عددي فقط، لا إكراه سلسلة) · cidr_match (IPv4/IPv6 في النطاق).

ذات صلة

قواعد جدار الحماية

نموذج القاعدة الكامل — الأسطح، والترتيب، والمُطهّرات، والتسلسلات، وقوائم egress.

استدعاءات الأدوات الخطرة

التهديد الذي تدافع عنه هذه العبارات، وكيف تقصر قاعدة عليه.

مسرد الأحكام

ماذا يفعل allow وaudit وdeny وsanitize والبقية بمجرد أن تطابق قاعدة.

لماذا حُجب هذا؟

تتبّع حجباً محدّداً إلى القاعدة والعبارة التي أُطلقت.