我有一台运行 OpenMediaVault 的本地机器。它上面设置了一个 SMB 共享,可以通过 LAN 访问。
有时我需要从 LAN 外部访问该共享上的数据。有哪些方法可以实现这一点?哪种方法最好?
目前我看到两种方法:
- 为我的 LAN 设置 VPN。我发现有几个问题:我不希望整个 LAN 都可以从外部访问,但我想这是可配置的(是吗?);我也已经在工作中使用 VPN,因此可能需要同时访问我的家庭 VPN 和工作 VPN,这可能吗?
- 只需允许通过路由器的防火墙从外部访问 SMB 即可。主要担心的是安全性,正确的设置方法是什么?
我还考虑设置一个反向代理(因为我有一些其他资源想从外部访问)并使用域名进行外部访问(如果相关的话)。
我并不是要求提供详细的逐步指导,而只是要求提供有关最佳选择的信息,或许还有一些避免错误的一般建议。
谢谢!
答案1
为我的 LAN 设置 VPN。我发现它有几个问题:我不希望整个 LAN 都可以从外部访问,但我想这是可配置的(是吗?)
您的 VPN 服务器将充当路由器,而作为路由器,它将具有防火墙,您可以以防火墙规则的形式定义任何您喜欢的策略。例如,如果您在某些 Linux 机器上设置 VPN,则只需使用常规 iptablesFORWARD
规则即可。
您也不需要通过 VPN 路由整个 LAN 地址范围 - 您可以完美地通告单主机“/32”路由。(这甚至在 IP 范围发生冲突的情况下也具有优势,因为“/32 via VPN”路由将具有优先权。)
您需要设置路由和防火墙,但只有后者才是真正的安全措施。
我也在工作中使用 VPN,因此可能需要同时访问家庭 VPN 和工作 VPN,可以吗?
理论上是的,只要相关 IP 地址范围不重叠(即使重叠也有可能)。大多数 VPN 客户端的工作方式类似于集成到常规 IP 路由中的普通虚拟网络接口 - 一些网络通过 VPN1,其他网络通过 VPN2,其余网络通过以太网默认网关。
实际上,这在很大程度上取决于您用于工作 VPN 的软件。一些企业 VPN 应用程序除了典型的 IP 路由表之外,还会进行额外的幕后配置(例如,Cisco AnyConnect 会故意阻止本地流量)——有点像您在商业 VPN 服务中发现的“终止开关”功能。
只需允许通过路由器的防火墙从外部访问 SMB 即可。主要担心的是安全性,正确的设置方法是什么?
这可能并不总是奏效,因为一些 ISP 甚至在今天也会阻止 SMB 端口 (139/445),以防止 15 年前基于 Windows SMB 的蠕虫传播。除此之外,“安全性”至少是二单独的关注点:
软件安全性(漏洞):只要您保持更新,Samba 的最新版本应该没问题——以前主要 Windows 存在安全漏洞(尽管大多数漏洞都存在于 Windows 的 SMBv1 服务器代码中,但我也不信任 SMBv2/3 服务器)。话虽如此,但即使对于 Samba,我仍然会使用 AppArmor 作为安全网。
运输安全性(窥探您的数据或密码):这不是很好。让服务器坚持使用 SMBv3 和 SMB 加密是最低要求……但如果您使用 NTLM 身份验证,它仍然不太安全,无法防范窥探。(更不用说它会迅速地成为试图破解 SMB 密码的僵尸网络的热门目标。)
因此,即使服务器是独立的且没有 AD,您仍然需要设置 Kerberos 身份验证以实现任何有意义的安全性。(Kerberos能无需 AD 即可完成,只需使用一个小型 krb5kdc 服务,Windows 客户端就可以与它通信 - 但使用它确实会排除几乎 100% 的 Android 或 iOS 应用程序。)
随着 SMB-over-QUIC 在 Windows 中普遍可用(也许有一天也会在 Samba 中可用,尽管它还需要 100 年才能与非 PC 客户端配合使用),未来情况可能会有所改善。
简而言之,你可能不想暴露 SMB,如果您想从手机应用程序(非 Windows/Linux 系统)进行安全访问,则肯定不行。
安全FTP(SSH 文件传输子协议)在这里是更好的选择,因为即使使用密码验证它也更安全(并且更安全的“公钥”验证更容易设置),并且 OpenSSH 比 Samba 更能抵御攻击。
OpenMediaVault 机器可能已经运行了 SSH 服务器,并且有适用于各种平台的良好 SFTP 客户端 - 例如 Windows 上的 WinSCP。
我还考虑设置一个反向代理(因为我有一些其他资源想从外部访问)并使用域名进行外部访问(如果相关的话)。
反向代理大多只处理 HTTP(S)(有时也处理其他基于 TLS 的服务)。它们可用于公开一两个基于 HTTP 的 Web 应用程序(如 OpenMediaVault Web GUI),但当涉及到 SMB 时,它们无法提供除哑数据中继之外的任何其他功能,与直接公开 SMB 服务器无异。