Przejdź do głównej treści
Gdy dwie reguły mogłyby obie dopasować to samo wywołanie narzędzia, priorytet reguł firewalla decyduje, która wygrywa. Polityka firewalla to uporządkowana lista reguł — silnik przechodzi je w kolejności priorytetów, zatrzymuje się na pierwszej, która dopasuje, i stosuje jej werdykt. Ustaw kolejność poprawnie, a szeroki strażnik plus wąski wyjątek współistnieją czysto; ustaw ją źle, a szeroka reguła połknie wyjątek, który zamierzałeś wykroić. Ta strona to skupiona referencja porządkowania. Dla pełnej gramatyki reguł zobacz Reguły Firewall; dla werdyktów, które reguła może produkować, zobacz Werdykty.

1. Kolejność: priorytet rosnąco, wygrywa pierwsze dopasowanie

Wewnątrz polityki reguły są ewaluowane w kolejności priority ASC, id ASC:
  1. Niższy priority działa pierwszy. Reguła z priority: 0 jest sprawdzana przed tą z priority: 10. Myśl o tym jak o pozycji w kolejce, a nie wyniku siły — mniejsza liczba ma pierwsze słowo.
  2. Remisy rozstrzyga id reguły. Dwie reguły o tym samym priority działają w kolejności utworzenia (rosnące id reguły), więc starsza reguła wygrywa remis. Używaj odrębnych priorytetów, gdy kolejność faktycznie ma znaczenie, zamiast polegać na rozstrzyganiu remisu po id.
  3. Wygrywa pierwsze dopasowanie. Silnik zatrzymuje się na pierwszej regule, której warunki wszystkie zachodzą, i stosuje jej werdykt. Reguły dalej na liście nigdy nie są konsultowane dla tego wywołania.
  4. Brak dopasowania → werdykt domyślny. Jeśli nic nie pasuje, stosuje się default_verdict polityki — audit, chyba że go zmieniłeś.
Reguła dopasowuje tylko, gdy każdy zadeklarowany warunek zachodzi naraz: powierzchnia, glob nazwy narzędzia, opcjonalny glob skilla, opcjonalne klauzule argumentów oraz zakres egress (tylko reguły egress). Częściowe dopasowanie to brak dopasowania, a ewaluacja przechodzi do następnej reguły.

2. Jeden konkretny przykład: konkretne przed szerokim

Kanoniczne zadanie porządkowania to pozwolenie wąskiemu allow przetrwać szerokie deny. Umieść konkretną regułę przy niższym priorytecie, by była osiągnięta pierwsza:
// 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" }
Wywołanie shell.echo trafia najpierw w Regułę A (priorytet 10), dopasowuje i jest dozwolone — silnik nigdy nie dochodzi do Reguły B. Wywołanie shell.exec spada przez A (glob nie dopasowuje), trafia w Regułę B i jest odmawiane. Odwróć priorytety, a szerokie deny shell.* przy priorytecie 10 wychwyciłoby najpierw shell.echo, a twoje allow przy priorytecie 20 byłoby martwym kodem. Reguła kciuka: najbardziej konkretne pierwsze, najszersze ostatnie.
Nie polegaj na rozstrzyganiu remisu po id w tym celu. Jeśli allow i deny dzielą ten sam priority, zwycięzcą jest ta reguła, którą utworzyłeś pierwszą — kruchy porządek, który po cichu się odwraca, jeśli usuniesz i ponownie utworzysz regułę. Daj konkretnej regule niższy priority, a intencja jest jawna.

3. Zweryfikuj kolejność, zanim na niej polegniesz

Rozumowanie o priorytecie na papierze jest podatne na błędy, gdy polityka ma więcej niż garstkę reguł. Piaskownica Test uruchamia prawdziwy silnik wobec przykładowego wywołania narzędzia i mówi ci nie tylko werdykt, ale która reguła wygrała — więc możesz potwierdzić, że reguła, której oczekiwałeś, faktycznie odpaliła:
1

Otwórz zakładkę Test polityki

W konsoli otwórz politykę i przełącz na Test (Developer+).
2

Prześlij przykładowe wywołanie

Wprowadź nazwę narzędzia (i argumenty, jeśli twoje reguły je inspekcjonują) i uruchom. Nic nie jest dyspozytowane i nic persystowane — to dry run.
3

Odczytaj dopasowaną regułę

Wynik nazywa werdykt, dopasowaną regułę (po etykiecie/id) i powód. Jeśli szeroka reguła wygrała tam, gdzie oczekiwałeś wąskiej, obniż priority wąskiej reguły i przetestuj ponownie.
Zobacz Testowanie reguł dla pełnej piaskownicy i Zarządzanie politykami dla edycji kolejności reguł w miejscu.

