[OpenBSD]

[Precedente: Introduzione] [Indice] [Successivo: Tabelle]

PF: Liste e Macro


Indice


Liste

Una lista consente di applicare un'unica regola a diversi parametri. Per esempio molteplici protocolli, numeri di porte, indirizzi, ecc. Così, invece di scrivere una regola di firewall per ogni indirizzo IP da bloccare, può essere scritta un'unica regola indicando gli indirizzi IP in una lista. Le liste sono definite specificando i parametri tra parentesi graffe { }.

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.

Macro

Le macro sono variabili definite dall'utente che possono contenere indirizzi IP, numeri di porte, nomi di interfaccie, ecc. Le macro possono ridurre la complessità nella definizione e nel mantenimento delle regole di configurazione di PF.

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]


[back] www@openbsd.org
$OpenBSD: macros.html,v 1.4 2009/02/22 20:35:21 tobias Exp $