macos自带防火墙是基于主机的入站连接过滤器,默认关闭,需按系统版本进入“系统设置→网络→防火墙”(ventura及更新)或“系统偏好设置→安全性与隐私→防火墙”(monterey及更早),解锁后开启并配置应用级规则才能有效防护。

macOS 自带的防火墙是基于主机的入站连接过滤器,不处理出站流量,主要作用是阻止外部设备未经许可访问你的 Mac。它默认关闭,开启后需配合具体规则才能真正起效——不是“打开就安全”,而是“开对才管用”。
找到并启用防火墙
路径随系统版本略有不同:
- macOS Ventura(13.x)及更新:苹果菜单 →「系统设置」→ 左侧边栏滚动到底 →「网络」→ 右侧点「防火墙」
- macOS Monterey(12.x)及更早:苹果菜单 →「系统偏好设置」→「安全性与隐私」→ 顶部切换到「防火墙」标签页
首次进入需点击左下角锁形图标,输入管理员密码解锁,然后点「打开防火墙」。此时仅启用基础策略:允许 macOS 内建服务(如文件共享、远程登录)和已签名软件自动通行。
控制哪些程序能被外部访问
图形界面支持按应用粒度放行或拦截,适合大多数场景:
- 在「防火墙」页面点「防火墙选项…」
- 点击「+」号,选择目标应用的 .app 包(例如 /Applications/WeChat.app,不能选别名或快捷方式)
- 在下方列表中找到该条目,将其右侧下拉菜单设为「允许传入连接」或「阻止传入连接」
- 若想让某个开发服务(如 Python 本地服务器)可被局域网其他设备访问,必须添加对应可执行文件(如 /usr/bin/python3),而非终端.app本身
拦截未知或可疑联网行为
默认状态下,Apple 签名的应用会静默放行,不会弹窗提示。要让所有未明确授权的程序首次监听端口时触发系统弹窗,必须关闭自动放行:
- 在「防火墙选项…」中,取消勾选「自动允许已下载的签名软件接收传入连接」
- 保持「开启防火墙」已启用,且锁图标已解锁
- 此后运行 python3 -m http.server 8000 或启动 ngrok 等工具,会立刻弹出授权对话框
- 对拒绝授权的程序,系统不会记录规则;若后续仍需拦截,可用命令行工具进一步管控
用 socketfilterfw 管理底层规则
图形界面无法覆盖所有情况,比如后台守护进程、临时脚本或路径异常的二进制文件。这时需调用系统内置的命令行工具:
- 打开「终端」,执行:sudo /usr/libexec/ApplicationFirewall/socketfilterfw --list 查看当前所有已注册的规则
- 重点关注路径含 /tmp/、/var/folders/、~/.Trash 或随机命名(如 com.apple.xxx-abc123)的条目
- 对可疑项执行:sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setrule deny /path/to/executable
- 注意:该操作只影响后续启动的进程,正在运行的需配合 killall -9 或 launchctl unload 终止











