把 VPN 网关放在 Windows XP 旁边,而不是里面
让旧版 Windows XP 主机继续只做应用端点,把隧道、密钥和更新移到旁边一台持续维护的网关上。
楼里某处有一台机器,运行着没人能替换的应用,却装在一个不该连接任何东西的操作系统上。 从这台主机的网络适配器往外看,是判断隧道该放在哪里最快的方法。 在多数设计里,隧道根本不该放在主机上。 把它挪一步到旁边一台持续维护的网关上,原来的难题就缩回到它最初那个应用本身。
从主机适配器开始,而不是从 VPN 客户端开始
打开适配器属性,给主机一个小的专用网段上的固定地址,并把网关设为它的默认路由。 这样主机就不需要隧道客户端、隧道凭据,也不需要通往更大企业网络的路由表条目。 如果应用只需要一个远程子网,就只加那一条路由。
C:\> route add 10.20.30.0 mask 255.255.255.0 192.168.50.1 -p
那条命令把一个目标固定到网关上,其余全部不可路由,这正是想要的形态。 用 route print 确认结果,而不是相信退出码。 然后确认应用仍能解析自己的服务器名,因为解析器坏掉的旧主机看起来和网络故障一模一样,而修解析器是五分钟的事,在错误的网络改动之后重建应用则不是。 主机到不了的每个目标,都是旧网络栈能被说服去攻击的东西少了一个。
把隧道放在你能更新的硬件上
网关需要两个接口:一个朝向主机网段,一个朝向应用所在的位置,隧道在第二个接口上终止。 那台设备可以接收固件更新、更换密码配置并记录流量,而没有人碰旧机器。 它的厂商也会为隧道实现发布修复,而主机永远收不到这些修复。 两台机器和一个截止日期,不是从论坛帖子照抄静态密钥配方的理由。
给每台网关各自的对等身份,而不是把一份客户端配置克隆到整批设备。 更换设备时,在让新设备上线的同一刻吊销旧身份,否则会留下两份不受控的副本在同一个端点上认证。 把密钥放在网关管理面期望的位置,把配置备份当作机密,并审查谁可以推送这份配置,因为现在由它决定旧主机能到哪里。
允许服务,而不是允许网络
按两个接入点之间的协议、端口和方向来写策略。 只放行一个端口到一个应用地址是通常答案,经过跳板机的管理路径覆盖其余部分。
旧主机的远程管理不该和应用走同一条规则,而测试拒绝与写规则同样重要。 从主机向一个预期会被拒绝的目标发一次请求,确认拒绝来自策略而不是缺少路由。 在设计还新的时候记录你允许的流量,这样能看到应用实际用什么,而不是它的文档声称什么。 因为一份桥接教程看起来更短就把两个子网合并,正是旧网段悄悄变成跳板的路径。
不要把旧监听器直接暴露到互联网,当作绕过网关的捷径。 把管理路径与应用路径分开,这样一边被攻破不会交出另一边。 从未被演练过的规则就是没人验证过的规则,所以被拒绝的目标也要进入验收。
恢复必须在没有隧道时也能工作
在第一次故障前就确定谁负责更新和恢复网关,并确保这个人不依赖它所终止的那条隧道就能到达它。 控制台访问、本地管理端口或带外路径都算答案。 只能通过它自己提供的隧道来配置的网关,是一个耐心等待糟糕固件推送的陷阱。
为真正会遇到的故障写运行手册:隧道中断、网关死掉、主机磁盘丢失。 把主机的恢复镜像放在仍然存在的任何支持安排之下,并记住恢复也会恢复镜像里的软件状态和凭据。 先恢复到隔离网段,确认应用能启动,然后才重新连接任何东西;网关变化时,在同一场合并更新运行手册和清单。
证书、时钟与签名警告
安装程序的证书过期,本身并不能预测今天的签名检查会说什么。 Microsoft 关于 Authenticode 时间戳的指南说明,时间戳可以让签名在签名证书过期后仍可验证,而验证仍取决于签名、信任链和执行验证的一方。 因此,信任存储不同的两台机器可能对同一个文件得出不同结论。 过期的签名者不是二进制文件恶意的证据,有效的签名也不是软件仍在维护的证据。
不要为了运行旧安装程序而把系统时钟往回拨或关闭签名检查。 从仍在支持这个应用的人那里取得获准的工件,让他们说明平台接受什么。 把声称某个构建是 XP 最后一版的帖子当作历史,而不是安装目标,因为真正的要求取决于应用;如果确实需要保留工作,把它放在远离生产访问的隔离网段,并记录它为什么存在。