Лучший способ сделать это - определить таблицу и создать правило для блокировки хостов pf.conf
:
table <badhosts> persist
block on fxp0 from <badhosts> to any
А затем динамически добавлять / удалять IP-адреса с него:
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4
Другие команды 'table' включают в себя flush
(удалить все) replace
и show
. Смотрите man pfctl
больше.
Если вам нужен более постоянный список, вы можете хранить его в одном (или нескольких) файлах. В pf.conf
:
table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any
Вы также можете добавить имена хостов вместо IP-адресов. Смотрите раздел «Таблицы» man pf.conf
и man pfctl
.
Примечание . В приведенных выше примерах предполагается, что интерфейс fxp0
, подключенный к Интернету , изменился в соответствии с настройками. Кроме того, имейте в виду, что правила pf.conf
оцениваются последовательно, и для них block
или pass
применяется последнее применяемое правило соответствия. С этим набором правил
table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80
и после добавления 1.2.3.4 и 192.168.0.10 в badhosts
таблицу
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10
весь трафик от 1.2.3.4 и 192.168.0.10 будет заблокирован , но второй хозяин будет иметь возможность сделать подключение к порту других машин 80 , потому что pass
правила матчи и Переопределяют block
правила.