Mac连接公共Wi-Fi时需启用防火墙并设隐身模式,Ventura+系统在“系统设置→网络→防火墙”配置,配合终端脚本与launchd守护进程实现网络位置自动开关防火墙。

当Mac连接到咖啡馆、机场等不安全的公共Wi-Fi时,需要立即启用防火墙来阻断非法入站连接,防止设备被扫描或攻击。macOS本身不提供“按网络类型自动开关防火墙”的原生功能,但可通过系统设置+终端脚本组合实现该效果。
确认当前系统版本与防火墙入口位置
先点击左上角苹果菜单 → “系统设置”,在边栏中找到并点击“网络”(若未看到请向下滚动)→ 在右侧区域点击“防火墙”。这是Ventura 13.x及后续版本(包括2026年最新系统)的唯一正确路径;Monterey 12.x及更早版本则需进入“系统偏好设置”→“安全性与隐私”→“防火墙”标签页。
手动开启防火墙并配置基础防护
点击左下角锁形图标 → 输入管理员密码解锁 → 点击“打开防火墙”。这一步会启用默认策略:允许已签名的内建App和系统服务通信,同时拦截未经许可的外部连接请求。
开启后务必点击“防火墙选项” → 勾选【启用隐身模式】。该选项让Mac对ICMP ping、ARP探测等常见扫描行为完全无响应,大幅降低被发现概率——在公共Wi-Fi环境下这是关键防线。
保持“自动允许内建软件接收传入连接”和“自动允许已下载的签名软件接收传入连接”两项为启用状态。否则AirDrop、隔空播放、Finder共享等功能将异常中断。
创建网络位置并绑定防火墙开关脚本
第一步:打开“系统设置”→“网络”→点击右下角三个点图标 → 选择“编辑位置”→ 点击“+”新建一个名为“Public Wi-Fi”的位置 → 点击“完成”。
第二步:打开“终端”(应用程序→实用工具),依次执行以下命令:
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setloggingmode on
第三步:将以下Shell脚本保存为/usr/local/bin/toggle-firewall-on-public.sh:
#!/bin/bash
if networksetup -getcurrentlocation | grep -q "Public Wi-Fi"; then
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on
else
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
fi
第四步:运行chmod +x /usr/local/bin/toggle-firewall-on-public.sh赋予执行权限。
第五步:在“系统设置”→“网络”→“位置”中,将当前Wi-Fi服务(如“Wi-Fi”)的“配置IPv4”设为“使用DHCP”,然后关闭窗口。此时系统已记录该网络归属“Public Wi-Fi”位置。
设置网络切换时自动触发防火墙开关
方法一:使用Automator创建“位置更改”快捷操作
打开Automator → 新建“快速操作” → 在左侧搜索“运行Shell脚本”并拖入工作流 → 将shell脚本内容粘贴进去 → 保存为“Switch Firewall on Public Network”。之后每次手动切换位置时可一键运行。
方法二:部署launchd守护进程监听网络变化
创建plist文件/Library/LaunchDaemons/com.apple.network-location-firewall.plist,内容包含WatchPaths指向/Library/Preferences/SystemConfiguration/preferences.plist,并在ProgramArguments中调用上一步保存的toggle-firewall-on-public.sh脚本。加载该plist后,系统检测到位置变更即自动执行防火墙启停。
【注意】必须以root权限加载launchd plist,普通用户权限无法生效。执行sudo launchctl load -w /Library/LaunchDaemons/com.apple.network-location-firewall.plist完成注册。

















