![在 Windows 上全局禁用 Kerberos 的反向 DNS 查找?](https://linux22.com/image/746282/%E5%9C%A8%20Windows%20%E4%B8%8A%E5%85%A8%E5%B1%80%E7%A6%81%E7%94%A8%20Kerberos%20%E7%9A%84%E5%8F%8D%E5%90%91%20DNS%20%E6%9F%A5%E6%89%BE%EF%BC%9F.png)
我知道,在 Kerberos 身份验证期间计算被调用服务器的 SPN 时,可以禁用单个客户端应用程序进行的反向 DNS 查找。有多种方法,例如:
- 在 Java 中:Java + Kerberos - 禁用反向 DNS 查找。
- 使用 MIT Kerberos 实现时:主体名称和 DNS- 搜索
rdns = false
。
我的问题是,是否可以在全球范围内的 Windows(即 Windows 10)客户端计算机上以某种方式实现这一点 -适用于所有应用。以下变体似乎不是一个解决方案:
- 告诉 Windows 不要进行反向查找。我检查过MS Kerberos 注册表文档但我在那里看不到这样的场景。
- 告诉 Windows / Windows 中的所有应用程序改用 MIT 实现。似乎有一些特殊设置(例如在 PuTTY 或 Firefox 中)可以选择具体的 GSSAPI/Kerberos 实现。但是其他应用程序(例如 Chrome 或 Windows 网络磁盘映射器)怎么办?
- 理论性太强但不实用:更改、重新编译和部署负责查找的 Windows 硬连线部分。
答案1
不幸的是,没有。使用krb5.conf
样式配置的实现可以使用 [1] 之类的指令dns_canonicalize_hostname = false
,并且内置 javakrb5.conf
确实支持此指令。但当然 90% 的客户端都是 Windows,因此 akrb5.conf
是无关紧要的。
那么 Windows 会怎么做呢?虽然 Windows 本身不执行 DNS 规范化,但 Windows 库和应用程序经常会执行。例如,非 Chromium Windows 客户端将执行 Kerberos DNS 规范化。因此,Chrome 和 Firefox 等各种浏览器都遵循了这种行为。
Kerberos DNS 匿名化的工作原理:
客户端需要 SPN 才能获取服务票证。例如,对于 HTTP,它应该只使用 URL 中的主机名https://www.example.com
来创建 SPN,例如。如果您在同一 IP 后面运行 10 个站点,这意味着您需要在帐户上为、、、、 等HTTP/www.example.com
设置 SPN 。HTTP/as1.example.com
HTTP/as1b.example.com
HTTP/as1
HTTP/dev3.example.corp
但是,这不是 Kerberos 客户端默认执行的操作。默认情况下,它们使用 DNS 将 URL 主机名扩展为 FQDN(根据需要添加域后缀)。然后,它们执行反向 DNS PTR 查找以获取 IP 的规范 FQDN 主机名。该主机名用于构建 SPN 以请求 Kerberos 票证。因此,由同一 IP 托管的所有主机名都将转换为一SPN 之类的HTTP/s3US-66.example.corp
。
对于 Windows 上基于 Chromium 的浏览器,Chrome 中有一个设置DisableAuthNegotiateCnameLookup
可以关闭 DNS 匿名化。但这必须应用于整个站点,这意味着所有现有的 HTTP 服务都必须为 URL 中使用的所有主机名添加 SPN。许多管理员会拒绝这样做,因为这太麻烦了。
有关基于 Chromium 的浏览器中此过程的更详细说明,请参阅本页上的 Kerberos SPN 生成部分:
https://www.chromium.org/developers/design-documents/http-authentication/
因此,现在几乎不可能从同一 IP 获得多个独立的 Kerberos 配置。Kerberos 客户端 DNS 规范化会在 IP 和在该 IP 后面运行的所有应用程序之间创建依赖关系。这不是我们现在部署应用程序的方式。如果您部署 Docker 应用程序,您必须知道该服务器的 Kerberos 配置适合您的应用程序,并且这假定您甚至可以访问现在必须共享的 kerberos 配置/密钥。您应该能够将应用程序从一个主机移动到另一个主机,而无需更改它用于接受身份验证的帐户。
另请注意,如果 DNS 可能被毒化,则 Kerberos 客户端 DNS 规范化会带来安全风险。
注意:这不是 Microsoftizm。MIT 使用相同的默认行为。
[1]https://web.mit.edu/kerberos/krb5-latest/doc/admin/princ_dns.html