发布家庭 VPN:你实际暴露了什么
你打开的是一个端口,而不是一项服务。在依赖隧道之前,分别检查公开监听器、被接受的客户端和私有资源。
你为隧道转发一个端口,并告诉自己改动范围有限。实际上,端口只放行数据包;真正构成暴露的是它背后的东西。三件事决定这种暴露:公网侧监听的套接字、隧道接受的身份,以及该身份随后能触及的目标。每一件都需要自己的答案,因为在一处谨慎选择并不会约束另外两处。
端口转发不是服务
路由器规则把数据包移向某台主机,却不指明读取它们的是哪个进程。转发页面和监听套接字位于不同地方,所以一条规则可能指向一台已不再运行该服务的机器。要查明究竟是谁在应答,请看主机:ss -lntup 会列出每个监听套接字及其所属进程。然后把该进程对应到组件、版本和负责人。
删掉你记得创建过的那条规则,并不等于关上了门。UPnP 映射可能自行添加,IPv4 条目消失后 IPv6 地址仍可能可达,另一台机器上还可能存在第二种发布方式。既要读路由器的 UPnP 映射列表,也要读它的静态条目,然后从网络外部测试。
登录不是局域网权限
隧道决定谁可以连接;资源决定已连接的客户端可以打开什么。NIST 的零信任指南在网络规模上做了同样的划分:地址并不能证明任何授权。给一台已登记的笔记本电脑一项任务,例如读取某台命名主机上的文件共享,并把这对关系写下来。隧道地址不应继承对整个家庭其余部分的管理员访问权。
还要检查摘要略过的路径:客户端到客户端流量、网桥成员资格、互联网转发和源地址转换。每一条都可能把两个系统连起来,而你的书面任务从未提到它们。关掉任务不需要的那些,然后列出客户端仍然能到达的地方。
干净扫描证明的很少
开放端口是关于一个地址和一个协议的事实;成功登录是关于一份凭据的事实。两者都不能说明接下来会发生什么。在目标主机上测试预期操作,然后尝试一个从未登记的身份、一项无人批准的服务,以及本应保持私密的管理界面。最后一项测试通常就是失败的那项。
两种地址族和每一条你发布的路径都要测试。扫描 IPv4 地址并不能说明正在监听的 IPv6 服务,内部测试也看不到 NAT 回环问题或上游过滤器。至少从外部做一次检查,使用不经过同一台路由器返回的连接。
把暴露写下来
一张短表能让这次审查变成下一个人可以审计的东西。从外向内填写,每个可达服务一行,并把它和配置放在一起,而不是放在聊天记录里。如果某一行没有负责人,那本身就是一项发现。
| Public address and port | Receiving host | Process on the socket | Intended actor | Who may reach it |
|---|---|---|---|---|
| 203.0.113.10:51820 | nas | wg-quick@wg0 | my laptop | enrolled peers only |
只写“VPN”的行还不算行。一行需要套接字、主机、身份和目标,因为审计者或攻击者要测试的正是这些。
需要之前先规划退役
无法撤销的隧道就是一扇永久的门。提前决定如何吊销设备凭据、结束活动会话,以及在升级破坏服务后恢复访问。保留一条不经过隧道的恢复路径,因为你要修的正是隧道。把它存放在没有那台机器也能拿到的地方。
当预期目标可用、不想要的目标不可用时,审查才算完成。它并不保证不存在漏洞,扫描器的绿色标签也不能替代这两者中的任何一个。把表格和恢复说明交给接手这套设置的人。