别人交给你的 VPN 配置文件能在你的设备上改变什么
配置文件是给客户端的一组指令,可以改变流量走向并增添信任。在往里面输入密码之前,先读读它在要求什么。
把一份 VPN 配置文件交给客户端,就是把它交给一段由别人写好的配置,然后由该程序在你的机器上执行。导入它可能改变被覆盖的流量走向、设备信任哪一个对端,在部分格式里还会改变隧道启动时会运行哪些本地程序。这个文件不是书签;它是一段以声明式格式写成的小程序。
读它,就像读同一来源提供的 shell 脚本一样。
解释它的是客户端,不是你
文件里的每个字段都是给某个特定客户端的指令。端点与协议决定隧道走向,认证块决定索要什么密钥材料,路由指令决定哪些流量进入隧道。证书或私钥可能以块的形式内嵌,而不是以文件形式引用,所以一个纯文本文件有时就带着冒充你面对某个网关所需的全部内容。正是这一特性让随手转发文件变得如此危险。
OpenVPN 配置文件还可能带有脚本钩子、插件路径,以及决定这些钩子能否运行的安全级别。正是这种组合,让陌生的配置文件值得逐行阅读,而不是双击了事。客户端会完全按文件所说的去做,并且用你的权限去做。
路由变化在连接一次之后就看得见
全隧道配置会安装把一切都送进网关的路由,而分流隧道配置只发送选定的前缀。有些配置还会推送 DNS 服务器,悄悄改变了谁会看到你的查询。这些本身都不算恶意,也没有一样能从文件名上看出来。
对比首次连接前后的路由表,一眼就能看出意图。一份宣称只访问某个内部应用、却安装了更宽的默认路由的配置,已经说明了作者的一些情况。
真正有分量的是信任材料与钩子
配置文件可以向 VPN 客户端提供信任信息,而平台配置包还能更进一步,把证书或根证书装进系统存储。这是范围不同的两件事,后果也不同。客户端范围内的影响是单个应用的校验;系统范围的影响则是所有使用平台信任存储的东西。
脚本钩子和插件是另一半。在连接时执行命令的指令,或被加载进客户端进程的插件,拥有你的权限,却没有任何客户端沙箱的约束。如果你没主动索取的配置里含有这类东西,那就是要向发给你的人追问的问题。
这两类东西都不是天生敌意的。企业部署两种都在用。要点在于,每一种都需要一个你能核实的解释。
先核实来源,再输入密码
通过你本来就信任的渠道确认文件是谁签发的,而不是通过送来它的那条消息。把端点与证书的细节与运营方公布的文档对照。如果某份配置是不请自来,就向运营方直接要一份新的,而不是修补别人递过来的副本。问清运营方支持哪个客户端版本,因为同一份文件在另一个客户端里可能有不同解释。
grep -nE '^(remote|proto|auth-user-pass|redirect-gateway|route|route-nopull)' office.ovpn
grep -nE '^(up|down|plugin|script-security|setenv)' office.ovpn
openssl x509 -in embedded-ca.crt -noout -subject -issuer -dates
绝不要为了试探能否使用,就把密码填进一个没有说明的字段;也绝不要只为了完成导入,就接受陌生的权限提示。连接成功只能证明对端有回应,仅此而已。
要删的是导入后的副本,不是下载的文件
客户端会把配置复制到自己的存储里,所以删掉下载的文件,导入的连接依然生效。要通过客户端自己的界面删除它,并检查导入时添加的证书是否也一并消失。然后再确认它安装的路由也已消失。
如果证书是装在系统范围的,删掉配置文件并不够。那部分清理属于平台的信任管理,值得有意去做,而不是指望下次重启替你处理。