返回博客
·9 分钟阅读·productdevbook

如何在 Mac 上禁止某个应用联网

在 macOS 上禁止某个应用联网的实用方法,且不会破坏系统其他部分。

  • macOS
  • Security
  • Privacy
  • Tutorial

你 2022 年买的一个应用每次启动还在回家。一个游戏想在你用热点时下载 3 GB 更新。一个扫描工具坚持反复检查更新。你想在 Mac 上完全阻断应用访问互联网——不卸载它、不破坏系统其他部分。

好消息:macOS 给你几种 Mac 用户实际需要阻断应用访问互联网的方式。坏消息:每种取舍不同,错的选择要么默默失败,要么破坏你不想破坏的东西。这里是实操剧本。

Mac 用户该知道的四种阻断应用访问互联网方式

按多数人该选的粗略顺序:

  1. Little Snitch — 专用出站防火墙。按应用规则、首次连接时提示、有 GUI 编辑。
  2. LuLu — 来自 Objective-See 的免费开源出站防火墙。比 Little Snitch 不那么打磨,相同核心想法。
  3. macOS 应用防火墙 + 网络过滤器 — 内置防火墙只处理入站。要出站阻断,你需要第三方网络扩展或 pf 规则。
  4. /etc/hosts 阻断 — 钝、部分,但对已知遥测端点有用。

对你想完全离线的单一应用,选项 1 或 2 是合适答案。其他是情境的。

选项 1:Little Snitch(标准)

Little Snitch 装一个拦截出站连接的网络扩展。当你之前没见过的应用试图回家时,Little Snitch 显示提示:允许一次、永远允许、拒绝一次、永远拒绝——带可选范围(仅这个主机名、任何端口等)。

完全阻断一个应用:

  1. 打开 Little Snitch → 网络监控 → 规则
  2. 搜应用名。
  3. 要么删它现有规则然后下次靠默认拒绝提示,要么加一个明确的"拒绝——/Applications/YourApp.app 的任何进程——任何连接"。
  4. 退出并重新启动目标应用。

Little Snitch 是付费软件带免费演示(每会话 3 小时)。对一个你将依赖到内核级的工具,付一次是对的动作。

重要的规则范围

  • 进程路径 — Little Snitch 按磁盘路径匹配键,所以通过 Sparkle 更新应用能重新提示。重新批准或把规则设为"任何版本"。
  • 辅助进程 — Slack、Discord、Chrome 这种应用有需要自己规则的辅助二进制。如果你允许了父却忘了辅助,流量能溜过去。像 ova 这种监控把辅助归到父下,所以你能看到这什么时候发生。

选项 2:LuLu(免费)

LuLu 做 Little Snitch 做的事,功能集更小。同样网络扩展模型、同样提示和规则流程。它不会那么干净显示流量图或做基于主机名的过滤,但对"阻断这一个应用"用例完全够用。

objective-see.org 下载,拖到 Applications,授予网络扩展权限,给你想静音的二进制加拒绝规则。

选项 3:macOS 内置防火墙(受限)

macOS 应用防火墙住在 系统设置 → 网络 → 防火墙。它阻断入站连接。它不阻断出站。所以对"阻止我的应用跟互联网通信"问题,内置防火墙不是答案。

如果你也想阻断入站——例如,应用跑你不想暴露的本地服务器——开启防火墙,点选项,把应用加到拒绝列表。

选项 4:/etc/hosts 阻断(部分)

对特定遥测端点,你能黑洞主机名:

sudo nano /etc/hosts

加:

0.0.0.0 telemetry.example.com
0.0.0.0 analytics.example.com

Ctrl-O 保存,Ctrl-X 退出。然后刷新 DNS:

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

这只对实际查系统 DNS 的应用有效。硬编码 IP 或用自己 DNS 的应用完全绕过 /etc/hosts。用 DoH 的浏览器绕过它。所以把 /etc/hosts 当作针对已知端点的狙击枪,不是通用阻断。

每个人都跳过的验证步

设阻断是工作一半。另一半是确认它有效。这是独立监控工具值得的地方。

