MacOS
MacOS
防火墙
本文档使用MrDoc发布
返回首页
-
+
防火墙
2026年4月17日 06:42
admin
####在 macOS 上,你可以用自带的 PF(Packet Filter)防火墙 来限制端口只允许特定 IP 访问,同时不影响本地(回环)访问所有端口。 --- ####以下配置可实现: ####本机(127.0.0.1 / ::1)可访问所有端口,包括 18789 和 9621; ####只有 172.16.82.66 可以从外部访问这两个端口; ####其他外部 IP 访问这两个端口将被拒绝; ####其他端口的通信不受影响。 --- #1. 编辑 PF 配置文件 sudo cp /etc/pf.conf /etc/pf.conf.bak # 备份 sudo nano /etc/pf.conf ####在文件末尾(或其他合适位置)添加以下规则: # 放行所有本地端口 set skip on lo0 # 放行来自 172.16.82.66 对 18789、9621 端口的 TCP 连接 pass in quick proto tcp from 172.16.82.66 to any port {18789, 9621} keep state # 阻止其他所有来源对这两个端口的 TCP 连接 block drop in quick proto tcp from any to any port {18789, 9621} --- ##说明: macOS 的 PF 默认配置中已经有 set skip on lo0,这条指令会让回环接口(lo0)完全跳过过滤,所以本地访问所有端口不受任何规则影响。 规则顺序很重要:先 pass 再 block,并且都加了 quick,保证匹配即停止,来自允许 IP 的包不会误拦。 如果你还需要 UDP,可以把 proto tcp 改为 proto {tcp, udp},或者单独再加一行。 保存文件(Ctrl+O 然后 Ctrl+X)。 --- #2. 加载配置并启用防火墙 sudo pfctl -ef /etc/pf.conf # 加载新规则 sudo pfctl -E # 启用 PF(如已启用则无需再执行) ####如果想临时禁用防火墙测试: sudo pfctl -d --- #3. 检查规则是否生效 sudo pfctl -sr # 列出当前过滤规则 sudo pfctl -s all # 查看所有状态 --- #4. 让规则在重启后仍然有效 ####macOS 重启后 PF 默认是关闭的。要让防火墙自动启用并加载你的规则,可以创建一个 LaunchDaemon: sudo nano /Library/LaunchDaemons/com.user.pfctl.plist 写入: xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.user.pfctl</string> <key>ProgramArguments</key> <array> <string>/sbin/pfctl</string> <string>-e</string> <string>-f</string> <string>/etc/pf.conf</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist> --- ####然后加载它: sudo launchctl load -w /Library/LaunchDaemons/com.user.pfctl.plist --- #补充说明 ####如果你只是想知道当前为什么已经是这个效果,可以执行 sudo pfctl -sr 查看是否已有类似规则。 ####要完全移除限制,注释或删除上面添加的规则,重新执行 sudo pfctl -ef /etc/pf.conf 即可。 ####如果你只有这两个服务需要保护,且网络环境是内网(172.16.x.x 属于私有地址),上述规则安全有效且不影响系统其他功能。
分享到: