La mejor manera de hacer esto es definir una tabla y crear una regla para bloquear los hosts, en pf.conf:
table <badhosts> persist
block on fxp0 from <badhosts> to any
Y luego agregue / elimine dinámicamente direcciones IP:
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4
Otros comandos de 'tabla' incluyen flush(eliminar todo) replacey show. Mira man pfctlpara más.
Si desea una lista más permanente, puede guardarla en uno (o más) archivos. En pf.conf:
table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any
También puede agregar nombres de host en lugar de direcciones IP. Consulte la sección "Tablas" de man pf.confy man pfctl.
Nota : Los ejemplos anteriores suponen que la interfaz de Internet es fxp0, cambie según su configuración. Además, tenga en cuenta que las normas en pf.confson evaluados de forma secuencial y para blocko passreglas es la última regla de coincidencia que se aplica. Con este conjunto de reglas
table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80
y después de agregar 1.2.3.4 y 192.168.0.10 a la badhoststabla
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10
todo el tráfico desde y 1.2.3.4 192.168.0.10 será bloqueada pero el segundo anfitrión será capaz de hacer conexiones al puerto otros equipos de los 80 debido a que los passpartidos de reglas y anula la blockregla.