macOS Sierra: перезагрузить брандмауэр при изменении сети

234
Pei

Я пытался перезагрузить правила pf всякий раз, когда сеть меняется. Вот мой файл plist. /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> 

Я вижу, что /private/var/run/resolv.conf изменяется при изменении сетевых интерфейсов, но правила pf вообще не перезагружаются. К вашему сведению, /Users/wwk/pf.conf есть, и я включил / sbin / pfctl для запуска без запроса пароля через файл / etc / sudoers. Спасибо в любом заранее!

1

1 ответ на вопрос

0
Pei

На самом деле это произошло из-за того, что мой новый демон конфликтовал с установленным по умолчанию демоном pfctl от Apple. Поэтому мне пришлось обновить список pfctl daemon plist по умолчанию, чтобы отслеживать пути, которые меняются при изменении сети. Добавить следующее к/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> 

Кстати, мы должны разрешить внесение изменений в системные файлы $ csrutil disableв режиме восстановления macOS, чтобы внести изменения в приведенный выше файл plist. (следует делать $ csrutil enableпосле необходимых изменений в системных файлах)