[Wstecz: Pierwsze kroki] [Spis treści] [Dalej: Tabele]
Gdy pfctl(8) napotyka listę podczas ładowania zestawu reguł, tworzy wiele regułek, po jednej dla każdego elementu z listy. Na przykład:
block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any
jest rozwijane do:
block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any
Wiele list może być wyspecyfikowanych w jednej regule. Listy nie są ograniczone jedynie do reguł filtrujących:
rdr on fxp0 proto tcp from any to any port { 22 80 } -> \
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 }
Zwróć uwagę, że przecinki pomiędzy elementami list są opcjonalne.
Listy mogą także zawierać zagnieżdżone listy:
trusted = "{ 192.168.1.2 192.168.5.36 }"
pass in inet proto tcp from { 10.10.0.0/24 $trusted } to port 22
Wystrzegaj się konstrukcji jak poniższa. Inaczej nazwane "wykluczające się listy", są częstym błędem:
pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }
Podczas gdy zamierzone znaczenie to dopasowanie równoznaczne "dowolny adres w 10.0.0.0/8, z wyjątkiem 10.1.2.3", reguła ta jest rozwijana do:
pass in on fxp0 from 10.0.0.0/8
pass in on fxp0 from !10.1.2.3
która pasuje do dowolnego adresu. Zamiast tego, powinieneś skorzystać z tablic.
Nazwy makr muszą zaczynać się od litery i mogą zawierać: litery, cyfry oraz podkreślniki. Nazwy makr nie mogą być zarezerwowanymi słowami, takimi jak pass, out, queue, itp.
ext_if = "fxp0"
block in on $ext_if from any to any
W tym przykładzie utworzono makro ext_if. Gdy odwołuje się do makra po jego zdefiniowaniu, robi się to poprzedzając jego nazwę znakiem $.
Makra mogą być także listami, jak np:
friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"
Makra mogą być definiowane rekursywnie. Ponieważ makra nie są rozszerzane pomiędzy nawiasami, stosuje się następującą składnię:
host1 = "192.168.1.1"
host2 = "192.168.1.2"
all_hosts = "{" $host1 $host2 "}"
Makro $all_hosts jest teraz rozszerzane do 192.168.1.1, 192.168.1.2.
[Wstecz: Pierwsze kroki] [Spis treści] [Dalej: Tabele]