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

实际上是因为我的新守护进程与 Apple 的默认 pfctl 守护进程冲突。因此,我不得不更新默认的 pfctl 守护进程 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在对系统文件进行必要的更改后应该这样做)

相关内容