[Precedente: Scrub (Packet Normalization)] [Indice] [Successivo: Packet Queueing e Prioritization]
Le regole secondarie sono collegate alle regole di configurazione principali usando ancore. Ci sono quattro tipi di anchor:
Per esempio:
ext_if = "fxp0"
block on $ext_if all
pass out on $ext_if all keep state
anchor goodguys
Queste regole configurano la policy di default deny sulla fxp0 per il traffico dei pacchetti entranti e uscenti. Al traffico in uscita è applicata l'opzione keep state e viene creata un ancora di nome goodguys. Le ancore possono essere riempite di regole usando tre metodi:
La regola load consente a pfctl di riempire un ancora specificata leggendo le regole da un file di testo. La regola load deve essere preceduta dalla regola ancora. Esempio:
anchor goodguys
load anchor goodguys from "/etc/anchor-goodguys-ssh"
Per aggiungere regole a un ancora usando pfctl, può essere usato il seguente comando:
# echo "pass in proto tcp from 192.0.2.3 to any port 22" \
| pfctl -a goodguys -f -
Le regole possono anche essere salvate e caricate da un file di testo:
# cat >> /etc/anchor-goodguys-www
pass in proto tcp from 192.0.2.3 to any port 80
pass in proto tcp from 192.0.2.4 to any port { 80 443 }
# pfctl -a goodguys -f /etc/anchor-goodguys-www
Per caricare regole direttamente dalle regole principali, racchiudere le regole ancora tra parentesi graffe:
anchor "goodguys" {
pass in proto tcp from 192.168.2.3 to port 22
}
Le ancore in linea possono contenere ulteriori ancore.
allow = "{ 192.0.2.3 192.0.2.4 }"Con le regole in linea il nome dell'ancora è opzionale. Da notare come l'ancora annidata dell'esempio precedente non abbia un nome. Inoltre c'è da notare come la macro $allow sia creata fuori dall'ancora (tra le regole principali) e sia usata nell'ancora.
anchor "goodguys" {
anchor {
pass in proto tcp from 192.0.2.3 to port 80
}
pass in proto tcp from $allow to port 22
}
Le regole di filtraggio e traslazione possono essere caricate in un ancora usando la stessa sintassi e le stesse opzioni delle regole caricate nel set di regole principali. Tuttavia c'è una differenza, le macros utilizzate nell'ancora devono essere definite all'interno dell'ancora; macro definite nel set di regole principali generatrici dell'ancora non sono visibili dalle regole dell'ancora.
Dato che le ancore possono essere annidate, è possibile specificare che tutte le ancore generate da una specifica ancora siano valutate:
anchor "spam/*"
Questa sintassi impone che ogni regola appartenente a ogni ancora legata all'ancora spam venga valutata. Le ancore figlie saranno valutate in ordine alfabetico ma non in modo ricorsivo discendente. Le regole ancora sono sempre valutate in modo relativo rispetto all'ancora dalla quale sono definite.
Ogni ancora, come le regole di configurazione principali, esiste indipendentemente dalle altre regole. Le operazioni eseguite su un set di regole, come il cancellare le regole, non hanno alcun effetto sulle altre regole. Inoltre, rimuovere un punto di ancoraggio dal set di regole principali non cancella ne l'ancora ne eventuali ancore figlie legate all'ancora. L'ancora è intatta fin quando non viene ripulita di tutte le regole e dalle eventuali ancore figlie usando pfctl(8).
ext_if = "fxp0"
block on $ext_if all
pass out on $ext_if all keep state
anchor ssh in on $ext_if proto tcp from any to any port 22
Le regole nell'ancora ssh sono valutate solo per pacchetti TCP in ingresso alla scheda fxp0 e destinati alla porta 22. Le regole possono essere aggiunte all'ancora nel seguente modo:
# echo "pass in from 192.0.2.10 to any" | pfctl -a ssh -f -
Così anche se la regola del filtro non specifica interfaccia, protocollo o porta, per la definizione della regola ancora l'host 192.0.2.10 potrà effettuare solo una connessione SSH.
La stessa sintassi può essere applicata alle ancore in linea.
allow = "{ 192.0.2.3 192.0.2.4 }"
anchor "goodguys" in proto tcp {
anchor proto tcp to port 80 {
pass from 192.0.2.3
}
anchor proto tcp to port 22 {
pass from $allow
}
}
Per vedere la lista delle regole nell'ancora ssh:
# pfctl -a ssh -s rules
Per ripulire tutte le regole da una stessa ancora:
# pfctl -a ssh -F rules
Per l'intera lista di comandi, vedere pfctl(8).
[Precedente: Scrub (Packet Normalization)] [Indice] [Successivo: Packet Queueing e Prioritization]