Nella mia comprensione di pf il tuo ancoraggio principale è mancante. Puoi utilizzare l'ancora di Apple o un ancoraggio definito dall'utente.
È preferibile un'ancora definita dall'utente:
-
Modifica /private/etc/pf.conf:
Aggiungi due linee a pf.conf in questo modo:
...
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
#
# usr.home anchor point
#
anchor "usr.home/*"
load anchor "usr.home" from "/etc/pf.anchors/usr.home"
-
Crea un file usr.home . Nell'esempio seguente creo un ancoraggio SSH che blocca l'accesso SSH da una rete locale ad alcuni IP dell'host:
sudo nano /etc/pf.anchors/usr.home
e aggiungi
#
# usr.home ruleset, referred to by the modified /etc/pf.conf file.
# See notes in that file regarding the anchor point in the main ruleset.
#
#
# SSH anchor point.
#
anchor "SSH"
load anchor "SSH" from "/etc/pf.rules/pfssh.rule"
-
Ora crea una nuova directory
sudo mkdir /etc/pf.rules
e il file di riferimento con:
sudo nano /etc/pf.rules/pfssh.rule
e il seguente contenuto:
block in quick inet proto { tcp, udp } from 10.0.0.0/8 to { 10.128.8.145, 10.129.8.145 } port 22
-
Analizza e verifica il tuo pf.conf e il tuo file di ancoraggio per assicurarti che siano privi di errori:
sudo pfctl -vnf /etc/pf.conf
sudo pfctl -vnf /etc/pf.anchors/usr.home
-
Ricarica pf:
sudo pfctl -d
sudo pfctl -e -f /etc/pf.conf
Puoi aggiungere ancoraggi aggiuntivi all'ancora principale di usr.home come dimostrato nell'ancora principale di com.apple.
È anche possibile aggiungere ulteriori sotto-ancoraggi dinamici con il seguente comando (qui aggiungo una regola HTTP blocco temporaneo simile alla regola SSH - controlla la creazione di un sotto-ancoraggio transitorio: usr.home / HTTP here!):
echo "block drop in quick proto tcp from 10.0.0.0/8 to any port 80" | sudo pfctl -a usr.home/HTTP -f -
L'ancora temporanea non sopravvive a un riavvio!
Un possibile comando per rimuovere immediatamente la regola temporanea è:
echo "" | sudo pfctl -a usr.home/HTTP -f -
Un comodo script per controllare tutti gli ancoraggi e le regole caricati è pfdump:
pfdump.sh:
#!/bin/bash
function pfprint() {
if [ -n "$1" ];then
sudo pfctl -a "$2" -s"$1" 2>/dev/null
else
sudo pfctl -s"$1" 2>/dev/null
fi
}
function print_all() {
local p=$(printf "%-40s" $1)
(
pfprint r "$1" | sed "s,^,r ,"
pfprint n "$1" | sed "s,^,n ,"
pfprint A "$1" | sed "s,^,A ,"
) | sed "s,^,$p,"
for a in 'pfprint A "$1"'; do
print_all "$a"
done
}
print_all
Tutti i file menzionati richiedono una nuova riga vuota alla fine!