OBSD4* : wiki

Table des matières

Version de traduction basée sur la 6.2 officielle


PF - Listes et Macros

Listes

Une liste permet la spécification de critères multiples similaires dans une règle. Par exemple, de multiples protocoles, des numéros de ports, des adresses, etc… Ainsi, au lieu d'écrire une règle de filtrage pour chaque adresse IP qui a besoin d'être bloquée, une règle peut être écrite pour spécifier les adresses IP dans une liste. Les listes sont définies en spécifiant les items par l'usage des crochets { }.

Quand pfctl(8) rencontre une liste pendant le chargement du jeu de règles, il crée de multiples règles, une pour chacun des éléments 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

De multiples listes peuvent être spécifiées dans une règle :

  match in on fxp0 proto tcp to port { 22 80 } rdr-to 192.168.0.6
  block out on fxp0 proto { tcp udp } from { 192.168.0.1, 10.5.32.6 } \
     to any port { ssh https }

Les virgules entre les éléments de la liste sont optionnelles.

Les listes peuvent aussi contenir d'autres listes imbriquées :

  trusted = "{ 192.168.1.2 192.168.5.36 }"
  pass in inet proto tcp from { 10.10.0.0/24 $trusted } to port 22

Méfiez-vous des constructions suivantes, appelées “listes négatives”, qui sont une erreur commune :

  pass in on fxp0 from { 10.0.0.0/8, !10.1.2.3 }

Bien que le sens voulu corresponde à “toute adresse du réseau 10.0.0.0/8, sauf pour 10.1.2.3”, la règle s'étend à :

  pass in on fxp0 from 10.0.0.0/8
  pass in on fxp0 from !10.1.2.3

qui correspond à n'importe quelle adresse. Au lieu de cela, une table devrait être utilisée.

Macros

Les macros sont des variables définies par l'utilisateur qui peuvent comprendre des adresses IP, des numéros de ports, des noms d'interfaces, etc. Les macros peuvent réduire la complexité des jeux de règles de PF et permettent de maintenir facilement un jeu de règles.

Les noms de macros doivent démarrer avec une lettre et peuvent contenir des lettres, des chiffres et des underscores. Les noms de macros ne peuvent pas être des mots réservés, tels que pass, out ou queue.

  ext_if = "fxp0"
  
  block in on $ext_if from any to any

Cela crée une macro nommée ext_if. Quand une macro est appelée après avoir été créée, son nom est précédé du caractère $.

Les macros peuvent aussi étendre des listes, telles que :

  friends = "{ 192.168.1.1, 10.0.2.5, 192.168.43.53 }"

Les macros peuvent être définies récursivement. Comme les macros ne sont pas développées entre guillemets, la syntaxe suivante doit être utilisée :

  host1      = "192.168.1.1"
  host2      = "192.168.1.2"
  all_hosts  = "{" $host1 $host2 "}"

La macro $all_hosts est maintenant étendue à 192.168.1.1, 192.168.1.2.


Cette page est la traduction officieuse de la page “Lists and macros” de la FAQ officielle d'OpenBSD.
En cas de doute, merci de vous y référer !

Si vous voulez participer à l'effort de traduction, merci de lire ce topic.