الانتقال إلى المحتوى الرئيسي
تسمية أداة ورفضها أمر فظّ: يقتل الأداة لكل استدعاء. في معظم الوقت تكون الأداة جيدة وشكل واحد من الاستدعاء هو المشكلة — shell.exec جيد حتى يكون الأمر rm -rf، وdb.query جيد حتى يصيب prod. ذلك التمييز هو ما تعبّر عنه عبارة وسائط: عبارة jsonpath لوسيطة أداة تطابق على القيم التي يمرّرها وكيل، فيُطلق الحكم فقط على الاستدعاء الخطر ويترك البقية وشأنها. هذه الصفحة كتاب طبخ — حفنة من وصفات args_match_json للنسخ واللصق للحالات الأكثر شيوعاً. لقواعد العبارات الكاملة، وجدول العوامل، ودلالات الفشل المغلق، انظر التحقق من الوسائط ومرجع مخطط القاعدة.

1. كيف تعمل عبارة jsonpath لوسيطة أداة

args_match_json للقاعدة هي سلسلة مرمّزة بصيغة JSON تحمل مجموعة من العبارات، كلها مدموجة بـ AND. القيمة المفكوكة كائن، {"clauses": [ … ]}، حيث كل عبارة ثلاثية { path, op, value }:
  • path — مجموعة فرعية صغيرة من JSONPath على كائن وسائط الأداة: $.command، $.foo.bar، $.items[0]، أو $ للكائن كله. لا أحرف بدل أو فلاتر أو شرائح أو نزول تكراري.
  • op — واحد من مجموعة مغلقة: eq وcontains وregex وin وcidr_match وgt وlt.
  • value — الحرف الذي يُقارَن به (سلسلة، رقم، bool، أو — لـ in — مصفوفة JSON).
تُدمج العبارة بـ AND على tool_name_glob للقاعدة: تُطلق القاعدة فقط عندما يطابق اسم الأداة و تصحّ كل عبارة. احذف args_match_json بالكامل (أو اتركها "{}" فارغة) فتطابق القاعدة على glob وحده.
العبارات تفشل مغلقةً — القاعدة، وليس الطلب. إذا لم يُحَل مسار، أو كانت الوسائط مشوّهة، أو كانت قيمة من النوع الخاطئ، تُقيَّم العبارة خطأ والقاعدة ببساطة لا تُطلق — يسقط الاستدعاء إلى القاعدة التالية أو الحكم الافتراضي. عبارة معطوبة لا ترفض تلقائياً أبداً. اكتب حاجز دعمك الصارم كـ glob deny عادي، وليس كعبارة تعتمد على فشلها بطريقة معيّنة.

2. وصفة: احجب أمراً مدمّراً واحداً

الحالة النموذجية. اسمح بـ shell.exec عموماً، ارفضها فقط عندما يبدو الأمر مدمّراً. عبارة regex على $.command تفعلها:
{
  "label": "block destructive shell commands",
  "tool_name_glob": "*.exec",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf|mkfs|dd if=\"}]}"
}
الـ regex هي Go RE2 — زمن خطّي، لا مراجع خلفية، لا تراجع كارثي — فهي آمنة للتشغيل على كل استدعاء أداة. $.command غير سلسلة (أو غائب) لا يطابق أبداً، فاستدعاء مشوّه يسقط بدلاً من أن يُحجب خطأً.
فضّل contains على regex عندما تطابق سلسلة فرعية ثابتة — أبسط للقراءة ولا يمكن أن يتعثّر بحرف ميتا غير مهرَّب. الجأ إلى regex فقط عندما تحتاج حقاً تناوباً أو مثبّتات.

3. وصفة: ارفض أداة مقابل بيئة مسمّاة

دع db.query يعمل، لكن فقط مقابل اتصالات آمنة — ارفضه عندما يكون الهدف prod أو replica. العامل in يطابق القيمة المُحَلّة مقابل أي عنصر من مصفوفة JSON:
{
  "label": "no agent queries against prod",
  "tool_name_glob": "db.query",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.connection\",\"op\":\"in\",\"value\":[\"prod\",\"replica\"]}]}"
}
قيمة in يجب أن تكون مصفوفة JSON — غير المصفوفة تُرفض عند حفظ القاعدة. تُقارَن العناصر بمساواة قياسية، فالأرقام والسلاسل يطابق كل منها نوعه.

4. وصفة: ارفض وجهة IP خاص أو بيانات تعريف

عندما تأخذ أداة IP هدف كوسيطة، cidr_match يختبر ما إذا كان يقع داخل CIDR — شكل SSRF لـ “وكيل يجلب 10.x أو عنوان بيانات تعريف السحابة”:
{
  "label": "deny tool calls aimed at RFC-1918",
  "tool_name_glob": "*",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.target_ip\",\"op\":\"cidr_match\",\"value\":\"10.0.0.0/8\"}]}"
}
يجب أن تُحلَّل قيمة الوسيطة كحرف IP يقع داخل CIDR؛ اسم مضيف أو سلسلة غير IP لا يطابق أبداً.
cidr_match يفحص فقط قيمة موجودة بالفعل في وسائط الأداة. لحكم الوجهة التي تصل إليها أداة فعلاً على مستوى الشبكة — قوائم سماح ومنع المضيف/CIDR — استخدم قاعدة egress مخصصة على سطح egress بدلاً من ذلك. الاثنان متكاملان: فحص الوسائط في الدخول، والتحكم في egress في الخروج.

