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

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

Я пытался перезагрузить правила 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

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

Связанный контент