陌生的 OVPN 文件:本地风险与远端信任
配置文件既能影响你机器上的客户端,也能选定看到你流量的运营方。导入文件之前,请把这两个决定分开审视。
把 OVPN 文件当作程序的输入,而不是当作其内容无害的证明。检查服务器地址只能回答配置想连到哪里,别的一概回答不了。这个文件里藏着两个彼此独立的信任决定:客户端可以在你的机器上做什么,以及哪个运营方接收流量。协议名字再熟悉,也定不了其中任何一个。
一个文件里藏着两个决定
第一个决定是本地性的。配置文件是一门配置语言,读取它的客户端可能支持加载插件、运行脚本或改变路由与 DNS 应用方式的指令。第二个决定是远端性的。无论文件里写了什么,出口运营方都会看到抵达它的流量。
把两者混为一谈,两个方向都会给出坏建议:要么是陌生运营方提供的、看起来干净的配置,要么是知名运营方的配置里带着没人读过的钩子。一个在本地安全的配置,仍可能把你的流量交给不会选的人。
在任何客户端之前先读配置文件
在任何客户端处理它之前,先把文件当作文本读一遍。找那些指向文件之外、引用可执行文件或改变权限的指令,再把这份清单与客户端文档中声明的支持范围比对。一次简短的搜索不是安全审计,但它能告诉你这配置是服务器清单还是别的东西。
grep -nE '^(script-security|up|down|plugin|route-up|ipchange)' untrusted.ovpn
结果为空让人安心,却不构成结论,因为选项之间会相互影响,也可能来自被包含的文件。把过滤后的清单当作继续读下去的理由,而不是判决。
随配置一起送来的说明,也值得和配置本身一样审视。有四种要求应当让你停下来:启用脚本、安装辅助程序或库、以管理员身份运行客户端,或放宽导入限制。每一条都在把信任边界向外推,而它们都不是导入服务器清单的常规部分。
也把整个文件通读一遍,因为单独一行陌生内容放在上下文里,比放在过滤清单里更容易判断。遇到陌生的行,去查你所使用客户端的手册,而不是猜。
客户端实际会执行什么
Community OpenVPN 的 2.6 手册 记录了 script-security 的阶梯:第 1 级是默认值,会阻止用户自定义脚本,第 2 级则允许。插件加载是另一套机制,有自己的指令。所以同一个文件在不同客户端里可以意味着不同的事。移动端和厂商客户端可能只接受更窄的指令集合,甚至不接受任何钩子。
启动方式与客户端同样重要。由特权辅助程序启动的配置,能做的事比在用户空间启动的更多;这个差别正是应该读一读导入提示、而不是随手关掉的理由。
版本同样重要,因为这些级别是按发行版定义的,落后几个版本的客户端未必实现同一套策略。要读与你正在运行的构建相符的手册,而不是你手边最新的那份。如果客户端哪儿都不显示版本字符串,这本身就该让你慢下来。
比较运营方,而不只是地址
像比较任何中间人那样去比较运营方。问清楚谁在运营出口、他们记录什么、这份配置是怎么到你手上的。经过核实的下载页和一致的指纹,比一个熟悉的域名更有说服力。服务器能连通,只能证明有东西应答了。
凭据是人在压力下最容易出错的部分。别因为服务器名字看着眼熟,就把无关账号的密码敲进下载来的配置里。配置也可能以明文携带私钥,所以把整个文件贴到评审帖里,就等于把那把钥匙交给了帖子。
经过正确校验的 HTTPS 会话,仍然会向单纯转发数据包的人隐藏页面内容,所以出口并不会自动看到每一个密码。但它确实看得到你访问了哪些站点,这条边界值得说准确,而不是夸大。
当文件来源始终不清楚,或者它索取的权限给不出你能接受的解释时,就把它换成一份来自可追责来源的配置。在受管理的工作连接上,管理员应当把客户端和配置当作一个决定来批准,而不是两个。这里没有哪一步要求你先证明对方有恶意;拒绝访问本身就是正当的答复。