[Precedente: Introduzione] [Indice] [Successivo: Tabelle]
Quando pfctl(8) trova una lista durante il caricamento dei parametri di configurazione, crea più regole, una per ogni parametro della lista. Per esempio:
block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any
viene espansa a:
block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any
In una singola regola possono essere definite diverse liste non necessariamente limitate alle sole regole di filtraggio:
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 }
Da notare che le virgole tra i diversi parametri sono opzionali.
Le liste possono anche contenere liste annidate:
trusted = "{ 192.168.1.2 192.168.5.36 }"
pass in inet proto tcp from { 10.10.0.0/24 $trusted } to port 22
Fare attenzione alle liste chiamate "liste negate", le quali, formulate come nell'esempio seguente, sono un errore comune:
pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }
Mentre l'intenzione è quella di considerare ogni "indirizzo della network 10.0.0.0/8 con l'eccezione dell'indirizzo 10.1.2.3, la regola si espande in:
pass in on fxp0 from 10.0.0.0/8
pass in on fxp0 from !10.1.2.3
che consente di far passare tutti i pacchetti della network compresi quelli provenienti dall'indirizzo 10.1.2.3. Per risolvere questo problema si sarebbe dovuto usare una tabella.
I nomi delle macro devono iniziare con una lettera e possono contenere lettere, digit, e underscores. Per i nomi delle macro non è possibile utilizzare parole riservate come pass, out, o queue.
ext_if = "fxp0"
block in on $ext_if from any to any
Questo crea una macro chiamata ext_if. Quando ci si riferisce a una macro dopo che è stata creata, il suo nome è preceduto dal carattere $.
Le macro possono essere espanse a liste come:
friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"
Le macro possono essere definite in modo ricorsivo. Non essendo espanse con le virgolette, possono essere definite anche ricorrendo alla seguente sintassi:
host1 = "192.168.1.1"
host2 = "192.168.1.2"
all_hosts = "{" $host1 $host2 "}"
La macro $all_hosts si espande a 192.168.1.1, 192.168.1.2.
[Precedente: Introduzione] [Indice] [Successivo: Tabelle]