[Précédent : Principes de Base] [Index] [Suivant : Tables]
Quand pfctl(8) rencontre une liste durant le chargement de la base de règles, il crée de multiples règles : une règle pour chaque élément de la liste. Par exemple :
block out on fxp0 from { 192.168.0.1, 10.5.32.6 } to any
devient :
block out on fxp0 from 192.168.0.1 to any
block out on fxp0 from 10.5.32.6 to any
Plusieurs listes peuvent être utilisées dans une même règle. Elles ne sont pas limitées aux règles de filtrage :
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 }
Les virgules entre les éléments d'une même liste sont optionnelles.
Les listes peuvent également inclurent d'autres listes :
trusted = "{ 192.168.1.2 192.168.5.36 }"
pass in inet proto tcp from { 10.10.0.0/24 $trusted } to port 22
Attention aux expressions suivantes connues sous le nom de "listes négatives", elles constituent une erreur commune :
pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }
A l'origine, le but recherché est d'appliquer la règle précitée à n'importe quelle adresse du réseau 10.0.0.0/8 à l'exception de 10.1.2.3. Mais en réalité, cette règle est interprétée de la façon suivante :
pass in on fxp0 from 10.0.0.0/8
pass in on fxp0 from !10.1.2.3
Ce qui correspond à accepter le trafic de n'importe quelle adresse. Pour éviter cela, utilisez une table.
Les noms de macros doivent commencer par une lettre et peuvent contenir des lettres, des chiffres et des barres de soulignement "_". Les noms des macros ne doivent pas être des noms réservés tels que pass, out ou queue.
ext_if = "fxp0"
block in on $ext_if from any to any
L'exemple précédent montre comment créer une macro nommée ext_if. Quand une macro est appelée après avoir été créée, son nom est précédé d'un caractère $.
Les macros peuvent aussi représenter des listes tel que le montre l'exemple suivant :
friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"
Elles peuvent être définies de manière récursive. Vu qu'elles ne sont pas traduites dans des guillemets "", la syntaxe suivante doit être employée :
host1 = "192.168.1.1"
host2 = "192.168.1.2"
all_hosts = "{" $host1 $host2 "}"
La macro $all_hosts correspond maintenant à la liste d'adresses IP {192.168.1.1 192.168.1.2}.
[Précédent : Principes de Base] [Index] [Suivant : Tables]