本地网络

macOS 防火墙阻止传入连接

macOS 防火墙控制的是其他电脑向你的 Mac 发起的连接,不控制你的 App 发起的连接。

适用于:“系统设置”>“网络”>“防火墙”适用于 macOS 13 Ventura 及更高版本。更早的版本使用“安全性与隐私”。核查日期:2026年10月29日

症状

  • 其他设备无法连接 Mac 上的服务器、游戏或共享服务。
  • Mac 不响应其他设备的 ping。
  • 开发服务器在 Mac 上能访问,但同一 Wi-Fi 下的手机却访问不了。
  • macOS 询问是否允许某个 App 接受传入的网络连接。

可能的原因

  • 阻止所有传入连接。Apple 指出,此选项会阻止对非必要服务及所有其他共享服务的连接。
  • App 已被拒绝。你之前在提示中点按了“拒绝”,或者该 App 在防火墙“选项”中被设为阻止。
  • 隐身模式。Mac 不响应 ping 等探测请求。
  • 服务器监听的是 127.0.0.1。这种情况下,无论防火墙如何设置,都只有 Mac 本机能连接。

如何检查

  1. 选取苹果菜单 >“系统设置”>“网络”>“防火墙”。查看防火墙是否已打开。

  2. 点按“选项”。查看你的 App 的设置以及“阻止所有传入连接”。

  3. 在“终端”中显示防火墙状态。

    /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
    /usr/libexec/ApplicationFirewall/socketfilterfw --getblockall
    /usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode
  4. 确认服务器监听的是所有地址,而不只是 127.0.0.1。

    lsof -nP -iTCP:8000 -sTCP:LISTEN

如何修复

  1. 如果需要使用共享或服务器,在防火墙“选项”中关闭“阻止所有传入连接”。

  2. 点按“添加”按钮并选择该 App,将其设为允许传入连接。

  3. 点按“好”,然后在另一台设备上再次测试连接。

  4. 也可以在“终端”中允许 App。将路径换成你的 App。

    sudo /usr/libexec/ApplicationFirewall/socketfilterfw --unblockapp /Applications/Example.app

    需要管理员密码。

  5. 保持防火墙开启,只允许必须接受连接的 App。

使用 Kilobat

  1. Kilobat 的过滤器控制的是你的 App 发起的连接,不能替代 macOS 防火墙来管理传入连接。

  2. 要查看服务器进程打开的套接字,使用 destinations 命令。

    kilobat destinations --pid 12345

常见问题

macOS 防火墙会阻止传出连接吗?

不会。Apple 将其描述为防范其他电脑发起的连接。要管理传出连接,请使用过滤类 App。

隐身模式有什么作用?

Mac 不响应来自未知来源的 ping 等探测请求。已允许的 App 仍能收到发给它们的请求。

参考资料

参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本;在“终端”中用 man <name> 打开。