これを行う最良の方法は、テーブルを定義し、ホストをブロックするルールを作成することです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
ルールを上書きするます。