You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在macOS Ventura中使用pfctl禁用VPN连接的技术咨询

在macOS Ventura中使用pfctl禁用VPN连接的技术咨询

没问题,这完全可以通过pfctl实现,我来帮你梳理下当前规则的问题并给出调整方案:

首先,你当前的规则有个核心问题:block all放在最前面会直接拦截所有流量——因为pf是按从上到下的顺序匹配规则的,一旦触发block all,后面的允许规则根本没机会生效。所以得先把允许的规则放在前面,最后再拦截剩余流量。

另外,要禁用VPN连接,我们需要针对性拦截VPN常用的协议、端口,以及macOS上VPN默认使用的虚拟接口(通常是utun*开头的接口)。结合你的需求,我整理了一套完整的规则:

# 允许回环接口的所有流量(本地进程间通信必需,不能少)
pass on lo0 all

# 保留你指定的DNS服务器流量规则
pass out proto {tcp, udp} from any to 8.8.8.8 port 53 keep state
pass out proto {tcp, udp} from any to 8.8.4.4 port 53 keep state

# 允许本地网卡en0到指定IP的80/443流量(现在会生效,因为放在block前面)
pass on en0 proto {tcp, udp} from any to 192.168.50.67 port {80, 443} keep state
# 如果你想允许整个本地局域网的流量,可改成:pass on en0 all keep state

# 拦截所有VPN相关流量
# 拦截常见VPN协议的端口:OpenVPN(1194)、IPsec(500/4500)、WireGuard(51820)
block out proto {tcp, udp} from any to any port {1194, 500, 4500, 51820}
# 拦截IPsec使用的ESP协议
block out proto esp all
# 拦截所有通过VPN虚拟接口的流量(macOS VPN基本都用utun开头的接口)
block on utun* all

# 最后拦截所有未被允许的剩余流量
block all

接下来是操作步骤:

  1. 先备份原有的pf配置文件:sudo cp /etc/pf.conf /etc/pf.conf.backup
  2. 把上面的规则写入/etc/pf.conf(可以用sudo nano /etc/pf.conf编辑)
  3. 启用pfctl:sudo pfctl -e
  4. 加载新规则:sudo pfctl -f /etc/pf.conf
  5. 验证规则:用sudo pfctl -s rules查看当前生效的规则,或者尝试连接VPN,应该会被拦截。

几个补充注意点:

  • 如果遇到某些特殊VPN没被拦截,可以用tcpdump抓包查看它使用的端口/协议,然后添加到拦截规则里。
  • macOS重启后pfctl会默认关闭,要是想开机自动启用,需要配置launchd,但注意Ventura的系统完整性保护(SIP)可能会限制修改,操作前最好了解清楚。
  • 所有pfctl命令都需要管理员权限,记得加sudo

备注:内容来源于stack exchange,提问作者user2354128

火山引擎 最新活动