Tengo una aplicación que (mientras se ejecuta y solo mientras se ejecuta) necesita realizar cambios en el filtro de paquetes ( pf
) para que bloquee o permita cierto tráfico. Estas reglas deben ser adicionales a las propias reglas del usuario /etc/pf.conf
, pero no quiero editarlas directamente /etc/pf.conf
ya que esto es extremadamente intrusivo.
Puedo hacer esto de manera trivial en Linux usando iptables
e incluso en Windows usando wfp
sin alterar ningún archivo en el disco, ¿puedo lograr lo mismo en osx con pf
?
La solución solo tiene que funcionar en yosemite
(10.10) y superior
Resolví esto yo mismo.
cat /etc/pf.conf my_rules.conf | sudo /sbin/pfctl -Ef -
Cuando my_rules.conf
contiene nuestras propias reglas, estas se concatenan con las pf.conf
reglas pero tienen prioridad debido a que se agregan después pf.conf
del cat
comando.
También tenga en cuenta que usamos pfctl -Ef -
las -
fuerzas pfctl
para leer desde stdin
Podemos llevar esta solución un paso más allá y cargar nuestras propias reglas desde stdin usando esto:
echo "block out all" | cat /etc/pf.conf - | sudo /sbin/pfctl -Ef -
-E
? El man pfctl
documento no es muy claro: dice que habilita el filtrado como -e
pero también dice: "(...) e incrementa el recuento de referencia de habilitación de pf". y no entendí qué es esto exactamente.Depende del tipo de aplicación y lenguaje de programación. La verdadera forma programática sería abrir /dev/pf
y usar ioctl
. No lo he hecho yo mismo, pero los siguientes enlaces deberían ser útiles.
Si llamar pfctl
desde la aplicación es suficiente, todavía usaría anclas.
Sin un archivo:echo "block out all" | sudo /sbin/pfctl -a 'com.apple/app_name' -f -
Con un archivo:sudo /sbin/pfctl -a 'com.apple/app_name' -f /path/to/file
Zohar81
caballito
cat /etc/pf.conf my_rules.conf | sudo /sbin/pfctl -Ef -
El-
argumentopfctl
hace que se lea desde la entrada estándar, por lo que simplemente concatenamos pf.conf con nuestras propias reglas para que se lea desde ambos, pero para asegurarnos de que nuestras reglas tengan prioridad (es por eso que nuestro las reglas se concatenan al final)caballito
Zohar81
pfctl
con una configuración diferente que anula la suya? Puedo hacer comprobaciones periódicas con las reglas aplicadas actualmente, pero desearía poder recibir una notificación cuando cambie... ¿alguna idea de cómo?