これを行う最良の方法は、テーブルを定義し、ホストをブロックするルールを作成することです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
他の「テーブル」コマンドには、flush(すべて削除)、replaceおよびが含まれshowます。詳細man pfctlをご覧ください。
より永続的なリストが必要な場合は、1つ(またはそれ以上)のファイルに保持できます。で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からのすべてのトラフィックはブロックされますが、2番目のホストは他のマシンのポート80に接続できます。passルールが一致してblockルールを上書きするます。