Mac OSX Firewall-Tool pf

JackCarver

Junior Member
Es werden bei den Regeln für das lokale Netzwerk eigentlich alle Ports und alle Protokolle geöffnet, da sollte Bonjour mit bei sein. Macht es denn nen Unterschied wenn du explizit diesen UDP Port auf en0 öffnest?
 

Ghost

Junior Member
Macht es denn nen Unterschied wenn du explizit diesen UDP Port auf en0 öffnest?
Ja, es macht einen Unterschied.

Das NAS und andere Netzwerkgeräte erscheinen im Finder (Freigaben) und das Drucken mit dem Netzwerkdrucker funktioniert wieder.
 

Ghost

Junior Member
Mach mal das Schlüsselwort all dahinter,
Hey, da steht bereits "all"

pass in on lo0 all
pass out on lo0 all

Für little Snitch gibt es eine ähnliche Vorgehensweise für den IP-Leak Schutz, da wird alles verboten bis auf:

Broadcast-Adressen
Multicast-Adressen
Bonjoure-Adressen
lokales Netzwerk
VPN-Verbindung
 

JackCarver

Junior Member
Nein, nicht beim localhost Interface, sondern bei den Regeln für den WLAN Adapter en0. Dort n all dahinter. Es sollte ja so sein, dass alles im lokalen Netzwerk erlaubt ist und man da nicht extra Ports für bestimmte Dienste freischalten muss. LAN ist ja Safe
 

Ghost

Junior Member
Sorry, wo soll ich das machen?

Aktuell schaut es so aus:

block all
pass in on lo0 all
pass out on lo0 all
pass out on en0 proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state
pass out on en0 proto tcp to any port {1152,152} keep state
pass out on en0 to 192.168.178.0/24
pass in on en0 from 192.168.178.0/24
pass out on tun0 all keep state
 

JackCarver

Junior Member
Und mach diese Regeln mal direkt unter den Regeln für lo. Evtl spuckt da die Reihenfolge in die Suppe. Es macht ja kein Sinn, wenn man möchte, dass alles im LAN erlaubt ist dann für bestimmte Ports noch Ausnahmen fürs LAN zu definieren.
 

Ghost

Junior Member
pass out on en0 to 192.168.178.0/24 all pass in on en0 from 192.168.178.0/24 all
Jack, das verursacht einen Syntax Error

XXXs-Mac-mini:~ xxx$ sudo pfctl -f /Users/xxx/Documents/vpn2.rules
pfctl: Use of -f option, could result in flushing of rules
present in the main ruleset added by the system at startup.
See /etc/pf.conf for further details.

No ALTQ support in kernel
ALTQ related functions disabled
/Users/xxx/Documents/vpn2.rules:4: syntax error
/Users/xxx/Documents/vpn2.rules:5: syntax error
pfctl: Syntax error in config file: pf rules not loaded
 

JackCarver

Junior Member
Ich guck mir das Morgen mal an, es ist wie gesagt sonderbar, dass dein Mac hier ne Extrawurst für nen Port möchte, obwohl eigentlich das LAN komplett frei sein sollte.
 

JackCarver

Junior Member
@Ghost:

Wie versprochen hab ich mir das ganze nochmal angesehen und ich kann deine Beobachtungen bestätigen, mangels NAS zumindest was das Drucken übers Netzwerk anbelangt. Die Ergebnisse lassen eigentlich nur den Schluss zu, dass der Drucker nur dann übers WLAN angesprochen werden kann, wenn der UDP Port 5353 gegen das Internet geöffnet wird, warum auch immer.


Regeln 1:

Code:
  [FONT=Helvetica][SIZE=14px]set skip on lo0[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]block all[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]pass out on en0 to 192.168.2.0/24[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]pass in on en0 from 192.168.2.0/24[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]pass out on en0 proto udp to 192.168.2.0/24 port 5353 keep state    #(1)[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]#pass out on en0 proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]pass out on en0 proto tcp to any port {1152,152} keep state[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]pass out on tun0 all keep state[/SIZE][/FONT]
Regeln 2:

Code:
  [FONT=Helvetica][SIZE=14px]set skip on lo0[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]block all[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]pass out on en0 to 192.168.2.0/24[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]pass in on en0 from 192.168.2.0/24[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]#pass out on en0 proto udp to 192.168.2.0/24 port 5353 keep state[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]pass out on en0 proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state    #(2)[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]pass out on en0 proto tcp to any port {1152,152} keep state[/SIZE][/FONT]
  [FONT=Helvetica][SIZE=14px]pass out on tun0 all keep state[/SIZE][/FONT]

