La meilleure façon de le faire est de définir une table et de créer une règle pour bloquer les hôtes, dans pf.conf:
table <badhosts> persist
block on fxp0 from <badhosts> to any
Et puis ajoutez / supprimez dynamiquement des adresses IP:
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4
Les autres commandes «table» incluent flush(supprimer tout) replaceet show. Voirman pfctl pour en savoir plus.
Si vous voulez une liste plus permanente, vous pouvez la conserver dans un (ou plusieurs) fichiers. Dans pf.conf:
table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any
Vous pouvez également ajouter des noms d'hôtes au lieu d'adresses IP. Voir la section "Tables" de man pf.confet man pfctl.
Remarque : Les exemples ci-dessus supposent que l'interface Internet est fxp0, veuillez modifier en fonction de votre configuration. Gardez également à l'esprit que les règles dans pf.confsont évaluées de manière séquentielle et pour blockou les passrègles sont la dernière règle de correspondance qui s'applique. Avec cet ensemble de règles
table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80
et après avoir ajouté 1.2.3.4 et 192.168.0.10 au badhoststableau
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10
tout le trafic de 1.2.3.4 et 192.168.0.10 sera bloquée , mais le second hôte sera en mesure d'établir des connexions au port d'autres machines 80 parce que les passmatchs de la règle et les exceptions à la blockrègle.