1 votos

Cómo añadir dinámicamente anclas al inicio para apple pfctl sin editar el pf.conf del sistema

Hay algunas respuestas sobre el uso de pfctl en os x, pero ninguno realmente da una manera agradable y limpia para hacer un ancla y tenerlo cargado en el arranque, o para permitir que los programas se enganchen y dinámicamente actualizar / reemplazar las reglas, o por lo que también se puede eliminar sin clobbering reglas del sistema si es necesario.

¿Cuál es una buena manera de establecer una configuración de este tipo para que el equipo pueda, por ejemplo, SNAT al salir de alguna interfaz?

Algunas de las otras preguntas son:

pfctl - cómo añadir un ancla y hacerla activa / cargarla

pfctl para añadir reglas en tiempo de ejecución SIN editar /etc/pf.conf?

pf: Añadir dinámicamente una regla al anclaje nat

0voto

nate Puntos 11

Te respondo con lo que he hecho hasta ahora, porque me ha costado un poco de trabajo y podría ser útil para alguien. Podrías hacer algo más complicado basado en esto, es sólo un comienzo. Si alguien publica algo mejor lo aceptaré, supongo.

Una solución más complicada guardaría los tokens y usaría '-E' y '-X' para retener y liberar las referencias al sistema de filtrado de paquetes, o permitir la descarga del servicio, pero no hago eso aquí. Tenga en cuenta que launchd no soporta realmente la ejecución de un comando cuando se descarga un servicio. Podría escribir un script para mantener un proceso vivo y manejar el apagado, o en la mayoría de los casos probablemente sólo manejaría las reglas de flushing para el anclaje al cerrar su proceso para su aplicación.

Configurar

Guarde todos los archivos de abajo en sus ubicaciones y haga lo siguiente:

sudo launchctl load -w /Library/LaunchDaemons/org.myorg.mypf.plist 
# Note: the next step turns on ip forwarding for your system.
# You only need to do this if you are doing actual NAT
# and not just referencing this answer for something else like packet
# filtering
sudo sysctl -w net.inet.ip.forwarding=1

Si desea que el reenvío de ip persista a través de las botas, cree (si es necesario) /etc/sysctl.conf y fijar el contenido:

/etc/sysctl.conf

...
net.inet.ip.forwarding=1
...

De nuevo, esto sólo es necesario para que NAT funcione, como es el caso de este ejemplo concreto. Si estás haciendo otra cosa, no lo necesitas.

Archivos

/Library/LaunchDaemons/org.myorg.mypf.plist

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE plist PUBLIC "-//Apple Computer/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>org.myorg.pfsettings</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/myorg-install-pf</string>
    </array>
    <key>LaunchOnlyOnce</key>
    <true/>
  </dict>
</plist>

/usr/local/bin/myorg-install-pf

#!/usr/bin/env zsh

/sbin/pfctl -f - <<EOF
scrub-anchor "org.myorg/*"
nat-anchor "org.myorg/*"
rdr-anchor "org.myorg/*"
dummynet-anchor "org.myorg/*"
anchor "org.myorg/*"
EOF

# Flush existing rules.
# Not that useful for our one-shot, but could be useful in more complicated setups
/sbin/pfctl -a org.myorg -F all
/sbin/pfctl -a org.myorg/system -F all

/sbin/pfctl -a org.myorg/system -f /usr/local/etc/pf.anchors/org.myorg/system

/usr/local/etc/pf.anchors/org.myorg/system

# Set 192.168.142.0/24 to your "inside" network, or see `man pf.conf` and
# use something else (you could use someif0:network, for example)
nat on en0 inet from 192.168.142.0/24 to any -> (en0)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X