为托管式 Microsoft AD 配置防火墙

由 Managed Service for Microsoft Active Directory 运行的网域控制器公开了许多服务,包括 LDAP、DNS、Kerberos、RPC。根据您的用例,部署在 Google Cloud 上的虚拟机以及在本地运行的机器可能需要访问这些服务才能利用 Active Directory。

为了缩小网域控制器和虚拟机的受攻击面,应使用防火墙禁止任何非必要的网络通信。本文介绍如何配置防火墙以适应常见的 Active Directory 用例,同时禁止其他网络通信。

登录与身份验证

虽然登录和身份验证一词经常互换使用,但它们在 Windows 安全性上下文中具有不同的含义。登录描述了用户正在访问的系统上发生的过程。相反,身份验证由用户账号所在的计算机执行。

当您使用本地账号登录到机器时,登录和身份验证均由目标机器处理。在 Active Directory 环境中,更常见的是使用网域用户登录。在这种情况下,登录由目标机器处理,而身份验证则由网域控制器执行。

要进行身份验证,客户端可以使用 KerberosNTLM。客户端进行身份验证后,目标机器需要处理登录。根据客户端请求的登录类型,可能需要使用不同的协议与网域控制器进行更多交互,例如 Kerberos、NTLM、LDAPRPCSMB

由于身份验证和处理登录需要不同的协议,因此在确定正确的防火墙配置时区分这两个概念会很有帮助。

常见用例

以下各部分介绍访问托管式 Microsoft AD 的常见用例以及需要为每个用例配置的防火墙规则。

如果您不打算将托管式 Microsoft AD 与本地 Active Directory 集成,则只需阅读本文的第一部分,从 VPC 内部访问托管式 Microsoft AD。如果您打算在托管式 Microsoft AD 和本地 Active Directory 之间创建信任关系,则适用整篇文章。

您可以使用防火墙规则日志分析是否可能需要其他端口。由于隐式拒绝入站规则停用了日志记录,因此您必须首先创建一个自定义的低优先级防火墙规则,该规则拒绝所有入站流量,但启用防火墙日志记录。有了这一规则后,任何失败的连接尝试都会导致日志条目发布到 Stackdriver。由于防火墙规则可能会产生大量日志,可以考虑在完成分析后再次停用防火墙日志记录。

从 VPC 内部访问托管式 Microsoft AD

使用默认网络部署托管式 Microsoft AD 时,无需进一步配置即可使 VPC 中的虚拟机能够访问 Active Directory。

如果您已自定义 VPC 配置或防火墙规则,则必须确保防火墙配置仍然允许与托管式 Microsoft AD 通信。以下各部分介绍您可能需要创建的防火墙规则。

域名解析

虚拟机尝试解析 DNS 名称时,不会直接查询网域控制器,而是将 DNS 查询发送到元数据服务器,该元数据服务器是为 Compute Engine 虚拟机配置的默认 DNS 服务器。然后,元数据服务器将查询转发到由托管式 Microsoft AD 创建的 Cloud DNS 专用 DNS 转发地区。此转发地区再将查询转发到适当的网域控制器。

您无需配置任何防火墙规则即可启用此用例。VPC 中的虚拟机始终可以与 Cloud DNS 进行通信,且托管式 Microsoft AD 默认允许来自 Cloud DNS 的转发 DNS 请求。

使用 Kerberos 向虚拟机进行身份验证

已登录一个虚拟机的用户可能需要访问其他虚拟机提供的服务。例如,用户可能尝试打开 RDP 连接、访问文件共享或访问需要身份验证的 HTTP 资源。

为了允许用户使用 Kerberos 向服务器虚拟机进行身份验证,客户端虚拟机必须首先从一个托管式 Microsoft AD 控制器获得适当的 Kerberos 票据。

为了使虚拟机能够使用 Kerberos 向另一个虚拟机进行身份验证,防火墙规则需要允许以下通信:

操作 原类型 协议
1 允许 客户端虚拟机 托管式 Microsoft AD 子网 Kerberos(UDP/88、TCP/88)
LDAP(UDP/389、TCP/389)
2 允许 客户端虚拟机 服务器虚拟机 用于访问虚拟机的协议,例如 HTTP(TCP/80、TCP/443)或 RDP (TCP/3389)
3 允许 服务器虚拟机 托管式 Microsoft AD 子网 请参阅处理登录

使用 NTLM 向虚拟机进行身份验证

尽管在大多数情况下,Windows 会优先使用 Kerberos 而不是 NTLM,但客户端可能偶尔需要回退为使用 NTLM 进行身份验证。NTLM 依赖于直通式身份验证,因此要求服务器与一个托管式 Microsoft AD 网域控制器进行通信以对用户进行身份验证。