4. Egzekwowanie skilla jedzie na wierzchu

Priorytet reguł decyduje o werdykcie wygrywającej reguły — ale to nie zawsze ostateczna odpowiedź. Jeśli wywołanie narzędzia jest własnością zarządzanego skilla, tryb egzekwowania skilla jest stosowany na wierzchu wygrywającego werdyktu, po rozwiązaniu pierwszego-dopasowania:
Tryb skillaEfekt na wygrywający werdykt
allowBez zmiany — werdykt reguły obowiązuje.
quarantineEskaluje wszystko poniżej deny do pending_approval; istniejące deny jest zostawione bez zmian.
blockWymusza deny niezależnie od werdyktu reguły.
Więc skill quarantine może zamienić allow reguły we wstrzymane wywołanie, a skill block odmawia wywołania, nawet gdy żadna reguła nie nazywa jego narzędzi. Quarantine tylko eskaluje — nigdy nie degraduje deny do czegoś łagodniejszego. To dlatego skill auto-wykryty jako ryzykowny pozostaje w kwarantannie, dopóki go nie przejrzysz, niezależnie od tego, jak permisywne są twoje reguły.
Tryb skilla nie jest regułą, więc nie ma priority i nie możesz go ponownie uporządkować względem swoich reguł. Zawsze ewaluuje się po wybraniu wygrywającego werdyktu. Jeśli tryb zarządzanego skilla blokuje wywołania, których oczekiwałeś zezwolić, napraw to na skillu, a nie przez dodanie reguły allow o wyższym priorytecie — reguła nie może nadpisać trybu.

5. Rzeczy, które nie jadą na pierwszym dopasowaniu

Kilka mechanizmów siedzi poza przejściem priorytetów per reguła — wiedz, gdzie lądują, byś nie próbował ich porządkować:
Reguła cap_cost poniżej swojego limitu jest traktowana jako niedopasowanie, więc ewaluacja kontynuuje do następnej reguły, zamiast pozwolić jej wygrać pierwsze dopasowanie jako przyznanie. Powyżej limitu rozwiązuje się do deny. Nigdy nie zwiera obwodu reguły o niższym priorytecie tylko przez bycie osiągniętą.
Reguła sekwencji dopasowuje łańcuch wywołań w oknie czasowym, więc jest egzekwowana reaktywnie przez asynchroniczny dopasowywacz, a nie na pojedynczym wywołaniu, które kończy łańcuch. Rozświetla strumień zdarzeń, ale nie wygrywa przejścia pierwszego-dopasowania dla pojedynczego wywołania.
Tryb cienia nie zmienia, która reguła wygrywa — degraduje wygrywający egzekwujący werdykt do audit (powód poprzedzony przedrostkiem [shadow] would …) po rozwiązaniu pierwszego-dopasowania, więc możesz zmierzyć wpływ polityki, zanim zmieni ruch.

6. Składając to razem

Dla dowolnego wywołania narzędzia pełne rozwiązywanie to:
  1. Rozwiąż politykę — tę przypiętą do wywołującego klucza lub domyślną przestrzeni roboczej. Zobacz zakres.
  2. Przejdź reguły w priority ASC, id ASC — wygrywa pierwsze dopasowanie; brak dopasowania → default_verdict.
  3. Zastosuj egzekwowanie skilla — tryb zarządzanego skilla jedzie na wierzchu wygrywającego werdyktu (block wymusza deny, quarantine eskaluje).
  4. Zastosuj tryb cienia — jeśli włączony, degraduj egzekwujące werdykty do audit.
  5. Zarejestruj zdarzenie — werdykt, powierzchnia, narzędzie i dopasowana reguła lądują w strumieniu zdarzeń.
Edycja priorytetu reguły wchodzi w życie przy następnym wywołaniu dla każdego klucza przypiętego do polityki — bez ponownego wdrożenia, bez zmiany w kodzie agenta. Uruchom ponownie piaskownicę Test po ponownym uporządkowaniu, by potwierdzić nowego zwycięzcę, zanim ruch na żywo na nim polegnie.

Dokąd dalej

Werdykty

Co każdy wygrywający werdykt faktycznie robi.

Składnia globów

Jak dopasowanie nazwy narzędzia decyduje, czy reguła jest w ogóle kandydatem.

Testuj reguły

Zrób dry-run polityki i zobacz, która reguła wygrywa.

Lista dozwolonych narzędzi

Wzorzec default-deny, który najmocniej opiera się na porządkowaniu.
Dla języka dopasowania stojącego za regułą zobacz pełną referencję Reguł Firewall; jak skille warstwują się na wierzchu, zobacz Skille Firewall i tryby egzekwowania.