Según tengo entendido de pf , falta tu ancla principal. Puede usar los anclajes de Apple o un ancla definida por el usuario.
Se prefiere un ancla definida por el usuario:
Modifique /private/etc/pf.conf:
Agregue dos líneas a pf.conf así:
...
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"
Cree un archivo usr.home . En el siguiente ejemplo, creo un SSH de anclaje que bloquea el acceso SSH desde una red local a algunas IP 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 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 usr.home como se muestra en el ancla principal com.apple.
También puede agregar sub-anclajes dinámicos adicionales con el siguiente comando (aquí agrego una regla HTTP de bloque temporal similar a la regla SSH - verifique 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 al reinicio!
Un posible comando para eliminar la regla temporal de inmediato es:
echo "" | sudo pfctl -a usr.home/HTTP -f -
Un script útil para verificar 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!
/private/etc/pf.conf
directamente, ¿sobrevivirán estos cambios en las actualizaciones del sistema operativo?/etc/pf.conf
se conservarán. Sin embargo, puedo afirmar con certeza que los cambios a/etc/pf.anchors/com.apple
, no se conservarán. Tenga cuidado con las guías o secuencias de comandos que impliquen modificar ese archivo.