Nur mit den Regeln 2 klappte der Netzwerkdrucker...Der Unterschied zwischen diesen 2 Regelwerken ist einfach nur, dass bei Regelwerk 1 der UDP Port 5353 gegen das LAN geöffnet wird, wie du an (1) sehen kannst. Bei Regelwerk 2 wird dagegen der UDP Port 5353 gegen das Internet geöffnet.

Da der Netzwerkdrucker natürlich eine LAN IP haben muss um ihn überhaupt ansprechen zu können, war es mir schleierhaft, wieso das Drucken nicht geht, wenn ich das gesamte LAN rein und rausgehend für en0 öffne...

Ich hab also mal im Netz gegoogelt und es gibt da einige Parallelen zb bei Apple-TV ist es nicht möglich Inhalte vom Mac auf Apple TV zu streamen wenn die beiden isoliert im LAN verbunden sind, auch hier brauchts Internet:

https://discussions.apple.com/message/23283028#23283028

Da das ganze in gewisser Weise unlogisch ist, konnte ich es erst nicht glauben, ist aber tatsächlich wirklich so.
 

Ghost

Junior Member
Hey Jack,

danke für die Überprüfung und die Anpassung der Regeln.

Gemeinsam sind wir stark :cool:
 

Maximilian

Junior Member
Hallo Jack,

erstmal danke für die super Anleitung; für mich als Mac-Nutzer eine längst überfällige Sache :)

Da ich in diesen Dingen nicht so bewandert bin, habe ich noch ein kleines Problem. In Deinem Script, in den Zeilen 6 & 7 benutzt Du für Dein Lan die Adressen 192.168.2.0. Ich denke mal, dass es bei meiner Fritz-Box die 192.168.178.1 sein sollte. Wenn ich jetzt Dein Script dahingehend ändere, also 192.168.178.1/24 schreibe und abspeichere und es dann einlade und aktiviere bekomme ich mit sudo pfctl -sr aber nur 192.168.178.0 angezeigt. Hat das vielleicht was mit der /24 am Ende zu tun?

Wahrscheinlich ist es etwas triviales und ich bin einfach zu blöd :)
 

Ghost

Junior Member
@Maxi

block all
pass in on lo0 all
pass out on lo0 all
pass out on en0 proto udp to any port {1151,150,151,149,1149,1150,53,5353} keep state
pass out on en0 proto tcp to any port {1152,152} keep state
pass out on en0 to 192.168.178.0/24
pass in on en0 from 192.168.178.0/24
pass out on tun0 all keep state
 

JackCarver

Junior Member
Genau mach es so wie Ghost das gezeigt hat, 192.168.178.1/24 macht kein Sinn, da das vorne keine Netzwerkadresse ist sondern ne Hostadresse, nämlich die von deiner Fritzbox. Mit 192.168.178.0/24 ist dein komplettes LAN abgedeckt, auch die Fritz.
 

Maximilian

Junior Member
Hallo,

vielen Dank für die schnellen Antworten.

Ich habe es jetzt so eingetragen, wie von Ghost beschrieben. Aktiviere ich die Regeln, geht nichts mehr rein oder raus; soweit so gut. Wenn ich dann den OpenVPN anwerfe sollte es ja eigentlich wieder gehen, aber leider bleibt auch dann alles gesperrt. Erst nachdem ich die Regeln wieder deaktiviert habe geht alles wieder, sowohl mit als auch ohne OpenVPN. Wie gesagt, die Fritzbox ist auf 192.168.178.1. Mit 192.168.178.0/24 sollte alles von 192.168.178.0 bis 192.168.178.24 abgedeckt sein, richtig? Noch ne Idee woran es liegen könnte? Vielleicht an en0 oder so?
 

JackCarver

Junior Member
Kannst du OpenVPN connecten? Wenn ja werf mal das Terminal an und poste hier die Ausgabe von ifconfig mit laufenden OpenVPN. Abgedeckt ist alles von 192.168.178.1-192.168.178.254, also dein gesamtes LAN.
 

Maximilian

Junior Member
Hallo Jack,

ja, ohne aktiviertes Script kann ich OpenVPN connecten.

Hier die Ausgabe mit connected OpenVPN, aber ohne aktiviertes Script:

