Najlepszym sposobem na to jest zdefiniowanie tabeli i utworzenie reguły blokującej hosty w pf.conf
:
table <badhosts> persist
block on fxp0 from <badhosts> to any
A następnie dynamicznie dodawaj / usuwaj z niego adresy IP:
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4
Inne polecenia „table” obejmują flush
(usuń wszystko) replace
i show
. Zobacz man pfctl
więcej.
Jeśli chcesz mieć bardziej trwałą listę, możesz przechowywać ją w jednym (lub więcej) plikach. W pf.conf
:
table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any
Możesz także dodać nazwy hostów zamiast adresów IP. Zobacz sekcję „Tabele” man pf.conf
i man pfctl
.
Uwaga : w powyższych przykładach założono, że interfejs internetowy to: fxp0
Zmień w zależności od konfiguracji. Należy również pamiętać, że reguły pf.conf
są oceniane kolejno i dla block
lub pass
rządzi ostatnią pasującą regułą, która ma zastosowanie. Z tym zestawem reguł
table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80
i po dodaniu 1.2.3.4 i 192.168.0.10 do badhosts
tabeli
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10
cały ruch z 1.2.3.4 i 192.168.0.10 zostanie zablokowany, ale drugi host będzie mógł nawiązywać połączenia z portem 80 innych komputerów, ponieważ pass
reguła jest zgodna i zastępuje block
regułę.