5. وصفة: ضع سقفاً لوسيطة رقمية

gt وlt يقارنان الأرقام. استخدمهما لرفض حجم دفعة سخيف، أو حد مفرط الحجم، أو أي عدد منفلت — هنا، ارفض حذفاً دفعياً يستهدف أكثر من 100 صف:
{
  "label": "block large bulk deletes",
  "tool_name_glob": "*.bulk_delete",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.count\",\"op\":\"gt\",\"value\":100}]}"
}
يجب أن يكون الجانبان رقمين — سلسلة تبدو رقمية مثل "500" عدم تطابق نوع ولا تطابق، فلن تُطلق القاعدة على وسيطة من نوع سلسلة. أبقِ الوسيطة رقمية، أو طبّعها قبل أن تراها الأداة.

6. وصفة: ادمج العبارات (AND)

كل العبارات في قاعدة واحدة تُدمج بـ AND، فيمكنك تضييق حكم إلى استدعاء محدد جداً — مثلاً، ارفض shell.exec فقط عندما يكون أمراً مدمّراً و مُوجَّهاً نحو مضيف prod:
{
  "label": "destructive shell on a prod host",
  "tool_name_glob": "*.exec",
  "verdict": "deny",
  "args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf|drop table\"},{\"path\":\"$.host\",\"op\":\"in\",\"value\":[\"db-prod-1\",\"db-prod-2\"]}]}"
}
تحتاج OR بدلاً من ذلك؟ لا يوجد OR داخل args_match_json واحد — ألّف قاعدتين (أو globين) بأولويات مختلفة. يجتاز المحرك القواعد بترتيب الأولوية وأول مطابقة تفوز، فضع القواعد الضيّقة أولاً. انظر أولوية القاعدة.

7. اختر الحكم للشكل المطابق

تقرر العبارة أي الاستدعاءات تطابق؛ ويقرر verdict للقاعدة ما يحدث. deny هو افتراضي كتاب الطبخ، لكن نفس العبارة يمكن أن تحمل حكماً أنعم:
عندما تحمل الوسيطة المطابقة سراً أو PII بدلاً من تعليمة خطرة، sanitize ينقّح السلاسل الفرعية المطابقة من وسائط الأداة ويعيد توجيه الاستدعاء المنظَّف. ينقّح الوسائط فقط — وليس أبداً المحتوى الذي تعيده أداة. انظر تطهير الاستجابات.
علّق الشكل المحفوف بالمخاطر بالضبط للمراجعة بدلاً من حجبه صراحةً: يوافق مراجِع أو يرفض خارج النطاق، ويعيد الوكيل تقديم الاستدعاء المعتمد مرة واحدة. انظر الموافقات.
اضبط الحكم على audit لتسجيل الاستدعاء المطابق دون حجب بينما تضبط العبارة. اقرن بـ وضع الظل لقياس deny مقابل حركة المرور الحية قبل أن يغيّر أي شيء.

8. اختبر العبارة قبل أن تعتمد عليها

تبويب Test في وحدة التحكم يجري سياسة تجريبياً مقابل استدعاء أداة عينة ويعيد الحكم، والقاعدة المطابقة، والسبب — لا شيء يُرسَل، ولا شيء يُحفظ. الصق كائن وسائط واقعي وأكّد أن العبارة تُطلق على الاستدعاءات التي تقصدها وفقط تلك، إذ عبارة لا يمكنها حل قيمة لا تُطلق صامتةً. انظر اختبار القواعد.
يُتحقَّق من العبارات بصرامة عند الحفظ — العوامل المجهولة، والمسارات السيئة، وقيمة in غير المصفوفة، وregex غير القابل للترجمة، وCIDR غير الصالحة كلها تُرفض، فلا يمكن إبقاء عبارة مشوّهة في المقام الأول.

9. من يمكنه تأليف عبارات الوسائط

كل هذا يعمل في وحدة التحكم تحت جلستك (/api/workspace/firewall/*):
الإجراءالدور
قراءة السياسات، الإعدادات المسبقة، الأدوات المكتشفةMember
إنشاء / تحرير / حذف القواعدDeveloper+
صندوق رمل Test (إجراء سياسة تجريبياً)Developer+
قراءة الأحداث وتجميعات التشغيلDeveloper+
تأليف عبارة وسائط أو تغييرها كتابة Developer+. صندوق رمل Test أيضاً Developer+ — يمكنه المعاينة مقابل سياسة مسودة وأثر حكمه يكشف أسماء السياسات وعلامات القواعد، فيقع على جانب الكتابة من الخط، وليس جانب القراءة.

ذات صلة

التحقق من الوسائط

حالة استخدام مطابقة الوسائط كاملةً.

حجب الأدوات

ارفض أداة كاملة بالاسم — لا حاجة لعبارة.

التحكم في egress

احكم وجهات المضيف / IP / CIDR الصادرة.

مخطط القاعدة

كل حقل يمكن أن تحمله قاعدة.

أولوية القاعدة

أول مطابقة تفوز — رتّب الضيّق قبل العريض.

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

التهديد الذي تعالجه هذه الوصفات.