lo0: flags=8049 mtu 16384
options=3
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=1
gif0: flags=8010 mtu 1280
stf0: flags=0 mtu 1280
en0: flags=8863 mtu 1500
options=10b
ether 3c:07:54:74:7c:12
inet6 fe80::3e07:54ff:fe74:7c12%en0 prefixlen 64 scopeid 0x4
inet 192.168.178.53 netmask 0xffffff00 broadcast 192.168.178.255
nd6 options=1
media: autoselect (100baseTX )
status: active
en1: flags=8863 mtu 1500
ether 68:a8:6d:50:fd:a2
inet6 fe80::6aa8:6dff:fe50:fda2%en1 prefixlen 64 scopeid 0x5
inet 192.168.178.44 netmask 0xffffff00 broadcast 192.168.178.255
nd6 options=1
media: autoselect
status: active
fw0: flags=8863 mtu 4078
lladdr 3c:07:54:ff:fe:b3:8e:7a
nd6 options=1
media: autoselect
status: inactive
en4: flags=8963 mtu 1500
options=60
ether d2:00:1b:38:e7:a0
media: autoselect
status: inactive
bridge0: flags=8863 mtu 1500
options=63
ether 3e:07:54:47:d5:00
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: en4 flags=3
ifmaxaddr 0 port 7 priority 0 path cost 0
nd6 options=1
media:
status: inactive
p2p0: flags=8843 mtu 2304
ether 0a:a8:6d:50:fd:a2
media: autoselect
status: inactive
utun0: flags=8051 mtu 1500
inet 10.29.12.139 --> 10.29.12.139 netmask 0xffffff80

Hier dann mit aktiviertem Script:

lo0: flags=8049 mtu 16384
options=3
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=1
gif0: flags=8010 mtu 1280
stf0: flags=0 mtu 1280
en0: flags=8863 mtu 1500
options=10b
ether 3c:07:54:74:7c:12
inet6 fe80::3e07:54ff:fe74:7c12%en0 prefixlen 64 scopeid 0x4
inet 192.168.178.53 netmask 0xffffff00 broadcast 192.168.178.255
nd6 options=1
media: autoselect (100baseTX )
status: active
en1: flags=8863 mtu 1500
ether 68:a8:6d:50:fd:a2
inet6 fe80::6aa8:6dff:fe50:fda2%en1 prefixlen 64 scopeid 0x5
inet 192.168.178.44 netmask 0xffffff00 broadcast 192.168.178.255
nd6 options=1
media: autoselect
status: active
fw0: flags=8863 mtu 4078
lladdr 3c:07:54:ff:fe:b3:8e:7a
nd6 options=1
media: autoselect
status: inactive
en4: flags=8963 mtu 1500
options=60
ether d2:00:1b:38:e7:a0
media: autoselect
status: inactive
bridge0: flags=8863 mtu 1500
options=63
ether 3e:07:54:47:d5:00
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: en4 flags=3
ifmaxaddr 0 port 7 priority 0 path cost 0
nd6 options=1
media:
status: inactive
p2p0: flags=8843 mtu 2304
ether 0a:a8:6d:50:fd:a2
media: autoselect
status: inactive
utun0: flags=8051 mtu 1500
inet 10.29.12.139 --> 10.29.12.139 netmask 0xffffff80

Scriptausgabe via sudo pfctl -sr:

No ALTQ support in kernel
ALTQ related functions disabled
block drop all
pass out on en0 proto udp from any to any port = 1151 keep state
pass out on en0 proto udp from any to any port = 150 keep state
pass out on en0 proto udp from any to any port = 151 keep state
pass out on en0 proto udp from any to any port = 149 keep state
pass out on en0 proto udp from any to any port = 1149 keep state
pass out on en0 proto udp from any to any port = 1150 keep state
pass out on en0 proto udp from any to any port = 53 keep state
pass out on en0 proto udp from any to any port = 5353 keep state
pass out on lo0 all flags S/SA keep state
pass in on lo0 all flags S/SA keep state
pass out on en0 proto tcp from any to any port = 1152 flags S/SA keep state
pass out on en0 proto tcp from any to any port = 152 flags S/SA keep state
pass out on en0 inet from any to 192.168.178.0/24 flags S/SA keep state
pass in on en0 inet from 192.168.178.0/24 to any flags S/SA keep state
pass out on tun0 all flags S/SA keep state
 
Top