核心是切断恶意应用写入权限并限制运行来源:使用非管理员账户、禁用dhcp dns推送、锁定preferences.plist权限、加固resolv.conf不可更改标志、关闭非必要完全磁盘访问权限、定期检查dns配置与解析结果。

要防止恶意应用擅自修改 macOS 的 DNS 设置,核心是切断其写入系统网络配置和关键配置文件的权限,并限制其运行来源。macOS 本身不提供“DNS 锁定”功能,但可通过组合系统策略与权限控制实现强防护。
锁定网络设置权限
恶意软件常通过调用 networksetup 或直接写入 /Library/Preferences/SystemConfiguration/ 下的 plist 文件来篡改 DNS。阻止这类行为需限制管理员权限并禁用自动配置:
- 确保日常使用非管理员账户;管理员密码不保存在钥匙串中,也不设为自动填充
- 在“系统设置 → 网络”中,对每个活跃服务(如 Wi-Fi、以太网)点击“详细信息… → 高级 → TCP/IP”,将“配置 IPv4”改为“手动”,并勾选“忽略来自 DHCP 服务器的 DNS 服务器地址”
- 终端执行:
sudo chmod 600 /Library/Preferences/SystemConfiguration/preferences.plist,防止非 root 进程覆盖主网络配置
保护 DNS 配置文件与解析器
部分恶意程序会直接覆写 /etc/resolv.conf 或向 /etc/resolver/ 注入规则。虽然该文件由系统动态生成,但仍可加固:
部署和使用军舰的 macOS Automator 自动化服务集合。包含 5 个实用工作流:PDF转JPG、PNG重命名并转JPG、图像拼接、解压RAR、顺序命名图像文件。一键安装所有服务到 ~/Library/Services/ 目录。使用场景:(1) "安装我的自动化服务",(2) "部署所有 Automato...
- 运行
sudo chflags uchg /etc/resolv.conf,启用用户不可更改标志(需先sudo rm /etc/resolv.conf再重建软链或重定向) - 若使用
dnscrypt-proxy或stubby等本地加密 DNS 服务,将其配置为仅监听127.0.0.1:53,并在网络设置中唯一指定该地址,避免被替换为其他 IP - 定期检查:
ls -lO /etc/resolv.conf和cat /etc/resolv.conf,确认内容仅为可信 nameserver(如nameserver 127.0.0.1)
阻断恶意应用执行与持久化
很多 DNS 劫持工具(如 OSX/MaMi)依赖后台进程、启动项或安装根证书实现长期控制:
- 进入“系统设置 → 隐私与安全性 → 完全磁盘访问”,关闭所有非必要第三方应用的权限(尤其杀软、优化工具、下载器)
- 检查登录项:
system_profiler SPApplicationsDataType | grep -A 5 "Login Items",删除可疑条目;同时查看~/Library/LaunchAgents/和/Library/LaunchDaemons/中异常 plist - 打开“钥匙串访问”,切换到“系统”钥匙串,搜索
cloudguard.me、adguard、dnsfilter等可疑证书并删除 - 启用 Gatekeeper 严格模式:在“隐私与安全性 → 通用”中仅勾选“App Store”,禁用“App Store 和被认可的开发者”
主动监控 DNS 设置异常
即使做了防护,也建议建立轻量级检查机制,及时发现篡改:
- 终端定期运行:
networksetup -getdnsservers Wi-Fi(把 Wi-Fi 替换为你的服务名),输出应始终是你设定的可信 DNS - 创建简易脚本(如保存为
~/check-dns.sh),内容为:if ! networksetup -getdnsservers Wi-Fi | grep -q "1.1.1.1"; then osascript -e 'display notification "DNS 被修改!" with title "安全警告"'; fi,配合自动化工具每日运行 - 浏览器访问 https://www.php.cn/link/8284f7dbed939c962b771ff17d41aeb7,确认页面显示 “Using encrypted DNS (DoH)” 且解析结果真实,可间接验证是否被中间劫持










