macos 防火墙仅管控入站连接,无法拦截软件主动联网(出站);限制app被远程访问需设“阻止传入连接”,完全禁网或按网络类型限流则须借助hosts、lulu或little snitch等第三方工具。

macOS 防火墙本身不拦截软件主动上网(出站),只管控外部设备对 Mac 的访问(入站)。要限制特定网络连接,核心是控制“谁可以连进来”,而非“它能不能连出去”。实际中,多数需求——比如阻止某 App 被远程访问、防止后台服务暴露端口、或卡住未知程序首次联网弹窗——都落在入站规则的精细配置上。
明确目标再选方法
先确认你要限制的是:
- 某个 App 是否允许被其他设备访问(如微信被局域网扫描、开发服务器被同事调用)→ 用防火墙“阻止传入连接”即可
- 某个 App 完全不能联网(包括自己发请求)→ macOS 内置防火墙做不到,需配合 hosts 屏蔽、lulu 或 Little Snitch 等第三方工具
- 某个 App 在 Wi-Fi 下禁网、有线网下允许 → 内置防火墙不区分网络接口,必须用 LuLu 或 Hands Off!
用系统设置添加并限制单个应用
这是最常用、最稳妥的方式,适用于 Ventura 及更新系统:
- 点苹果菜单 →「系统设置」→ 左侧「网络」→ 右侧滚动找到「防火墙」
- 若未开启,点「打开防火墙」,输入管理员密码
- 点「防火墙选项…」→ 左下角锁图标解锁 → 点「+」号
- 在访达中直接选中
.app本体(如/Applications/Slack.app),不能选别名、快捷方式或.plist文件 - 添加后,在列表中选中该应用 → 右侧下拉菜单设为「阻止传入连接」→ 点「好」
此时该 App 仍可正常上网(发消息、加载网页),但无法响应任何外部发起的连接(比如别人 ping 不通、局域网设备找不到它、本地开发服务器不被访问)。
关闭自动放行签名软件,触发联网弹窗
很多“未知程序”静默联网,是因为默认开启了「自动允许已下载的签名软件接收传入连接」。关掉它,才能让所有未授权程序第一次监听端口时弹窗:
- 在「防火墙选项…」窗口中,取消勾选该项
- 确保防火墙已开启
- 之后运行
python3 -m http.server 8000或启动 ngrok,会立刻弹出系统提示,让你手动选“允许”或“拒绝”
终端命令精准管理规则(适合脚本或 GUI 失效时)
图形界面背后调用的是 socketfilterfw,终端可补足其限制:
- 启用防火墙:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
- 添加并立即阻止某 App 入站:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add /Applications/WeChat.app --block
- 查看当前所有规则是否生效:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --list
注意:
--block只影响入站;若想同时禁出站,需第三方工具,或改 hosts(例如把api.weixin.qq.com指向127.0.0.1)。
进阶:区分 Wi-Fi 和有线网络限流
macOS 原生防火墙不支持按网络接口设规则。如果需要“仅在 Wi-Fi 下禁某 App 上网”,推荐:
- 安装 LuLu(免费、Apple 官方签名):首次运行时授权网络监控,之后任意 App 尝试联网,弹窗中点「拒绝」并勾选「永久拒绝」,它会自动绑定当前活跃网络接口
- 或用 Hands Off!(付费):在 Rules 标签页新建规则,指定协议、端口、网络接口(Wi-Fi),动作设为 Deny
不复杂但容易忽略











