本地网络
macOS 防火墙阻止传入连接
macOS 防火墙控制的是其他电脑向你的 Mac 发起的连接,不控制你的 App 发起的连接。
症状
- 其他设备无法连接 Mac 上的服务器、游戏或共享服务。
- Mac 不响应其他设备的 ping。
- 开发服务器在 Mac 上能访问,但同一 Wi-Fi 下的手机却访问不了。
- macOS 询问是否允许某个 App 接受传入的网络连接。
可能的原因
- 阻止所有传入连接。Apple 指出,此选项会阻止对非必要服务及所有其他共享服务的连接。
- App 已被拒绝。你之前在提示中点按了“拒绝”,或者该 App 在防火墙“选项”中被设为阻止。
- 隐身模式。Mac 不响应 ping 等探测请求。
- 服务器监听的是 127.0.0.1。这种情况下,无论防火墙如何设置,都只有 Mac 本机能连接。
如何检查
选取苹果菜单 >“系统设置”>“网络”>“防火墙”。查看防火墙是否已打开。
点按“选项”。查看你的 App 的设置以及“阻止所有传入连接”。
在“终端”中显示防火墙状态。
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate /usr/libexec/ApplicationFirewall/socketfilterfw --getblockall /usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode确认服务器监听的是所有地址,而不只是 127.0.0.1。
lsof -nP -iTCP:8000 -sTCP:LISTEN
如何修复
如果需要使用共享或服务器,在防火墙“选项”中关闭“阻止所有传入连接”。
点按“添加”按钮并选择该 App,将其设为允许传入连接。
点按“好”,然后在另一台设备上再次测试连接。
也可以在“终端”中允许 App。将路径换成你的 App。
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/Example.app需要管理员密码。
保持防火墙开启,只允许必须接受连接的 App。
使用 Kilobat
Kilobat 的过滤器控制的是你的 App 发起的连接,不能替代 macOS 防火墙来管理传入连接。
要查看服务器进程打开的套接字,使用 destinations 命令。
kilobat destinations --pid 12345
常见问题
macOS 防火墙会阻止传出连接吗?
不会。Apple 将其描述为防范其他电脑发起的连接。要管理传出连接,请使用过滤类 App。
隐身模式有什么作用?
Mac 不响应来自未知来源的 ping 等探测请求。已允许的 App 仍能收到发给它们的请求。
参考资料
- Apple 支持:在 Mac 上更改防火墙设置
- Apple 支持:使用防火墙阻止与 Mac 的连接
- Apple 平台安全:应用程序防火墙
- socketfilterfw(8),macOS 27.2 自带的手册页
参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本;在“终端”中用 man <name> 打开。