许多Mac用户都有这样的需求:仅允许特定IP地址的设备访问本机的远程桌面、Web服务器或SSH服务,而将其他所有设备拒之门外。macOS自带防火墙虽能实现基础防护,但默认仅针对应用层进行限制,若需按IP地址精确放行,必须借助底层方案。本文介绍两种最实用的方法——一种硬核且彻底,另一种简单但适用范围有限,您可根据实际场景选择。

使用pfctl配置防火墙规则(底层精准控制)
这是macOS内置的最底层且最可靠的防火墙方案,通过直接操作Packet Filter内核模块,规则应用后立即拦截非授权流量。配置完成后无需图形界面,重启后规则依然持久生效。
第一步:用管理员权限打开pf配置文件
sudo nano /etc/pf.conf
第二步:在文件末尾添加两条规则(注意替换实际值):
# 允许特定IP访问本机8080端口
pass in on en0 proto tcp from 192.168.1.100 to any port 8080
# 拒绝其他所有TCP入站连接(可选,增强安全性)
block in on en0 proto tcp to any port 8080
注意:en0通常为有线网卡,Wi-Fi接口多为en1;请务必先使用ifconfig命令确认当前活跃的网络接口名称。
第三步:重载配置并启用pf
sudo pfctl -f /etc/pf.conf → sudo pfctl -e
执行完成后,规则即刻生效,无需重启系统,也不依赖于图形界面。如果之前已启用pf,建议先停用再重新加载配置,以防规则冲突。
通过“共享”设置限定服务访问范围(简易方案)
此方法适用于屏幕共享、文件共享、远程登录等系统自带服务的粗粒度控制,操作简便,但仅支持预设网络类型。简单来说,它只能放行整个私有网段,无法精确到单个IP地址。
方法一:允许“专用网络”内所有设备访问
进入“系统设置”→“网络”→点击右下角“…”→“高级”→“服务”,勾选对应服务(如“远程登录”),再点“选项”→在“允许来自以下用户的连接”中选择“专用网络”。
该选项自动放行10.0.0.0/8、172.16.0.0/12、192.168.0.0/16等私有地址段。
方法二:创建自定义IP地址群组(需macOS Server App或命令行工具)
普通用户无法直接在系统设置里输入单个IP,必须借助Server App或手动编辑plist文件。此方式复杂度高,且仅对部分系统服务(如AFP/SMB共享)生效,不推荐日常使用。
验证防火墙规则是否生效
配置完别急着收工,务必做一次实战测试——从被允许的IP设备上执行:
telnet 192.168.1.50 8080(将192.168.1.50换成你的Mac IP)
如果连接成功,说明放行规则已生效;再换一台不在白名单内的设备尝试相同命令,应显示“Connection refused”或连接超时。
若白名单内的设备也无法连接,请检查Mac本机服务是否已启动、端口是否被其他程序占用、以及en0/en1网络接口是否填写正确。
运行sudo pfctl -s rules可查看当前加载的所有pf规则,确认你添加的那条pass规则确实存在。要是规则没生效,八成是接口名配错了或者pf没启用——用sudo pfctl -s info看一眼状态就知道了。