模式:

  1. 设阻断 在 Little Snitch / LuLu / hosts 文件里。
  2. 打开菜单栏里的 ova 它约 1 Hz 采样按应用流量。
  3. 启动目标应用并用它。 点点。触发以前回家的动作——检查更新、登录、同步。
  4. 看按应用行。 如果保持 0 KB/s 上下,阻断成立。如果你看到任何出站,你有漏。

漏发生的两个原因:

  • 辅助进程没覆盖。 父应用被拒,但 Slack HelperUpdater.app 有自己仍允许的规则。
  • 阻断前缓存的连接。 应用在规则存在前打开了长连接。完全退出应用(右键 → 退出,或 Cmd-Q)并重启。
实时验证
设了 Little Snitch 拒绝规则后,用 ova 确认零流量。辅助进程归到父下,所以你不会错过来自单独 PID 的漏。

特殊情况

阻断应用同时保持 LAN 访问

一些应用需要跟你 AirPlay 喇叭或本地打印机通信,但不该到达互联网。在 Little Snitch 里,设"拒绝任何",然后给 LANMulticast/Broadcast 加允许例外。macOS 本地网络权限也守这个——查 系统设置 → 隐私与安全 → 本地网络,如果应用根本不需要 LAN 就撤销。

在 Wi-Fi 上阻断、在以太网上允许

Little Snitch 支持配置文件。给"咖啡馆"和"家"分别建一个,附不同规则,菜单栏里切。

只阻断更新、允许其他一切

多数应用把更新流量跟功能流量分开。找更新器二进制(常在 YourApp.app/Contents/Library/LoginItems//Library/LaunchDaemons/ 里),给那特定路径加拒绝规则。跑应用,看 ova——功能应该还能用,更新应该在日志里以网络错误失败。

验证你防火墙阻断真正成立

ova 显示实时按应用流量,所以你能确认 Little Snitch 规则做了它的工作——本地、签名、约 3 MB。

下载 macOS 版

一个走完的例子:让话多的工具静音

假设你三年前买了截图工具。终身许可、以前安静、现在每次启动回家、你不信任新所有者。

  1. 装 Little Snitch。 试用前一小时够看规则感觉。
  2. 启动截图工具。 Little Snitch 提示:"Snipster 想连 api.snipster.app"。点 拒绝 → 永远 → 任何端口
  3. 用应用一周。 如果功能工作,拒绝成立。如果一个功能坏了,看它试图调用什么——会在 Little Snitch 日志里——决定要不要允许特定端点。
  4. 旁边跑 ova 确认正常使用期间按应用速率保持 0 KB/s。

这种模式对任何不真需要互联网做本地工作的应用有效。

阻断不能修什么

几件要诚实的事:

  • APNs 推送通知。 macOS 通过 apsd 而不是应用路由 Apple Push。阻断应用不阻断它的通知。改在系统设置禁用通知。
  • 系统扩展和守护进程。 一些应用在 /Library/LaunchDaemons/ 下装后台守护进程。kill 应用不 kill 守护进程。用应用官方卸载器,或通过 launchctl list | grep -i appname 列守护进程。
  • 硬编码 IP 的应用。 罕见但存在。在 Little Snitch 里按 IP 阻断而不是按主机名。
  • 使用 XPC 服务的沙盒 App Store 应用。 有时用户可见应用静默而 XPC 辅助在通信。跟辅助进程同样修法——在 Little Snitch 进程树里找它,加规则。

为什么"监控 + 防火墙"是耐用设置

你能只跑防火墙。你能只跑监控。多数有经验的 Mac 用户两个都跑:

  • 防火墙(Little Snitch / LuLu)设策略并在内核阻断。
  • 监控ova 或类似)显示现实——还在通信什么、多少、什么时候。

两者回答不同问题。"我规则有效吗?"是监控问题。"什么新应用在试图回家?"是防火墙提示问题。一起它们给你完整画面。

收尾

要在 Mac 上端到端阻断应用访问互联网:用 Little Snitch 或 LuLu 做阻断、仅在你也需要入站时用 macOS 应用防火墙、当基于 DNS 的阻断够时对已知端点用 /etc/hosts。然后用监控验证,因为你没确认的规则是你实际没有的规则。

多数应用切了网络后离线就能用。不能的那些你会很快发现——你也会学到关于哪些功能实际本来就是本地的有用知识。