为了使虚拟机能够使用 NTLM 向其他虚拟机进行身份验证,防火墙规则需要允许以下通信:

操作 原类型 协议
1 允许 客户端虚拟机 服务器虚拟机 用于访问虚拟机的协议,例如 HTTP(TCP/80、TCP/443)或 RDP (TCP/3389)
2 允许 客户端虚拟机 托管式 Microsoft AD 子网 请参阅处理登录

加入网域和处理登录

要作为网域成员运行并处理来自用户的登录,机器必须能够与 Active Directory 进行交互。所使用的确切协议取决于各个客户端请求的登录类型。为支持所有常见场景,您应该允许以下协议组合。

操作 原类型 协议
1 允许 服务器虚拟机 托管式 Microsoft AD 子网 Kerberos(UDP/88、TCP/88)
NTP (UDP/123)
RPC(TCP/135、TCP/49152-65535)
LDAP(UDP/389、TCP/389)
SMB(UDP/445、TCP/445)
LDAP GC (TCP/3268)

此外,根据具体用例,您可能还需要允许以下协议:

操作 原类型 协议
1 允许 服务器虚拟机 托管式 Microsoft AD 子网 Kerberos 密码更改(UDP/464、TCP/464)
安全 LDAP(TCP/636、TCP/3269)

管理托管式 Microsoft AD

您必须使用已加入域的虚拟机来管理托管式 Microsoft AD。要在此虚拟机上使用诸如 Active Directory 管理中心之类的工具,该虚拟机还必须能够访问由托管式 Microsoft AD 网域控制器公开的 Active Directory Web 服务。

操作 原类型 协议
1 允许 管理虚拟机 托管式 Microsoft AD 子网 AD Web 服务 (TCP/9389)

将托管式 Microsoft AD 连接到本地 Active Directory

要将托管式 Microsoft AD 连接到本地 Active Directory,必须在林之间创建信任关系。此外,您应该在 Google Cloud 和本地环境之间启用 DNS 名称解析。

创建和验证信任

为了创建和验证林信任,托管式 Microsoft AD 网域控制器和本地林的根网域控制器必须能够进行双向通信。

要创建和验证信任,请配置本地防火墙以允许符合以下特征的入站和出站流量:

操作 原类型 协议
1 允许 本地 AD 托管式 Microsoft AD DNS(UDP/53、TCP/53)
Kerberos(UDP/88、TCP/88)
Kerberos 密码更改(UDP/464、TCP/464)
RPC(TCP/135、TCP/49152-65535)
LDAP(UDP/389、TCP/389)
SMB(UDP/445、TCP/445)
2 允许 托管式 Microsoft AD 本地 AD DNS(UDP/53、TCP/53)
Kerberos(UDP/88、TCP/88)
Kerberos 密码更改(UDP/464、TCP/464)
RPC(TCP/135、TCP/49152-65535)
LDAP(UDP/389、TCP/389)
SMB(UDP/445、TCP/445)

托管式 Microsoft AD 已预先配置为允许符合这些特征的流量,因此您无需在 Google Cloud 上配置其他防火墙规则。

从本地解析 Google Cloud DNS 名称

您可以使用两种方式允许本地机器解析托管式 Microsoft AD 中的 DNS 名称:DNS 委派和条件 DNS 转发。

DNS 委派

托管式 Microsoft AD 使用的 DNS 网域可能是本地使用的 DNS 网域的子网域。例如,托管式 Microsoft AD 使用 cloud.example.com,而本地使用 example.com。为了允许本地客户端解析 Google Cloud 资源的 DNS 名称,您可以设置 DNS 委派。

使用 DNS 委派时,解析 Google Cloud 资源 DNS 名称的尝试首先会查询本地 DNS 服务器。然后,DNS 服务器将客户端重定向到 Cloud DNS,后者再将请求转发到一个托管式 Microsoft AD 网域控制器。

将 Cloud DNS 公开到本地网络需要创建入站服务器政策。这将创建一个入站转发器 IP 地址,该地址是您的 VPC 的一部分。

要从本地使用转发器地址,请配置本地防火墙以允许符合以下特征的出站流量。

操作 原类型 协议
1 允许 本地 AD 托管式 Microsoft AD DNS(UDP/53、TCP/53)
Kerberos(UDP/88、TCP/88)
Kerberos 密码更改(UDP/464、TCP/464)
RPC(TCP/135、TCP/49152-65535)
LDAP(UDP/389、TCP/389)
SMB(UDP/445、TCP/445)
2 允许 托管式 Microsoft AD 本地 AD DNS(UDP/53、TCP/53)
Kerberos(UDP/88、TCP/88)
Kerberos 密码更改(UDP/464、TCP/464)
RPC(TCP/135、TCP/49152-65535)
LDAP(UDP/389、TCP/389)
SMB(UDP/445、TCP/445)

