En mi entendimiento de pf , falta su ancla principal. Puede utilizar los anclajes de Apple o un ancla definida por el usuario.
Se prefiere un anclaje definido por el usuario:
-
Modificar /private/etc/pf.conf:
Agregue dos líneas a pf.conf como esto:
...
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 archivo usr.home . En el siguiente ejemplo, creo un SSH de anclaje que bloquea el acceso SSH desde una red local a algunas direcciones IP del host:
sudo nano /etc/pf.anchors/usr.home
y agregar
#
# 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 de referencia 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 estén libres de errores:
sudo pfctl -vnf /etc/pf.conf
sudo pfctl -vnf /etc/pf.anchors/usr.home
-
Recargar pf:
sudo pfctl -d
sudo pfctl -e -f /etc/pf.conf
Puede agregar anclas adicionales a su ancla principal de usr.home principal como se muestra en el ancla principal de aplicaciones.
También puede agregar sub-anclajes dinámicos adicionales con el siguiente comando (aquí agrego una regla HTTP de bloqueo temporal similar a la regla SSH - verifique la creación de un sub-ancla transitoria: 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 al reinicio!
Un comando posible para eliminar la regla temporal inmediatamente es:
echo "" | sudo pfctl -a usr.home/HTTP -f -
Un script práctico para comprobar todos los anclajes y reglas cargados 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!