Outils pour utilisateurs

Outils du site


openbsd.org:faq:pf:tables

OpenBSD PF: Tables : (v1.60 ; 05/05/2021)

— [ FAQ Index ] | [ Index PF ] ~ Traduction française de la page OpenBSD PF : Tables —

PF - Tables

Introduction

Une table est utilisée pour contenir un groupe d'adresses IPv4 et/ou IPv6. L'usage de table est très rapide, et consomme moins de mémoire et de temps processeur que les listes. Pour cette raison, une table est idéale pour contenir un grand groupe d'adresses puisque le temps de consultation d'une table contenant 50 000 adresses est seulement un peu plus long que celle contenant 50 adresses. Les tables peuvent être utilisées pour :

  • Les adresses source et/ou destination dans les règles.
  • Les options de règles de translation et de redirection d'adresses nat-to et rdr-to, respectivement.
  • Les options de règles d'adresses de destination route-to, reply-to et dup-to.

Les tables sont créées soit dans pf.conf(5) ou soit en utilisant pfctl(8).

Configuration

Les tables sont créées en utilisant la directive table dans pf.conf. Les attributs suivants peuvent être spécifiés pour chaque table :

  • const : le contenu de la table ne peut pas être changé une fois que la table est créée. Quand cet attribut n'est pas spécifié, pfctl(8) peut être utilisé pour ajouter ou enlever des adresses depuis la table à tout instant, même avec le niveau de sécurité 'securelevel(7)' réglé sur deux ou plus.
  • persist : oblige le noyau à garder la table en mémoire même quand aucune règle ne s'y réfère. Sans cet attribut, le noyau supprimera automatiquement la table quand la dernière règle référencée est vidée.

Exemple :

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

Les adresses peuvent être aussi spécifiées par l'utilisation du modificateur de négation (ou “not”), telle que :

table <goodguys> { 192.0.2.0/24, !192.0.2.5 }

La table goodguys correspondra maintenant à toutes les adresses du réseau 192.0.2.0/24 excepté 192.0.2.5.

Notez que les noms de table sont toujours enfermés dans les chevrons < >.

Les tables peuvent aussi être remplies depuis des fichiers texte contenant une liste d'adresses IP et de réseaux :

table <spammers> persist file "/etc/spammers"
block in on fxp0 from <spammers> to any

Le fichier /etc/spammers devrait contenir une liste d'adresses IP et/ou des blocs de réseaux CIDR, un par ligne.

Manipulations avec pfctl

Les tables peuvent être manipulées à la volée en utilisant pfctl(8). Pour l'exemple, pour ajouter des entrées à la table <spammers> créée, ci-dessus :

# pfctl -t spammers -T add 203.0.113.0/24

Ceci aussi créera la table <spammers> si elle n'existe pas déjà. Pour lister les adresses d'une table, exécutez :

# pfctl -t spammers -T show

L'argument -v peut aussi être utilisé avec l'option -T show pour afficher les statistiques de chaque entrée de la table. Pour supprimer des adresses d'une table, exécutez :

# pfctl -t spammers -T delete 203.0.113.0/24

Pour avoir plus d'informations sur comment manipuler les tables avec pfctl, lisez la page de manuel pfctl(8).

Spécifier des adresses

En plus d'être spécifié par l'adresse IP, les hôtes peuvent aussi être spécifiés par leur nom d'hôte. Quand le nom d'hôte est résolu par une adresse IP, toutes les adresses IPv4 et IPv6 sont placées dans la table. Les adresses IP peuvent être aussi entrées dans une table en spécifiant un nom valide d'interface, un groupe d'interfaces, ou le mot clé self. La table contiendra alors toutes les adresses IP assignées à telle interface ou tel groupe, ou machine (incluant l'adresse de bouclage), respectivement.

Une limitation lors de la spécification des adresses est que 0.0.0.0/0 et 0/0 ne fonctionnent pas dans les tables. L'alternative est de coder en dur l'adresse ou d'utiliser une macro.

Correspondance d'adresses

Une recherche d'adresse contenue dans une table retournera l'entrée qui correspond le mieux. Cela permet la création de tables, telles que :

table <goodguys> { 172.16.0.0/16, !172.16.1.0/24, 172.16.1.100 }
    
block in on dc0
pass  in on dc0 from <goodguys>

Tout paquet arrivant au-travers de dc0 aura son adresse source mise en correspondance avec la table <goodguys> :

  • 172.16.50.5 : la correspondance la plus proche est 172.16.0.0/16 ; le paquet correspond à la table et passera.
  • 172.16.1.25 : la correspondance la plus proche est !172.16.1.0/24 ; le paquet correspond à une entrée de la table mais cette entrée est négative (elle utilise le modificateur “!”) ; le paquet ne correspond pas à la table et ne passera pas.
  • 172.16.1.100 : une exacte correspondance à 172.16.1.100 ; le paquet correspond à la table et passera.
  • 10.1.4.55 : ne correspond pas à la table et sera bloqué.

Cette page est la traduction officieuse de la page “Tables” 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.


Contribut(rice|eur)s :

jibe kuniyoshi pengouinpdt
openbsd.org/faq/pf/tables.txt · Dernière modification: 2021/05/10 17:07 de pengouinpdt