Il modo migliore per farlo è definire una tabella e creare una regola per bloccare gli host, in pf.conf
:
table <badhosts> persist
block on fxp0 from <badhosts> to any
E quindi aggiungere / eliminare dinamicamente gli indirizzi IP da esso:
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T delete 1.2.3.4
Altri comandi 'table' includono flush
(rimuovi tutto) replace
e show
. Vedi man pfctl
di più.
Se desideri un elenco più permanente, puoi tenerlo in uno (o più) file. In pf.conf
:
table <badhosts> persist file "/etc/badguys1" file "/etc/badguys2"
block on fxp0 from <badhosts> to any
È inoltre possibile aggiungere nomi host anziché indirizzi IP. Vedi la sezione "Tabelle" di man pf.conf
e man pfctl
.
Nota : gli esempi sopra riportati presuppongono che l'interfaccia Internet sia fxp0
, si prega di cambiare in base alla propria configurazione. Inoltre, tieni presente che le regole in pf.conf
vengono valutate in sequenza e per block
o pass
regole è l'ultima regola corrispondente che si applica. Con questo set di regole
table <badhosts> persist
block on fxp0 from <badhosts> to any
pass inet tcp from 192.168.0.0/24 to any port 80
e dopo aver aggiunto 1.2.3.4 e 192.168.0.10 alla badhosts
tabella
$ pfctl -t badhosts -T add 1.2.3.4
$ pfctl -t badhosts -T add 192.168.0.10
tutto il traffico da 1.2.3.4 e 192.168.0.10 verrà bloccato ma il secondo host sarà in grado di effettuare connessioni alla porta 80 di altre macchine perché la pass
regola corrisponde e sovrascrive la block
regola.