الانتقال إلى المحتوى الرئيسي
عندما يمكن لقاعدتين أن تطابقا نفس استدعاء الأداة، تقرر أولوية قواعد جدار الحماية أيّهما تفوز. سياسة جدار الحماية هي قائمة مرتبة من القواعد — يجتازها المحرك بترتيب الأولوية، ويتوقف عند أول واحدة تطابق، ويطبّق حكمها. اضبط الترتيب صحيحاً ويتعايش حارس عريض مع استثناء ضيّق بنظافة؛ أخطئه وتبتلع القاعدة العريضة الاستثناء الذي قصدت نحته. هذه الصفحة هي المرجع المركّز للترتيب. للنحو الكامل للقواعد انظر قواعد جدار الحماية؛ وللأحكام التي يمكن أن تنتجها قاعدة انظر الأحكام.

1. الترتيب: أولوية تصاعدية، أول مطابقة تفوز

داخل السياسة، تُقيَّم القواعد بترتيب priority ASC, id ASC:
  1. الأولوية الأدنى تُشغَّل أولاً. قاعدة بـ priority: 0 تُفحص قبل واحدة بـ priority: 10. فكّر فيها كموضع في الطابور، لا درجة قوة — الرقم الأصغر يأخذ الكلمة أولاً.
  2. تُحسم التعادلات بمعرّف القاعدة. قاعدتان عند نفس priority تُشغَّلان بترتيب الإنشاء (معرّف قاعدة تصاعدي)، فتفوز القاعدة الأقدم بالتعادل. استخدم أولويات متمايزة حين يهمّ الترتيب فعلاً بدلاً من الاعتماد على حسم تعادل المعرّف.
  3. أول مطابقة تفوز. يتوقف المحرك عند أول قاعدة تتحقق كل شروطها ويطبّق حكمها. القواعد الأبعد في القائمة لا تُستشار أبداً لذلك الاستدعاء.
  4. لا مطابقة ← الحكم الافتراضي. إذا لم يطابق شيء، يُطبَّق default_verdict للسياسة — audit ما لم تغيّره.
تطابق القاعدة فقط عندما يتحقق كل شرط معلَن دفعةً واحدة: السطح، و glob اسم الأداة، وglob المهارة الاختياري، وعبارات الوسائط الاختيارية، ونطاق egress (قواعد egress فقط). المطابقة الجزئية ليست مطابقة، وينتقل التقييم إلى القاعدة التالية.

2. مثال ملموس واحد: المحدّد قبل العريض

مهمة الترتيب النموذجية هي السماح لـallow ضيّق بأن ينجو من deny عريض. ضع القاعدة المحدّدة عند أولوية أدنى كي يُبلَغ إليها أولاً:
// Rule A — priority 10: trust this one exact tool.
{ "label": "allow safe shell", "priority": 10,
  "tool_name_glob": "shell.echo", "verdict": "allow" }

// Rule B — priority 20: block the rest of the shell family.
{ "label": "block shell family", "priority": 20,
  "tool_name_glob": "shell.*", "verdict": "deny" }
استدعاء shell.echo يصطدم بـ Rule A أولاً (أولوية 10)، ويطابق، ويُسمح به — لا يصل المحرك إلى Rule B أبداً. استدعاء shell.exec يسقط عبر A (لا يطابق glob)، ويصطدم بـ Rule B، ويُرفض. اقلب الأولويات وسيصطاد deny العريض shell.* عند أولوية 10 shell.echo أولاً، وسيصير allow الخاص بك عند أولوية 20 كوداً ميتاً. القاعدة العامة: الأكثر تحديداً أولاً، الأعرض أخيراً.
لا تعتمد على حسم تعادل المعرّف لهذا. إذا تشارك allow وdeny نفس priority، فالفائز هو أيّ قاعدة أنشأتها أولاً — ترتيب هشّ ينقلب صامتاً إذا حذفت قاعدة وأعدت إنشاءها. أعطِ القاعدة المحدّدة priority أدنى ويصير القصد صريحاً.

3. تحقّق من الترتيب قبل أن تعتمد عليه

التفكير في الأولوية على الورق عرضة للخطأ بمجرد أن يتجاوز عدد قواعد السياسة حفنةً. صندوق الرمل Test يشغّل المحرك الحقيقي مقابل استدعاء أداة عينة ويخبرك ليس فقط بالحكم بل بـأي قاعدة فازت — فيمكنك تأكيد أن القاعدة التي توقّعتها أُطلقت فعلاً:
1

افتح تبويب Test للسياسة

في وحدة التحكم، افتح السياسة وانتقل إلى Test (Developer+).
2

أرسِل استدعاءً عينةً

أدخِل اسم أداة (ووسائط، إن كانت قواعدك تفحصها) وشغّله. لا يُرسَل شيء ولا يُحفظ شيء — إنه تشغيل تجريبي.
3

اقرأ القاعدة المطابقة

