[OpenBSD]

[Předchozí: Začínáme] [Obsah] [Další: Tabulky]

PF: Seznamy a Makra


Obsah


Seznamy

Seznam umožňuje specifikaci několika podobných kritérií za pomoci jediného pravidla. Například několik protokolů, čísel portů, adres, atp. Takže místo psaní filtrovacího pravidla pro každou IP adresu, kterou je třeba blokovat stačí toto pravidlo napsat za pomocí specifikace IP adres v seznamu. Seznamy jsou definovány pomocí specifikace položek ve složených { } závorkách.

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.

Makra

Makra jsou uživatelem definované proměnné, které mohou obsahovat IP adresy, čísla portů, jména síťových rozhraní, atp. Makra mohou snížit komplexnost PF pravidel a také umožňují mnohem lehčí správu pravidel.

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]


[back] www@openbsd.org
$OpenBSD: macros.html,v 1.10 2012/11/02 19:10:19 ajacoutot Exp $