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) replace
y show
. Mira man pfctl
para 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.conf
y 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.conf
son evaluados de forma secuencial y para block
o pass
reglas 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 badhosts
tabla
$ 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 pass
partidos de reglas y anula la block
regla.