تسمّي النتيجة الحكم، والقاعدة المطابقة (بالعلامة/المعرّف)، والسبب. إذا فازت قاعدة عريضة حيث توقّعت ضيّقة، اخفض priority القاعدة الضيّقة وأعد الاختبار.
انظر اختبار القواعد لصندوق الرمل الكامل، وإدارة السياسات لتعديل ترتيب القواعد في مكانها.

4. فرض المهارة يركب فوق

تقرر أولوية القواعد حكم القاعدة الفائزة — لكن ذلك ليس دائماً الجواب النهائي. إذا كان استدعاء الأداة مملوكاً لـمهارة محكومة، يُطبَّق وضع فرض المهارة فوق الحكم الفائز، بعد حسم أول مطابقة:
وضع المهارةالأثر على الحكم الفائز
allowلا تغيير — يبقى حكم القاعدة قائماً.
quarantineيصعّد أي شيء دون deny إلى pending_approval؛ ويُترَك deny قائم كما هو.
blockيفرض deny بغضّ النظر عن حكم القاعدة.
فمهارة quarantine يمكنها تحويل allow لقاعدة إلى استدعاء مُعلَّق، ومهارة block ترفض استدعاءً حتى عندما لا تسمّي أي قاعدة أدواتها. الحجر الصحي يصعّد فقط — ولا يخفّض deny أبداً إلى شيء أنعم. لهذا تبقى مهارة كُشِفت تلقائياً كخطرة محجوزةً في الحجر الصحي حتى تراجعها، مهما كانت قواعدك متساهلة.
وضع المهارة ليس قاعدة، فليس له priority ولا يمكنك إعادة ترتيبه نسبةً إلى قواعدك. يُقيَّم دائماً بعد اختيار الحكم الفائز. إذا كان وضع مهارة محكومة يحجب استدعاءات توقّعت السماح بها، أصلِحه على المهارة، لا بإضافة قاعدة allow بأولوية أعلى — لا يمكن للقاعدة أن تتجاوز الوضع.

5. أشياء لا تركب أول مطابقة

بضع آليات تقع خارج اجتياز الأولوية لكل قاعدة — اعرف أين تحطّ كي لا تحاول ترتيبها:
قاعدة cap_cost تحت سقفها تُعامَل كـغير مطابقة، فيستمر التقييم إلى القاعدة التالية بدلاً من السماح لها بالفوز أول-مطابقة كمنحة. فوق السقف تُحَل إلى deny. لا تقصر دائرة قاعدة بأولوية أدنى لمجرد أنه بُلِغ إليها.
تطابق قاعدة التسلسل سلسلة استدعاءات عبر نافذة زمنية، فتُفرَض تفاعلياً بمُطابِق غير متزامن بدلاً من الاستدعاء المفرد الذي يُكمل السلسلة. تُشعل تغذية الأحداث لكنها لا تفوز اجتياز أول-مطابقة لاستدعاء منفرد.
وضع الظل لا يغيّر أيّ قاعدة تفوز — بل يخفّض الحكم الفارض الفائز إلى audit (يُسبَق السبب بـ [shadow] would …) بعد حسم أول-مطابقة، فيمكنك قياس أثر سياسة قبل أن تغيّر حركة المرور.

6. تجميع كل ذلك

لأي استدعاء أداة، الحل الكامل هو:
  1. حُلّ السياسة — تلك المرتبطة بالمفتاح المستدعي، أو افتراضي مساحة العمل. انظر النطاق.
  2. اجتَز القواعد بـ priority ASC, id ASC — أول مطابقة تفوز؛ لا مطابقة ← default_verdict.
  3. طبّق فرض المهارة — يركب وضع المهارة المحكومة فوق الحكم الفائز (block يفرض deny، وquarantine يصعّد).
  4. طبّق وضع الظل — إن كان مفعّلاً، اخفض الأحكام الفارضة إلى audit.
  5. سجّل الحدث — يحطّ الحكم، والسطح، والأداة، والقاعدة المطابقة في تغذية الأحداث.
تعديل أولوية قاعدة يحدث أثره في الاستدعاء التالي لكل مفتاح مرتبط بالسياسة — بدون إعادة نشر، بدون تغيير في كود الوكيل. أعد تشغيل صندوق رمل Test بعد إعادة الترتيب لتأكيد الفائز الجديد قبل أن تعتمد عليه حركة المرور الحية.

إلى أين تذهب بعد ذلك

الأحكام

ماذا يفعل كل حكم فائز فعلاً.

نحو الـ glob

كيف تقرر مطابقة اسم الأداة ما إذا كانت القاعدة مرشَّحة أصلاً.

اختبار القواعد

شغّل سياسة تجريبياً وانظر أيّ قاعدة تفوز.

قائمة سماح الأدوات

نمط الحجب الافتراضي الذي يتّكئ أشدّ ما يكون على الترتيب.
للغة المطابقة وراء قاعدة، انظر مرجع قواعد جدار الحماية الكامل؛ ولكيفية ركوب المهارات فوق، انظر مهارات جدار الحماية و أوضاع الفرض.