给朋友的家中 VPN:共享出口,而不是局域网
仅供上网的访客 VPN 和局域网访问是两种不同的产品。划分家庭、主机和客户端边界,也要测试拒绝。
说朋友可以借用你家的网络出口上网,并不等于说他们可以使用你家的局域网,而这两句话之间的差距包含 NAS、打印机、路由器管理页面以及局域网上的其他每一台设备。每种安排都需要自己的转发规则。我听说的共享 VPN 事故大多不是离奇的攻击,而是访客接触到了某样东西,因为没人写下到底买了哪条边界。先决定你提供的是哪种契约,然后用转发和访问策略来表达,而不是写在一条消息里。
两份听起来一样的契约
仅互联网意味着受邀客户端的流量从你的连接出去,仅此而已。完全访问意味着同一个客户端也加入你的本地网络,而第二份契约悄悄包含了第一份,人们就是这样滑进去的。差别归结为几条转发规则,也是共享带宽与共享房子的差别。在动防火墙之前把契约写下来,因为事后添加的规则比删除更容易被合理化。
除非有人确实需要局域网内的服务,否则选择仅互联网的契约,因为你从未写下的规则就是你从未授予的权限。然后检查客户端软件实现的是哪种契约,因为全隧道的默认值可能悄悄提供更宽的那种。
边界一:家庭网络
访客流量根本不该出现在家庭网络上。单独的 VPN 子网或专用托管网段让这条策略更容易表达,但换个名字本身并不强制执行任何东西。说出真正移动数据包的设备,并把跨越规则放在那里,因为写在不做转发的机器上的规则只是装饰。当 VPN 运行在路由器上时,执行点就是路由器自己的转发链。
带客户端隔离的访客网络是合理的替代方案,前提是 VPN 客户端确实落在上面。两种设计都需要从客户端而不是从控制台做同样的测试。
边界二:主机和其他访客
客户端只需要 VPN 服务,运行它的机器上不需要别的,所以管理访问仍是单独的权限。它是最常被意外授予的权限,因为隧道监听器和管理界面在同一台机器上。如果 VPN 在路由器上终止,隧道端口与网页或 SSH 界面就是不同的对象,值得不同的规则。保护登录页面的规则绝不应被读成禁止转发。
上网访问也不要求让一个受邀客户端到达另一个。远程访问池如果不特别说明,往往表现得像一个共享网段,所以要在池配置里把决定写明确。对少数朋友来说,隔离就是值得选择的默认值。
写规则之前先画出路径
独立设备有两组需要管制的数据包:在它上面终止的,以及它代表客户端转发的。CISA 的网络指南把入站、出站和网络间路径视为需要论证的访问,这正是这里正确的框架。按实际情况列出家庭前缀,IPv4 和 IPv6 都要,因为只封 IPv4 会让同样路由 IPv6 的家庭在同一道边界上完全敞开。然后决定客户端如何获得 DNS,以及任何解析器例外是否只暴露预期的服务。
这些是要求而不是通用配方,因为规则取决于 VPN 在哪里终止、转换在哪里发生。避免只为了让第一次浏览器请求成功就添加宽泛的放行。
你承担了什么,以及如何测试
共享出口会产生一个运营角色。通过服务的身份模型邀请人们,让移除变得可行,维护主机和路由器,并决定服务可以使用你多少上行带宽。请求从你的地址发出,所以即使没有触及任何私人设备,投诉和声誉问题也会找上门。技术上的隔离设计对法律立场只字不提,而把流量限制在常见网页端口并不会让每一项被允许的活动都无害。
然后用获授权的客户端测试拒绝,而不是从路由器控制台。以下每一条都应成立:
- 访客隧道可以上网。
- NAS 和打印机按地址和按名称都被拒绝。
- 隧道地址无法进行路由器管理。
- 第二个受邀客户端不可达。
- 移除客户端授权确实会终止访问。
如果所有者无法维护这些边界和运营职责,交出一个配置文件就低估了这套安排对他的要求。这才是对服务的诚实描述,它应该出现在随配置一起发送的消息里。