[Předchozí: Začínáme] [Obsah] [Další: Tabulky]
Když pfctl(8) narazí na seznam během nahrávání pravidel, tak vytvoří několikanásobné pravidlo, jedno pro každou položku v seznamu. Například:
block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any
se rozšíří na:
block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any
Vícenásobné seznamy mohou být specifikovány uvnitř pravidla:
match in on fxp0 proto tcp to port { 22 80 } rdr-to 192.168.0.6
block out on fxp0 proto { tcp udp } from { 192.168.0.1, \
10.5.32.6 } to any port { ssh telnet }
Všimněte si, že čárky mezi položkama nejsou povinné.
Seznamy také mohou obsahovat vnořené seznamy:
trusted = "{ 192.168.1.2 192.168.5.36 }"
pass in inet proto tcp from { 10.10.0.0/24 $trusted } to port 22
Vyhněte se konstrukcím jako je ta následující, "negované seznamy" , které jsou běžnou chybou:
pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }
Zamýšleným výsledkem je obvykle tato aplikace "jakákoliv adresa v rozsahu 10.0.0.0/8, mimo 10.1.2.3", ale pravidlo se rozšíří na:
pass in on fxp0 from 10.0.0.0/8
pass in on fxp0 from !10.1.2.3
které je platné pro jakoukoliv adresu. Je tedy lépe použít tabulku místo výše uvedeného.
Jména maker musí začínat písmenem a mohou obsahovat písmena, číslice a podtržítko. Jména maker nemohou být rezervovaná slova jako pass, out nebo queue.
ext_if = "fxp0"
block in on $ext_if from any to any
Toto vytvoří makro pojmenované ext_if. Když se pak na makro po jeho vytvoření odkazuje, tak se před jeho jméno přidá znak $.
Makra se také mohou rozšiřovat do seznamů, jako např.
friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"
Makra mohou být definovaná rekurzivně. Protože makra nejsou v uvozovkách expandovaná, tak musí být použita následující syntaxe:
host1 = "192.168.1.1"
host2 = "192.168.1.2"
all_hosts = "{" $host1 $host2 "}"
Makro $all_hosts se nyní expanduje do 192.168.1.1, 192.168.1.2.
[Předchozí: Začínáme] [Obsah] [Další: Tabulky]