macOS Sierra: Firewall neu laden, wenn sich das Netzwerk ändert

364
Pei

Ich habe versucht, die PF-Regeln immer dann neu zu laden, wenn sich das Netzwerk ändert. Hier ist meine Plist-Datei. /Library/LaunchAgents/com.wwk.networkchange.plist

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.wwk.networkchange</string> <key>ProgramArguments</key> <array> <string>sudo /sbin/pfctl -f /Users/wwk/pf.conf</string> </array> <key>RunAtLoad</key> <true/> <key>WatchPaths</key> <array> <string>/private/var/run/resolv.conf</string> </array> </dict> </plist> 

Ich kann sehen, dass /private/var/run/resolv.conf geändert wird, wenn Netzwerkschnittstellen geändert werden, die pf-Regeln jedoch überhaupt nicht neu geladen werden. Zu Ihrer Information, /Users/wwk/pf.conf ist da und ich habe aktiviert, dass / sbin / pfctl ohne Passworteingabe über die Datei / etc / sudoers ausgeführt wird. Vielen Dank im Voraus!

1

1 Antwort auf die Frage

0
Pei

Actually it was because my new daemon was conflicted with Apple's default pfctl daemon. So I've had to update the default pfctl daemon plist to watch paths which are changed whenever network changes. Add following to the /System/Library/LaunchDaemons/com.apple.pfctl.plist

<WatchPaths> <array> <string>/private/var/run/resolv.conf</string> <string>/etc/pf.conf</string> <string>/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist</string> <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string> </array> 

Btw, we have to enable changes in system files by $ csrutil disable in macOS recovery mode to make changes in above plist file. (should do $ csrutil enable after necessary changes in system files)