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) replacee show. Vedi man pfctldi 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.confe 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.confvengono valutate in sequenza e per blocko passregole è 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 badhoststabella
$ 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 passregola corrisponde e sovrascrive la blockregola.