[Precedente: Liste e Macro]
[Indice]
[Successivo: Filtraggio pacchetti]
PF: Tabelle
Indice
Introduzione
Una tabella è usata per contenere un gruppo di indirizzi IPv4 e/o IPv6.
Le verifiche su una tabella sono molto più veloci e consumano meno
memoria rispetto a una lista.
Ad esempio la verifica di una tabella con 50.000 indirizzi richiede
solo un pò più di tempo rispetto a una che ne contiene solo 50. Le
tabelle possono essere usate nei seguenti modi:
- indirizzo sorgente e/o destinazione nelle regole di
filtraggio, scrub,
NAT, e reindirizzamento
rules.
- traslazione di indirizzo nelle regole diNAT.
- redirezione di indirizzo nelle regole di
reindirizzamento.
- indirizzo di destinazione nelle opzioni delle regole di
filtraggio route-to, reply-to, e
dup-to.
Le tabelle sono create sia in
pf.conf oppure utilizzando
pfctl(8).
Configurazione
In pf.conf, le tabelle sono create usando la direttiva
table.
Per ogni tabella possono essere specificati i seguenti attributi:
- const - il contenuto della tabella non può essere
cambiato dopo averla creata. Quando questo attributo non è specificato,
in ogni momento può essere usato
pfctl(8) per aggiungere o rimuovere indirizzi della tabella persino durante
l'esecuzione con un
securelevel(7)di due o più grande.
- persist - impone al kernel di mantenere in memoria una
tabella anche se nessuna regola fa riferimento ad essa. Senza questo
attributo, il kernel rimuove automaticamente una tabella
dalla memoria nell'istante in cui viene ripulita l'ultima regola che
fa riferimento a quella tabella.
Esempio:
table <goodguys> { 192.0.2.0/24 }
table <rfc1918> const { 192.168.0.0/16, 172.16.0.0/12, \
10.0.0.0/8 }
table <spammers> persist
block in on fxp0 from { <rfc1918>, <spammers> } to any
pass in on fxp0 from <goodguys> to any
Gli indirizzi possono essere specificati usando anche la negazione
(o "not") come ad esempio:
table <goodguys> { 192.0.2.0/24, !192.0.2.5 }
La tabella goodguys sarà costituita da tutti gli indirizzi
della network 192.0.2.0/24 con l'eccezione di 192.0.2.5.
Da notare che i nomi delle tabelle sono sempre racchiusi da < >.
Le tabelle possono anche essere composte da file di testo contenenti
liste di indirizzi IP e network:
table <spammers> persist file "/etc/spammers"
block in on fxp0 from <spammers> to any
Il file /etc/spammers conterrebbe una lista di
indirizzi IP e/o blocchi di network
CIDR
disposti uno per linea. Ogni linea che inizia con # è
considerata un commento e viene ignorata.
Modifiche con pfctl
Le tabelle possono essere modificate in ogni istante usando
pfctl(8).
Ad esempio per aggiungere una network alla tabella <spammers>
creata precedentemente:
# pfctl -t spammers -T add 218.70.0.0/16
Questo comando consente inoltre di creare la tabella
<spammers> se non dovesse esistere.
Per vedere la lista degli indirizzi di una tabella:
# pfctl -t spammers -T show
L'argomento -v può essere usato con -Tshow per
mostrare statistiche riferite a ogni parametro della tabella:
To remove addresses from a
table:
# pfctl -t spammers -T delete 218.70.0.0/16
Per ulteriori informazioni su come modificare le tabelle con
pfctl, vedere
pfctl(8).
Definire gli indirizzi
Gli host possono essere identificati da un indirizzo IP oppure da un
hostname. Quando il nome dell'host viene risolto in un indirizzo IP,
il risultante indirizzo IPv4 o IPv6 si sostituisce all'hostname nella
tabella. Gli indirizzi IP possono anche essere inseriti in una tabella
specificando un nome di interfaccia valido oppure utilizzando la
keyword self. La tabella conterrà quindi tutti gli indirizzi
IP assegnati a quell'interfaccia o all'host (inclusi gli indirizzi di
loopback).
In una tabella non è consentito specificare gli indirizzi
0.0.0.0/0 e 0/0. L'alternativa è di fare l'hard code
di quell'indirizzo oppure utilizzare una
macro.
Corrispondenza di indirizzo
Una regola di firewall che fa riferimento a una tabella verifica ogni
indirizzo della tabella per trovare una corrispondenza. Questo
consente di creare tabelle come la seguente:
table <goodguys> { 172.16.0.0/16, !172.16.1.0/24, 172.16.1.100 }
block in on dc0 all
pass in on dc0 from <goodguys> to any
L'indirizzo sorgente di ogni pacchetto in ingresso a dc0 sarà
confrontato con gli indirizzi della tabella <goodguys>:
- 172.16.50.5 - rientra negli indirizzi della network 172.16.0.0/16
e quindi il pacchetto corrispondente verrà fatto passare
- 172.16.1.25 - è un indirizzo della network 172.16.1.0/24, ci
sarebbe quindi una corrispondenza se l'indirizzo della network non
fosse negato (carattere "!"); quindi il pacchetto viene bloccato
- 172.16.1.100 - c'è una corrispondenza esatta con 172.16.1.100;
il pacchetto viene lasciato passare
- 10.1.4.55 - dnon c'è alcuna corrispondenza con gli indirizzi
della tabella e quindi il pacchetto viene bloccato
[Precedente: Liste e Macro]
[Indice]
[Successivo: Filtraggio pacchetti]
www@openbsd.org
$OpenBSD: tables.html,v 1.3 2008/02/22 10:12:26 tobias Exp $