在我位于 NAT 路由器后面的家庭网络中,我有一个 owncloud 服务器,名字很有创意,叫“owncloud”。它应保持私密,无法通过互联网访问。如果同步仅在我在家时有效,那就没问题了。
问题:当我不在家时,我的手机尝试连接到“ownloud”(例如在国外 Wifi 上)——是否会发生 Wifi 中的一些坏人创建一个同名的服务器,嗅探我的用户名/密码(他可以这样做吗?),甚至通过欺骗自己的云服务器来操纵数据?
为了能够创建 SSL 连接并摆脱浏览器警告(正常的 letsencrypt 仅适用于公共服务器),我阅读了有关使用动态 DNS 提供程序并指向内部 IP(如 192.168.2.xxx)的信息 - 并通过 DNS 记录执行 letsencrypt 身份验证。https: //dev.to/ietxaniz/how-to-implement-https-in-local-networks-using-lets-encrypt-4eh
问题:同样,在家外,手机会尝试连接到不存在的 IP。或者可能存在但指向不同的服务器。这样做是否存在安全问题?
最重要的是 - 如果是的话,有什么方法可以解决这个问题,而不是将整个服务器公开托管在我真正拥有的域上?
好吧,这就是您设置的 LetsEncrypt TLS 证书的全部目的。它们的全部目的是将主机名绑定到拥有特定私钥的特定服务器。因此,如果您的 OwnCloud 服务器需要 TLS,并且您使用证书验证连接到特定的 DNS 名称,那么即使碰巧具有相同的内部 IP 地址,手机也会拒绝连接到“错误”的服务器。(但它仍会尝试,否则它在开始连接之前无法看到证书。)
当然,这依赖于您手机上的所有应用实际上验证证书……但有些应用却不这样做。我见过一些应用假设即使用户设置了证书,它也将是伪造的,因此“[✔] SSL”复选框没什么用。
更安全的方法可能是以下方法的组合:
家庭 LAN 上的 IPv6。它不一定需要是 ISP 提供的全局地址 - 设置私有“ULA”
fdXX:XXXX:...
地址(相当于 192.168 的 IPv6 地址)就足够了,只要您随机选择子网前缀,它与另一个 LAN 的私有地址意外冲突的可能性就非常低。(其他人仍然很容易看到你的手机试图访问的地址,然后故意设置一个具有相同地址的虚假服务器,但至少它提高了要求实际意图的标准。)
当您在家庭网络之外的任何地方时,可以使用自托管的始终在线 VPN,例如 Tailscale/WireGuard/ZeroTier。将其配置为仅路由您的 LAN 地址前缀,手机的操作系统将确保到这些地址的所有流量都通过安全的 VPN 隧道到达您的家庭网络,而不会到达其他地方。
(这稍微取决于 LAN 地址前缀是否合理唯一;可能不一定是 IPv6,但至少选择一个您不希望在别人的 LAN 中找到的地址。)
在家中使用 VPN 的另一个好处是它甚至可以用于不使用 TLS/SSL 的协议,例如通过 SMB2 进行文件访问。