我们设定了“Microsoft 网络服务器:服务器 SPN 目标名称验证级别“在我们的测试 GPO 上将其更改为“客户端所需”。
我们的测试系统在其主机文件中有一些自定义机器别名,但是一旦打开该选项,我们就无法再使用机器别名访问 SMB 共享。
我一直在努力寻找有关这种互动的信息,所以希望有人能够在这里解释这种互动,以及是否有办法补救它?
答案1
这与“hosts”文件无关——它破坏了通过以下方式访问的共享:与服务器“真实”名称不同的主机名。您的结果是正常的,因为这实际上就是 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 中别名的 SPN,允许为其获取 Kerberos 票证,类似于手动发出这两个命令:
setspn -S HOST/THEALIAS REALHOST$ setspn -S HOST/thealias.example.com REALHOST$
这是 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
名称:SrvAllowedServerNames
类型:REG_MULTI_SZ
数据:{THEALIAS
,thealias.example.com
}
您需要列出两个简称和每个别名的 FQDN – 根据我的实验,列出一个并不一定自动暗示另一个。
- 路径:
注册 Kerberos SPN 并SrvAllowedServerNames
设置注册表值后,即使经过严格的目标验证,别名也应该能够正常工作。