Лучший способ сделать это - определить таблицу и создать правило для блокировки хостов 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правила.