9 votos

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

Así que puedo añadir un ancla al cortafuegos ya habilitado haciendo algo como esto:

$ pfctl -a anchor_name -f /etc/anchor_rules.txt

el archivo "anchor_rules.txt" podría contener algo así

table <some-hosts> persist file /etc/someHostsToBlock.txt
block quick from any to some-hosts

Ahora, puedo ver las reglas dentro del ancla haciendo esto:

$ pfctl -a anchor_name -sr
No ALTQ support in kernel
ALTQ related functions disabled
block drop quick from any to some-hosts

Sin embargo, Cuando muestro el conjunto de reglas activo con:

$ pfctl -sr
No ALTQ support in kernel
ALTQ related functions disabled
scrub-anchor "com.apple/*" all fragment reassemble
anchor "com.apple/*" all

no veo el ancla llamada " nombre_del_ancla "que acabo de añadir. Así que el ancla no está realmente activa/cargada...

¿Por qué no, y cómo cargarlo?

8voto

klanomath Puntos 19587

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:

  1. 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"
  2. 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"
  3. 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
  4. 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
  5. 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.

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