我想以编程方式实现VPN kill switch。我可以从终端手动启用和禁用pf
。但我无法从我的应用程序中执行此操作。
为此,我加载了pf.conf
文件,其中包含规则:
"block drop all\n"
"pass inet proto udp from any to 224.0.0.0/4 keep state\n"
"pass inet proto udp from 224.0.0.0/4 to any keep state\n"
"pass inet from any to 255.255.255.255 flags S/SA keep state\n"
"pass inet from 255.255.255.255 to any flags S/SA keep state\n"
"pass on $active_interface proto tcp from any port 67:68 to any port 67:68 flags S/SA keep state\n"
"pass on $active_interface proto udp from any port 67:68 to any port 67:68 keep state\n"
"pass on $active_interface inet proto tcp from any to 109.201.137.13 flags S/SA keep state\n"
"pass on $active_interface inet proto udp from any to 109.201.137.13 keep state\n"
"pass on $VPN_interface all flags S/SA keep state\n"
当VPN连接时,它与sudo pfctl -e
和sudo pfctl -d
一起工作正常。如果VPN断开,流量将被阻止,用户必须连接到von或禁用kill开关来利用流量。
为了从mac app执行命令我使用了特权帮助工具,我根据控制台中的PF enabled
命令得到pf
和'PF禁用',但是流量一直被阻止。我正在使用Swift进行开发
我正在为此奋斗一个星期。请帮忙。 任何帮助将不胜感激。提前谢谢。