我们在测试 GPO 上将“ Microsoft 网络服务器:服务器 SPN 目标名称验证级别”设置为“客户端需要”。
我们的测试系统在它们的主机文件中有一些自定义机器别名,但是一旦打开该选项,我们就不能再使用机器别名访问 SMB 共享。
我一直在努力寻找有关这种互动的信息,所以希望有人能够在这里解释这种互动,是否有办法补救?
我们在测试 GPO 上将“ Microsoft 网络服务器:服务器 SPN 目标名称验证级别”设置为“客户端需要”。
我们的测试系统在它们的主机文件中有一些自定义机器别名,但是一旦打开该选项,我们就不能再使用机器别名访问 SMB 共享。
我一直在努力寻找有关这种互动的信息,所以希望有人能够在这里解释这种互动,是否有办法补救?
这与“主机”文件无关——它破坏了通过与服务器“真实”名称不同的主机名访问的共享。您的结果是正常的,因为这实际上是 GPO 的全部目的。
有问题的 GPO 很像在某些 Web 服务器中发现的 TLS SNI 强制执行:客户端声明“我在这里与服务器 SRV01.EXAMPLE.COM 交谈”并且如果服务器不将该名称识别为虚拟主机之一它服务,它完全拒绝客户。因此,如果客户端声明它想与您的 /etc/hosts 别名之一交谈,但服务器不知道别名,它会拒绝客户端。
Kerberos 已经内置了类似的强制措施(这就是为什么您需要使用 为别名注册 SPN
setspn
),但 GPO 使其更加严格,并将相同的保护扩展到 NTLM。(正如文档页面中已经提到的,这应该防止 NTLM 中继攻击,其中恶意服务器 A 接受 NTLM 身份验证,然后将完全相同的 NTLM 数据包转发到真实服务器 B - 攻击将被阻止,因为服务器 B 会看到“我想从客户端与服务器 A" 交谈。)
仍然可以使用主机别名,但它需要越来越多的注册表旋钮。官方的方法是
netdom computername REALHOST /add:THEALIAS
像在这篇 TechNet 帖子中那样使用,我发现博客帖子声称即使经过严格的 SPN 验证也足以使别名可用,但似乎还不够——至少有一个如果不是它忘记触摸的两个注册表值。NETDOM 为 AD 中的别名注册Kerberos SPN,允许为其获取 Kerberos 票证,类似于手动发出以下两个命令:
这是 Kerberos 所必需的,没有理由不在 AD 环境中使用 Kerberos,因此无论您选择使用 NETDOM 还是手动操作,您都应该注册别名 SPN。
(从技术上讲,SMB 使用“cifs/”主体,但在 AD 中,只要注册了“host/”SPN,它们就会隐式出现。)
然后 NETDOM 在服务器注册表的两个位置添加别名,导致服务器在 AD DNS 中注册其附加名称并通过 NetBIOS 浏览器宣布它们:
路径:
HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters
名称:
AlternateComputerNames
类型:REG_MULTI_SZ
数据:{
thealias.example.com
}路径:
HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
名称:
OptionalNames
类型:REG_MULTI_SZ
数据:{
THEALIAS
}它们似乎对身份验证没有任何影响(甚至没有 Kerberos),所以我相信如果您使用 /etc/hosts 或在 DNS 中创建手动 CNAME 记录,这两者都是完全可选的。
NETDOM没有创建的另一个参数是:
HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
名称:
BackConnectionHostNames
类型:REG_MULTI_SZ
数据:{
thealias.example.com
}这个仅用于“环回”连接,因此通常可能不是绝对必要的,但至少在我的情况下,服务器确实需要连接到自己的别名,因此需要设置。
最后,我发现“SPN 目标名称验证”功能有自己的允许名称列表,必须手动更新 - 否则即使存在上述所有设置,别名也会由于严格的 SPN 验证而被拒绝:
HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
名称: 类型:REG_MULTI_SZ 数据:{ , }
SrvAllowedServerNames
THEALIAS
thealias.example.com
您需要同时列出每个别名的短名称和FQDN——根据我的实验,列出一个并不会自动暗示另一个。
注册 Kerberos SPN 并设置
SrvAllowedServerNames
注册表值后,即使经过严格的目标验证,别名也应该最终正常工作。