条件 DNS 转发

托管式 Microsoft AD 使用的 DNS 网域可能不是本地使用的 DNS 网域的子网域。例如,托管式 Microsoft AD 使用 cloud.example.com,而本地使用 corp.example.local

在 DNS 网域不相关的场景中,可以在本地 Active Directory DNS 中设置条件 DNS 转发。与托管式 Microsoft AD 使用的 DNS 名称匹配的所有查询都将转发到 Cloud DNS。

要使用条件 DNS 转发,您需要先设置启用入站 DNS 转发的 DNS 政策。要从本地使用产生的转发器地址,请配置本地防火墙以允许符合以下特征的出站流量。

操作 原类型 协议
1 允许 本地 AD DNS 转发 IP 地址 DNS(UDP/53、TCP/53)

在 Google Cloud 端,创建防火墙规则以允许符合这些条件的入站流量。

您无需配置任何防火墙规则即可允许从 DNS 转发器到 Cloud DNS (2) 的通信。

从 Google Cloud 解析本地 DNS 名称

托管式 Microsoft AD 使用条件 DNS 转发来解析本地林中的 DNS 名称。为了也允许运行在 Google Cloud 中的客户端解析由本地 Active Directory 管理的 DNS 名称,您可以在 Cloud DNS 中创建专用转发地区,以将查询转发到本地网域控制器。

要启用从 Google Cloud 解析本地 DNS 名称的功能,请根据下表配置本地防火墙以允许入站流量。

操作 原类型 协议
1 允许 托管式 Microsoft AD 本地 AD DNS(UDP/53、TCP/53)
2 允许 Cloud DNS (35.199.192.0/19) 本地 AD DNS(UDP/53、TCP/53)

Google Cloud 默认允许相应的出站流量。

从本地访问托管式 Microsoft AD 资源

如果托管式 Microsoft AD 林设置为信任本地林,则您可能希望本地用户和机器能够访问托管式 Microsoft AD 林中的资源。

使用 Kerberos 从本地向虚拟机进行身份验证

登录到本地机器的用户可能需要访问由运行在 Google Cloud 上并且是托管式 Microsoft AD 林成员的虚拟机提供的服务。例如,用户可能尝试打开 RDP 连接、访问文件共享或访问需要身份验证的 HTTP 资源。

为了允许用户使用 Kerberos 向服务器虚拟机进行身份验证,客户端机器必须获得适当的 Kerberos 票据。这要求与一个本地网域控制器以及一个托管式 Microsoft AD 网域控制器进行通信。

要使本地虚拟机能够使用 Kerberos 进行身份验证,请将本地防火墙配置为允许以下出站流量。

操作 原类型 协议
1 允许 客户端机器(本地) 托管式 Microsoft AD 子网 LDAP(UDP/389、TCP/389)
Kerberos(UDP/88、TCP/88)
2 允许 客户端机器(本地) 服务器虚拟机 (Google Cloud) 应用使用的协议,例如 HTTP(TCP/80、TCP/443)或 RDP (TCP/3389)
3 允许 服务器虚拟机 托管式 Microsoft AD 子网 请参阅处理登录

在 Google Cloud 端,创建防火墙规则以允许 (1) 和 (2) 的入站流量。默认允许到托管式 Microsoft AD (3) 的出站流量。

使用 NTLM 从本地向虚拟机进行身份验证

使用 NTLM 从本地 Active Directory 林向加入托管式 Microsoft AD 林的服务器虚拟机进行用户身份验证时,托管式 Microsoft AD 网域控制器需要与本地网域控制器进行通信。

要使本地虚拟机能够使用 NTLM 进行身份验证,请将本地防火墙配置为允许以下入站和出站流量。

操作 原类型 协议
1 允许 客户端机器(本地) 服务器虚拟机 (Google Cloud) 应用使用的协议,例如 HTTP(TCP/80、TCP/443)或 RDP (TCP/3389)
2 允许 服务器虚拟机 托管式 Microsoft AD 子网 请参阅处理登录
3 允许 托管式 Microsoft AD 子网 本地 AD LDAP(UDP/389、TCP/389)
SMB(UDP/445、TCP/445)

在 Google Cloud 端,创建防火墙规则以允许 (1) 的入站流量。默认允许 (2) 和 (3) 的出站流量。

处理本地林用户的登录

要处理本地林用户的登录,虚拟机需要能够与本地 Active Directory 进行交互。使用的具体协议取决于客户端请求的登录类型。为支持所有常见场景,请配置本地防火墙以允许符合这些特征的入站流量。

