A melhor maneira de fazer isso é definir uma tabela e criar uma regra para bloquear os hosts, em pf.conf
:
table <badhosts> persist
block on fxp0 from <badhosts> to any
E adicione / exclua dinamicamente endereços IP a partir dele:
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4
Outros comandos da 'tabela' incluem flush
(remover tudo) replace
e show
. Veja man pfctl
para mais.
Se você deseja uma lista mais permanente, pode mantê-la em um (ou mais) arquivos. Em pf.conf
:
table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any
Você também pode adicionar nomes de host em vez de endereços IP. Veja a seção "Tabelas" de man pf.conf
e man pfctl
.
Nota : Os exemplos acima assumem que a interface da Internet é fxp0
, altere de acordo com a sua configuração. Além disso, lembre-se de que as regras pf.conf
são avaliadas sequencialmente e são block
ou são pass
a última regra de correspondência que se aplica. Com este conjunto de regras
table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80
e depois de adicionar 1.2.3.4 e 192.168.0.10 à badhosts
tabela
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10
todo o tráfego de 1.2.3.4 e 192.168.0.10 será bloqueado, mas a segunda série vai ser capaz de fazer conexões à porta de outras máquinas de 80 porque os pass
jogos de regras e substitui a block
regra.