[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 trois 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
Pour charger les règles directement à partir du jeu de règles principal, entourez les règles d'ancrage dans un bloc délimité par des accolades :
anchor "goodguys" {
pass in proto tcp from 192.168.2.3 to port 22
}
Les ancres spécifiées de cette façon peuvent contenir d'autres ancres.
allow = "{ 192.0.2.3 192.0.2.4 }"Lorsque les règles d'ancrage sont directement spécifiées dans le jeu de règles principal, le nom de l'ancre devient optionnel. Veuillez noter que l'ancre imbriquée dans l'exemple précité n'a pas de nom. Veuillez notez aussi que la macro $allow est créée en dehors de l'ancre (dans le jeu de règles principal) puis utilisée à l'intérieur de cette dernière.
anchor "goodguys" {
anchor {
pass in proto tcp from 192.0.2.3 to port 80
}
pass in proto tcp from $allow to port 22
}
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 syntaxes et options utilisées par les règles définies dans la base de règles principale. Une exception est à signaler cependant dans le cas des macros, sauf si vous utilisez des ancres directement dans le jeu de règles principal. 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 imbriquées, il est possible de demander l'évaluation de toutes les ancres filles :
anchor "spam/*"
Cette syntaxe cause l'évaluation de chaque règle attachée à l'ancre spam. Les ancres filles 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éparément 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 les 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, l'hôte 192.0.2.10 sera uniquement autorisé à faire des connexions SSH vu la définition de la règle d'ancrage (anchor).
La même syntaxe peut être appliquée aux ancres spécifiées directement dans le jeu de règles principal.
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
}
}
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]