A mi entender pf tu ancla mayor está perdida. Puede utilizar las anclas de Apple o un ancla definida por el usuario.
Es preferible un anclaje definido por el usuario:
-
Modificar /private/etc/pf.conf:
Añade dos líneas a pf.conf como esta:
...
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"
-
Crear un archivo Inicio.usr . En el siguiente ejemplo creo un ancla SSH que bloquea el acceso SSH desde una red local a algunas IPs del host:
sudo nano /etc/pf.anchors/usr.home
y añadir
#
# 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"
-
Ahora crea un nuevo directorio
sudo mkdir /etc/pf.rules
y el archivo referenciado con:
sudo nano /etc/pf.rules/pfssh.rule
y el siguiente contenido:
block in quick inet proto { tcp, udp } from 10.0.0.0/8 to { 10.128.8.145, 10.129.8.145 } port 22
-
Analice y pruebe su pf.conf y su archivo de anclaje para asegurarse de que no tienen errores:
sudo pfctl -vnf /etc/pf.conf
sudo pfctl -vnf /etc/pf.anchors/usr.home
-
Recarga pf:
sudo pfctl -d
sudo pfctl -e -f /etc/pf.conf
Puede añadir anclas adicionales a su ancla mayor usr.home como se demuestra en el ancla mayor com.apple.
También puede añadir sub-anclajes dinámicos adicionales con el siguiente comando (aquí añado una regla HTTP de bloqueo temporal similar a la regla SSH - compruebe la creación de un sub-anclaje transitorio: usr.home/HTTP aquí):
echo "block drop in quick proto tcp from 10.0.0.0/8 to any port 80" | sudo pfctl -a usr.home/HTTP -f -
¡El ancla temporal no sobrevive a un reinicio!
Un posible comando para eliminar la regla temporal inmediatamente es:
echo "" | sudo pfctl -a usr.home/HTTP -f -
Un práctico script para comprobar todas las anclas y reglas cargadas es 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
Todos los archivos mencionados requieren una nueva línea vacía al final.