[Précédent : Scrub (Normalisation de Paquets)] [Index] [Suivant : Gestion de La Bande Passante]
Les bases de règles secondaires sont attachées à la base de règles principale à l'aide d'ancres. Il existe quatre types de règles anchor (ancre en anglais) :
Par exemple :
ext_if = "fxp0"
block on $ext_if all
pass out on $ext_if all keep state
anchor goodguys
Cette base de règles implémente une politique dite restrictive (tout ce qui n'est pas connu est interdit par défaut) sur l'interface fxp0 aussi bien pour le trafic entrant que le trafic sortant. Le trafic sortant est ensuite autorisé et un état est gardé. Ensuite une règle d'ancrage est créée avec le nom goodguys. Les ancres peuvent être peuplées avec des règles de deux façons différentes :
La règle de chargement load est utilisée pour ordonner à pfctl de peupler l'ancre spécifiée à partir d'un fichier texte. La règle load doit être placée après la règle anchor. Par exemple :
anchor goodguys
load anchor goodguys from "/etc/anchor-goodguys-ssh"
Pour ajouter des règles à une ancre à l'aide de pfctl, le type de commandes suivant devra être employé :
# echo "pass in proto tcp from 192.0.2.3 to any port 22" \
| pfctl -a goodguys -f -
Les règles peuvent aussi être sauvegardées et chargées à partir d'un fichier texte :
# 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
Des règles de filtrage et de traduction peuvent être chargées dans une base de règles nommée en utilisant les mêmes syntaxe et options utilisées par les règles définies dans la base de règles principale. Une exception est à signaler cépendant dans le cas des macros. Les macros utilisées dans une base de règles nommée doivent aussi être définies dans la base de règles nommée qui les utilisent; les macros définies dans la base de règles principale ne sont pas visibles par les bases de règles nommées.
Etant donné que les ancres peuvent être encastrées, il est possible de demander l'évaluation de toutes les ancres fille :
anchor "spam/*"
Cette syntaxe cause l'évaluation de chaque règle attachée à l'ancre spam. Les ancres fille seront évaluées dans l'ordre alphabétique mais ne sont pas parcourues récursivement. Les ancres sont toujours relatives à l'ancre dans laquelle elles sont définies.
Chaque ancre, ainsi que la base de règles principale, existe séparemment des autres jeux de règles. Les opérations effectuées sur une base de règles, telles que la suppression des règles, n'a aucun effet sur les autres bases. De plus, la suppression d'un point d'ancrage dans la base de règles principale ne détruit pas l'ancre ni ancres attachées à celles- ci. Une ancre n'est détruite que lorsque toutes les ancres qu'elle contient sont supprimées à l'aide de 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
Les règles de l'ancre ssh sont uniquement évaluées pour les paquets TCP destinés au port 22 en entrée de fxp0. Ces règles sont alors ajoutées à l'ancre (anchor) de la façon suivante :
# echo "pass in from 192.0.2.10 to any" | pfctl -a ssh -f -
Ainsi, même si la règle de filtrage ne spécifie ni l'interface, ni le protocole ni d'autres paramètres tels que le port, le hôte 192.0.2.10 sera uniquement autorisé à faire des connexions SSH vu la définition de la règle d'ancrage (anchor).
Pour lister toutes les règles de l'ancre ssh :
# pfctl -a ssh -s rules
Pour supprimer toutes les règles de filtrage de la même ancre :
# pfctl -a ssh -F rules
Pour une liste complète des commandes, veuillez consulter pfctl(8).
[Précédent : Scrub (Normalisation de Paquets)] [Index] [Suivant : Gestion de La Bande Passante]