Transparent Firewall przy użyciu macOS pf


3

Próbuję skonfigurować przezroczystą zaporę z systemem Mac mini działającym na MacOS Sierra. Zasadniczo staram się to zrobić (tylko z macOS): Przejrzysta zapora sieciowa z OpenBSD

To jest moja konfiguracja sieci:

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

Router łączy się również z kilkoma innymi urządzeniami za pośrednictwem Wi-Fi.

Oto, co zrobiłem na Macu mini, aby stał się przezroczystą zaporą:

  1. Skonfigurowałem most za pomocą następujących poleceń:

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

Z punktu widzenia AppleTV jest teraz jak Mac mini nie istnieje.

  1. Skonfigurowałem pf, dodając to do /etc/pf.conf:

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

    i stworzony /etc/pf.anchors/org.user z tą treścią:

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

    Następnie „ponownie uruchomiłem” pf z nowymi regułami:

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

Teraz nie oczekiwałbym, że ruch z Apple TV trafi do sieci. Ale Apple TV nadal działa tak, jakbym nigdy nie ustawiał tych reguł.

czego mi brakuje?

PS: Oto wyjście 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$ 

Dzięki za radę - ifconfig wyjście zostało dodane.
dan12345

Które IP / mask / gw przypisałeś do en0 i en4 przed stworzyć most?
klanomath

Oba były ustawione na DHCP. Otrzymał adres IP (192.168.0.137/255.255.255.0/192.168.0.1)) z routera. En4 otrzymał przypisany IP (169.254.75.147/255.255.0.0/none).
dan12345

Odpowiedzi:


0

Naprawdę wątpię, czy uda ci się to wykorzystać do pracy z narzędziami systemowymi. I choć nie jestem zaznajomiony z OpenBSD, wątpię również, czy połączony przykład działa bez dalszych modów z jednym wyjątkiem: filtrowanie według adresów MAC po włączeniu tagowania pakietów mostkowych.

W systemie OS X mostkowanie pakietów (tj. ifconfig bridge1 rule pass in on en4 src 00:17:f2:f8:1a:3d tag APPLETV ) nie jest jednak możliwe.

pf w OS X jest filtrem pakietów warstwy 3. Opiera się na adresach IP i tak naprawdę nie działa z nazwami interfejsów ani adresami MAC. Więc używając nazwy interfejsu w regule (np. block on en4 all ) jest wewnętrznie tłumaczony na block on <IP of en4> all iw twoim przypadku block nothing ponieważ en4 nie ma adresu IP.

Nawet po przypisaniu IP do en4 nie byłbyś w stanie zablokować ruchu AppleTV do świata zewnętrznego, ponieważ te pakiety IP nie zawierają <IP of en4> jako źródło ani jako adres docelowy.


Ma dla mnie sens, więc wygląda na to, że wrócił do deski kreślarskiej. Czy masz pomysł, jak mogę osiągnąć to, co chcę zrobić? apple.stackexchange.com/q/265486/215988
dan12345

Zasadniczo chcę, aby cały ruch przychodzący z sieci en4 był kierowany do lokalizacji internetowej za pośrednictwem sieci VPN. Jednocześnie chcę, aby cały ruch lokalny między en0-NW i en4-NW pozostawał taki sam (tak jakby en0 i en4 były zmostkowane).
dan12345
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.