操作 原类型 协议
1 允许 服务器虚拟机 (Google Cloud) 本地 AD 子网 Kerberos(UDP/88、TCP/88)
NTP (UDP/123)
RPC(TCP/135、TCP/49152-65535)
LDAP(UDP/389、TCP/389)
SMB(UDP/445、TCP/445)
LDAP GC (TCP/3268)

根据具体用例,您可能还需要允许以下协议:

  • Kerberos 密码更改(UDP/464、TCP/464)
  • 安全 LDAP(TCP/636、TCP/3269)

在托管式 Microsoft AD 端,默认允许相应的出站流量。

在管理虚拟机上,您可能不打算允许来自本地林用户的登录。但是,您可能必须在管理虚拟机上管理组成员资格。每当您使用对象选择器引用本地林中的用户或组时,对象选择器都将需要访问本地网域控制器。为此,管理虚拟机需要具有的本地 Active Directory 网域控制器访问权限应与其处理本地林用户的登录所需的访问权限相同。

从 Google Cloud 访问本地 Active Directory 资源

如果您的本地林设置为信任托管式 Microsoft AD 林,则您可能希望来自托管式 Microsoft AD 林的用户能够访问本地资源。

使用 Kerberos 向本地虚拟机进行身份验证

已登录运行在 Google Cloud 上并且是托管式 Microsoft AD 林成员的虚拟机的用户可能需要访问作为本地林成员的本地机器提供的服务。例如,用户可能尝试打开 RDP 连接、访问文件共享或访问需要身份验证的 HTTP 资源。

为了允许用户使用 Kerberos 向本地机器进行身份验证,虚拟机必须获得适当的 Kerberos 票据。这要求首先与一个托管式 Microsoft AD 控制器进行通信,然后再与本地网域控制器进行通信。

要使本地虚拟机能够使用 Kerberos 进行身份验证,请将本地防火墙配置为允许符合以下特征的入站流量。

操作 原类型 协议
1 允许 客户端虚拟机 (Google Cloud) 托管式 Microsoft AD 子网 Kerberos(UDP/88、TCP/88)
LDAP(UDP/389、TCP/389)
处理登录隐含的协议
2 允许 客户端虚拟机 (Google Cloud) 本地 ADKerberos(UDP/88、TCP/88)
LDAP(UDP/389、TCP/389)
3 允许 客户端虚拟机 (Google Cloud) 服务器机器(本地) 应用使用的协议,例如 HTTP(TCP/80、TCP/443)或 RDP (TCP/3389)

在 Google Cloud 端,默认允许相应的出站流量。

使用 NTLM 向本地虚拟机进行身份验证

使用 NTLM 为托管式 Microsoft AD 林的用户向加入本地林的服务器机器进行身份验证时,本地网域控制器需要能够与托管式 Microsoft AD 网域控制器进行通信:

要使本地虚拟机能够使用 Kerberos 进行身份验证,请配置本地防火墙以允许符合以下特征的入站流量和出站流量。

操作 原类型 协议
1 允许 客户端虚拟机 (Google Cloud) 服务器机器(本地) 应用使用的协议,例如 HTTP(TCP/80、TCP/443)或 RDP (TCP/3389)
2 允许 本地 AD 托管式 Microsoft AD 子网 LDAP(UDP/389、TCP/389)
SMB(UDP/445、TCP/445)

在 Google Cloud 端,默认允许 (1) 的出站流量和 (2) 的入站流量。

处理托管式 Microsoft AD 林用户的登录

要处理托管式 Microsoft AD 林用户的登录,本地运行的机器必须能够与托管式 Microsoft AD 网域控制器进行交互。使用的具体协议取决于客户端请求的登录类型。为支持所有常见场景,您应该允许以下协议组合。

操作 原类型 协议
1 允许 服务器机器(本地) 托管式 Microsoft AD 子网 Kerberos(UDP/88、TCP/88)
NTP (UDP/123)
RPC(TCP/135、TCP/49152-65535)
LDAP(UDP/389、TCP/389)
SMB(UDP/445、TCP/445)
LDAP GC (TCP/3268)

根据具体用例,您可能还需要允许以下协议:

  • Kerberos 密码更改(UDP/464、TCP/464)
  • 安全 LDAP(TCP/636、TCP/3269)

确保本地防火墙允许符合这些特征的出站流量。您无需在 Google Cloud 中配置任何防火墙规则即可允许到托管式 Microsoft AD 的相应入站流量。

在管理机器上,您可能不打算允许来自托管式 Microsoft AD 林用户的登录。但是您可能必须在管理机器上管理组成员资格。每当您使用对象选择器引用托管式 Microsoft AD 林中的用户或组时,对象选择器都将需要访问托管式 Microsoft AD 网域控制器。为此,管理机器需要具有的托管式 Microsoft AD 网域控制器访问权限应与其处理托管式 Microsoft AD 林用户的登录所需的访问权限相同。