2 votos

Cortafuegos transparente con MacOS pf

Estoy tratando de configurar un firewall transparente con un Mac mini que ejecuta macOS Sierra. Básicamente estoy tratando de hacer esto (sólo con MacOS): Un cortafuegos transparente con OpenBSD

Esta es mi configuración de red:

Internet <-ethernet-> Router <-ethernet->en0 Mac mini en4<-ethernet-> AppleTV

El router también se conecta a varios otros dispositivos a través de Wifi.

Esto es lo que hice en el Mac mini para convertirlo en un firewall transparente:

  1. He configurado el puente mediante estos comandos:

    sudo ifconfig bridge1 create
    sudo ifconfig bridge1 addm en0 addm en4
    sudo ifconfig bridge1 up

Desde la perspectiva del AppleTV ahora es como si el Mac mini no existiera.

  1. He configurado pf añadiendo esto a /etc/pf.conf :

    anchor "org.user"
    load anchor "org.user" from "/etc/pf.anchors/org.user"

    y creó /etc/pf.anchors/org.user con este contenido:

    # skip lo0
    set skip on lo0
    
    # options
    set block-policy drop
    
    # rules
    block on en4 all

    Entonces "reinicié" el pf con las nuevas reglas:

    sudo pfctl -f /etc/pf.conf
    sudo pfctl -e

Ahora esperaría que ningún tráfico del AppleTV saliera a la red. Pero el AppleTV sigue funcionando como si nunca hubiera configurado esas reglas pf.

¿Qué me falta?

PD: Aquí está la salida de ifconfig:

MacMini:~ Daniel$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
    inet 127.0.0.1 netmask 0xff000000 
    inet6 ::1 prefixlen 128 
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
    nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>
    ether a8:20:66:1e:9a:62 
    inet6 fe80::1cca:5c4b:64a7:7350%en0 prefixlen 64 secured scopeid 0x4 
    inet6 2a02:8070:a89:8f00:181c:12bc:a98c:7229 prefixlen 64 autoconf secured 
    inet6 2a02:8070:a89:8f00:d489:89da:9083:17d8 prefixlen 64 autoconf temporary 
    inet6 2a02:8070:a89:8f00::9 prefixlen 64 dynamic 
    inet 192.168.0.137 netmask 0xffffff00 broadcast 192.168.0.255
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect (1000baseT <full-duplex,flow-control,energy-efficient-ethernet>)
    status: active
en4: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=b<RXCSUM,TXCSUM,VLAN_HWTAGGING>
    ether 00:23:56:1c:82:26 
    inet6 fe80::223:56ff:fe1c:8226%en4 prefixlen 64 scopeid 0x5 
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect (100baseTX <full-duplex>)
    status: active
en1: flags=8823<UP,BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 1500
    ether 20:c9:d0:93:5e:f1 
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect (<unknown type>)
    status: inactive
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078
    lladdr 00:3e:e1:ff:fe:b3:04:08 
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect <full-duplex>
    status: inactive
en3: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
    options=60<TSO4,TSO6>
    ether 32:00:1b:30:40:80 
    media: autoselect <full-duplex>
    status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=63<RXCSUM,TXCSUM,TSO4,TSO6>
    ether 32:00:1b:30:40:80 
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x2
    member: en3 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 8 priority 0 path cost 0
    nd6 options=201<PERFORMNUD,DAD>
    media: <unknown type>
    status: inactive
p2p0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 2304
    ether 02:c9:d0:93:5e:f1 
    media: autoselect
    status: inactive
awdl0: flags=8902<BROADCAST,PROMISC,SIMPLEX,MULTICAST> mtu 1484
    ether 8e:36:65:e0:9a:1e 
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
    inet6 fe80::9a58:4bd5:9f77:f77a%utun0 prefixlen 64 scopeid 0xc 
    nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
    inet6 fe80::1e34:cc36:613b:1ee6%utun1 prefixlen 64 scopeid 0xf 
    nd6 options=201<PERFORMNUD,DAD>
ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
    inet 10.0.1.16 --> 1.0.0.1 netmask 0xffffff00 
bridge1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether aa:20:66:e1:cb:01 
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x2
    member: en0 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 4 priority 0 path cost 0
    member: en4 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 5 priority 0 path cost 0
    media: autoselect
    status: active
MacMini:~ Daniel$

0 votos

Gracias por el consejo - ifconfig se ha añadido la salida.

0 votos

Qué IPs/máscara/gw asignaste a en0 y en4 antes de ¿creando el puente?

0 votos

Ambos estaban configurados en DHCP. En0 obtuvo una IP (192.168.0.137/255.255.255.0/192.168.0.1)) del router. En4 obtuvo una IP autoasignada (169.254.75.147/255.255.0.0/ninguna).

0voto

klanomath Puntos 19587

Realmente dudo que consigas que esto funcione con las herramientas del sistema. Y aunque no estoy familiarizado con OpenBSD también dudo que el ejemplo enlazado funcione sin más mods con una excepción: el filtrado por direcciones MAC después de habilitar el etiquetado de paquetes del puente.

En OS X el etiquetado de paquetes de puente (es decir ifconfig bridge1 rule pass in on en4 src 00:17:f2:f8:1a:3d tag APPLETV ) no es posible.

pf en OS X es un filtro de paquetes de capa 3. Se basa en direcciones IP y no funciona realmente con nombres de interfaz o direcciones MAC. Por lo tanto, el uso de un nombre de interfaz en una regla (por ejemplo block on en4 all ) se traduce internamente a block on <IP of en4> all y en su caso block nothing porque en4 no tiene dirección IP.

Incluso después de asignar una IP a en4 no podrías bloquear el tráfico del AppleTV hacia el mundo exterior porque estos paquetes IP no contienen <IP of en4> como dirección de origen ni de destino.

0 votos

Para mí tiene sentido, así que parece que hay que volver a la mesa de dibujo. ¿Tienes una idea de cómo puedo lograr lo que quiero hacer? apple.stackexchange.com/q/265486/215988

0 votos

Básicamente quiero que todo el tráfico procedente de la red en4 dirigido a una ubicación de Internet sea enviado a través de una VPN. Al mismo tiempo quiero que todo el tráfico local entre en0-NW y en4-NW permanezca igual (como si en0 y en4 estuvieran puenteados).

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