在部署分布式 Active Directory™ 目录服务架构时,防火墙会带来两个困难:
- 最初将服务器升级为域控制器。
- 在域控制器之间复制通信。
Active Directory 依靠远程过程调用 (RPC) 进行域控制器之间的复制。(简单邮件传输协议 [SMTP] 虽可用于架构、配置及全局编录复制等环境,但却无法用于域命名上下文,使其用途受到了限制。)在一个目录林分布于内部网络、非军事区 (DMZ)、外部(即面向 Internet)网络的环境中,要使复制顺利进行,并非易事。有三种可能的解决方法:
- 放松防火墙的限制,允许 RPC 的本机动态行为。
- 限制 RPC 使用 TCP 端口,仅略微开放防火墙。
- 将域控制器(DC 到 DC)通信封装在 IP 安全协议 (IPSec) 内,并为此开放防火墙。
每种方法各有优缺点。总的来说,列在前面的方法缺点多于优点,而列在后面的则优点多于缺点。因此,尽管本文对这三种方法都会加以介绍,但因 IPSec 优于另外两种方法,所以将着重介绍它。 完全动态的 RPC
优点
缺点
无需特殊的服务器配置
| 使防火墙变成了“瑞士干酪”(不堪一击)
|
| 随机引入高端口连接
|
| 防火墙配置不安全
|
您当然可以以该方式配置工作环境,但有足够的理由弃之不用,最重要的原因是它会导致网络不安全。不过,这种方法所需的配置工作量最少。 若要通过动态 RPC 启动复制,则应配置防火墙,使其允许:
服务
端口/协议
RPC 终结点映射器
| 135/TCP, 135/UDP
|
网络基本输入/输出系统 (NetBIOS) 名称服务
| 137/TCP, 137/UDP
|
NetBIOS 数据文报服务
| 138/UDP
|
NetBIOS 会话服务
| 139/TCP
|
RPC 动态分配
| 1024-65535/TCP
|
IP 上的服务器消息块 (SMB),即 Microsoft-DS
| 445/TCP, 445/UDP
|
轻量目录访问协议 (LDAP)
| 389/TCP
|
SSL 上的 LDAP
| 636/TCP
|
全局编录 LDAP
| 3268/TCP
|
SSL 上的全局编录 LDAP
| 3269/TCP
|
Kerberos
| 88/TCP, 88/UDP
|
域名服务 (DNS)
| 53/TCP1 , 53/UDP
|
Windows Internet Naming Service (WINS) 解析(如果需要)
| 1512/TCP, 1512/UDP
|
WINS 复制(如果需要)
| 42/TCP, 42/UDP
|
“RPC 动态分配”规则是造成这种方案不安全的原因。该规则有时称为“TCP 高端口”,它要求准许入站通信从任何高于 1023 的端口通过。如果防火墙允许这样做,那这个防火墙也就没有存在的必要了。 如果不想让 DNS 或 WINS 通过,则可用
HOSTS(用于 DNS)和
LMHOSTS(用于 WINS)文件进行名称解析。这些文件存储于
%SystemRoot%\system32\drivers\etc。可查看这些文件,以了解如何使用它们。 RPC 工作原理每项 RPC 服务都会在注册表中为自己配置一个通用的唯一标识符 (UUID)(类似于全局唯一标识符 GUID)。UUID 是一种常用标识符,各项服务都有一个唯一的 UUID,且在所有平台上通用。当一项 RPC 服务启动时,它会获得一个可用的高端口,并以其 UUID 在该端口注册。有些服务随机使用高端口;而有些服务却每次都尽量使用相同的高端口(如果这些高端口可用)。在服务的生存期内,端口的分配是静态的。 当一个客户端要与某特定 RPC 服务通讯时,它无法事先确定该服务在哪个端口上运行。该客户端会先建立一个到服务器端口映射器服务(在 135 上)的连接,并利用该服务的 UUID 请求所需服务。端口映射器会将相应的端口号返回给客户端,然后关闭连接。最后,客户端利用端口映射器提供的端口号,新建一个到该服务器的连接。 由于事先无法获悉 RPC 服务将使用哪个端口,因此防火墙不得不允许所有高端口通过。 有限的 RPC
优点
缺点
仅开放一个高端口,比动态 RPC 更安全
| 修改所有服务器的注册表
|
这种方法更安全,但却需要修改所有域控制器的注册表。可以通过用 Microsoft ® Windows ® 2000 资源工具包中的工具编写脚本这种方式来修改注册表,这样可避免出现配置错误。 必须为 RPC 复制确定一个固定的端口号。Internet Assigned Numbers Authority (IANA) 规定将 49152 - 65535 之间的数字用于专用和动态分配。 使用注册表编辑器,定位到该注册表项: HKEY_LOCAL_MACHINE
SYSTEM\
CurrentControlSet\
Services\
NTDS\
Parameters\ 新添一个名为
TCP/IP Port(包括空格)的 DWORD 值。将该值的数据设为所需的端口号。输入数据前,切记将所显示的数字改为十进制值。对所有 Active Directory 服务器执行此操作。要使更改生效,必须重启这些服务器。 然后,配置防火墙,使其允许:
服务
端口/协议
RPC 终结点映射器
| 135/TCP, 135/UDP
|
NetBIOS 名称服务
| 137/TCP, 137/UDP
|
NetBIOS 数据文报服务
| 138/UDP
|
NetBIOS 会话服务
| 139/TCP
|
用于 AD 复制的 RPC 静态端口
| <fixed-port>/TCP
|
IP 上的 SMB (Microsoft-DS)
| 445/TCP, 445/UDP
|
LDAP
| 389/TCP
|
SSL 上的 LDAP
| 636/TCP
|
全局编录 LDAP
| 3268/TCP
|
SSL 上的全局编录 LDAP
| 3269/TCP
|
Kerberos
| 88/TCP, 88/UDP
|
DNS
| 53/TCP, 53/UDP
|
WINS 解析(如果需要)
| 1512/TCP, 1512/UDP
|
WINS 复制(如果需要)
| 42/TCP, 42/UDP
|
用注册表值中的端口号替换
<fixed-port>。 如前所述,如果不想让 DNS 或 WINS 通过,可用
HOSTS(用于 DNS)和
LMHOSTS(用于 WINS)文件进行名称解析。这些文件存储于
%SystemRoot%\system32\drivers\etc。可查看这些文件,以了解如何使用它们。 该方法仍需要使用终结点映射器,因为客户端无从知道您已给出固定的端口。当客户端请求与 Active Directory 的 RPC UUID 相关联的端口号时,终结点映射器总是返回所设置的固定端口。 下面是一些可导入注册表的文本。这些文本将端口设为 49152。请将其复制到剪贴板,再粘贴到空白的“记事本”屏幕中,然后将该文件以
.REG 扩展名保存,再在 Windows 资源管理器中双击该文件。如果要使用其它端口,请使用 Windows 计算器(科学型)将该值由十进制转换为十六进制。切记,应在该值前填入 4 个 0,如下例所示: Windows 注册表编辑器 5.00 版
[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \NTDS \Parameters]
"TCP/IP Port"=dword:0000c000
封装于 IPSec 内
优点
缺点
提供的防火墙最安全
| 在所有服务器上配置 IPSec 策略
|
域控制器间相互验证
|
|
如果需要,可以设置个性化策略
|
|
需要时,是部署公钥结构 (PKI) 的极好理由
|
|
IPSec 为轻松封装 RPC 通信并携带这种通信穿过防火墙提供了一个好方法。IPSec 不但简化了 RPC 传输,而且因其具有相互验证功能,从而提高了域控制器间的安全性:通过使用 Kerberos 或机器证书,域控制器可以在真正交换信息前就“知道”将与谁通讯。 本文向您介绍如何利用 Microsoft Management Console (MMC) 接口来创建相应的 IPSec 策略。Windows 2000 资源工具包提供了一种工具:
IPSECPOL.EXE,可通过用它编写脚本的方式来创建策略。在准备使用该工具前,一定要通读
IPSECPOL.EXE 文档,并全面理解其内容。因为 IPSECPOL.EXE 与图形用户接口 (GUI) 不同,这个命令行工具几乎没有内置一致性检查。 着手创建策略前,必须先决定:是用证书进行 IPSec 验证,还是用 Windows 2000 内置的 Kerberos2。Kerberos 验证要求两台计算机均处于同一个域中。所以,若要用 Kerberos,就不能在域升级阶段 (DCPROMO) 使用 IPSec,因为此时目标服务器尚不是该域的成员。而点对点隧道协议 (PPTP) 的隧道适用于这种情况,本文将加以介绍。如果不用 Kerberos,而是用证书进行验证,则必须使每个参与 IPSec 复制的域控制器都获得一个证书。
http://www.microsoft.com/windows2000/library/ 中的文档,介绍了如何建立 Windows 2000 证书颁发机构,以及如何为机器证书的自动登记配置域,请参阅这些文档。 若要进行 IPSec 复制和 IPSec 或 PPTP 升级,请配置防火墙,使其允许:
DNS
| 53/TCP, 53/UDP
|
PPTP 的建立(如果使用 PPTP)
| 1723/TCP
|
GRE,一般路由封装(如果使用 PPTP)
| IP 协议 47
|
Kerberos3
| 88/TCP, 88/UDP
|
IKE,Internet 密钥交换
| 500/UDP
|
IPSec ESP,封装的安全有效负载
| IP 协议 50
|
IPSec AH,已验证的标头
| IP 协议 51
|
请注意,IPSec 不通过网络地址转换 (NAT) 设备起作用。由于 IPSec 在计算数据包校验值时使用 IP 地址,所以,如果 IPSec 数据包的源地址是由 NAT 更改的,那么这些 IPSec 数据包会在到达目的地时被丢弃。 通过 PPTP 隧道升级域控制器如果在升级阶段选用 PPTP 隧道,则必须在内部网络中配置路由和远程访问 (RRAS)。RRAS 既可以在内部域控制器上运行,也可以在单独的服务器上运行。为简便起见,RRAS 服务器最好与根域控制器位于同一子网中,这样就不必进行静态路由维护了。 配置 RRAS:
- 选择“开始”、“程序”、“管理工具”、“路由和远程访问”。
- 用鼠标右键单击左侧面板中的服务器,然后单击“配置并启用路由和远程访问”。RRAS 设置向导即会启动。
- 单击“手动配置服务器”。

附件:
您所在的用户组无法下载或查看附件图 1 路由和远程访问向导。 完成该向导,并在向导提示时启动服务。 单击服务器名称旁的 "+" 后,MMC 应如下显示:

附件:
您所在的用户组无法下载或查看附件图 2 配置并启动后的RRAS。配置并启动 RRAS 后,请进行以下更改:
- 用鼠标右键单击服务器,然后单击“属性”。单击“IP”选项卡,再单击“静态地址池”。键入一个 IP 地址范围,该范围应与内部域控制器处于同一子网中。只需要几个地址(可能是 9 个)。关闭所有对话框。

附件:
您所在的用户组无法下载或查看附件- 图 3 服务器属性,IP 地址分配。
- 用鼠标右键单击“端口”(MMC 的左侧面板),然后单击“属性”。配置“直接并行”,使其既不允许远程访问,也不允许请求型拨号连接;如果服务器装有调制解调器(如下例所示),则可进行类似配置。配置“请求拨号 (L2TP)”,使端口数为 0,并且既不允许远程访问,也不允许请求型拨号连接。除非需要五个以上端口,否则不必对“请求拨号 (PPTP)”进行任何更改。关闭所有对话框。

附件:
您所在的用户组无法下载或查看附件图 4 端口属性。 现在,RRAS 已准备好接受入站 PPTP 连接,进行域控制器升级。 在将 DMZ 或外部服务器升级为域控制器之前,应首先建立到内部 RRAS 服务器的 PPTP 隧道。打开“网上邻居”的“属性”页,然后单击“新建连接”。在向导中:
- 单击“通过 Internet 连接到专用网络”。
- 不拨任何初始连接。
- 键入内部 RRAS 服务器的 IP 地址作为目标地址。
- 将连接的可用性设为“所有用户使用此连接”。
- 不共享此连接。
- 按需要命名此连接。
连接对话框即会打开。连接前,请先单击“属性”按钮。单击“选项”选项卡,再单击“包含 Windows 登录域”。然后关闭该对话框。 现在,用企业管理员凭据(根域的管理员)登录到 RRAS 服务器。服务器完成连接后,即可启动 DCPROMO。该过程结束时,DCPROMO 会要求重启;同时断开与 PPTP 隧道的连接。因为不再需要该隧道,所以可删除该连接。 通过 IPSec 和机器证书升级域控制器只要符合下列任何一种情况,即可考虑使用该方法:
- 不想使用 PPTP 进行升级。
- 不想让 Kerberos 穿过防火墙。
- 正在找理由部署 PKI。
必须在域控制器上安装证书,这样它们才能执行 IPSec 验证。所有证书均需要有同一个证书颁发机构的签名。Windows 2000 具有一个“请求注释”(RFC 兼容)证书颁发机构 (CA),能很好地满足这种要求。可以利用组策略对域进行配置,使其自动登记成员计算机的机器证书。虽然 IPSec 可以处理来自任何 CA 的证书,但自动登记要求的是 Windows 2000 CA。如果已拥有一个 PKI,则可以通过颁发 CA 将 Windows 2000 CA 配置为从属 CA。详细信息,请参阅本文档及以前介绍过的演练。 如果决定采用这种方法,还可以选择将 Kerberos 通信包括在 IPSec 中。有些通信类型通常不经由 IPSec 传输模式处理:
- 广播 - IPSec 筛选器无法对其进行分类,因为发件人仅认识部分收件人。
- 多路广播 - 与广播相同。
- 资源保留协议 (RSVP),IP 协议 46 - 肯定不应该经过处理,只有这样才能标记服务质量;但 RSVP 数据包内可以携带 IPSec 数据包。
- Internet 密钥交换 (IKE) - IPSec 用 IKE 建立安全参数,并执行密钥交换。IKE 协商已进行了必要的加密。
- Kerberos - 本机 Windows 2000 验证协议,IPSec 还用它进行计算机验证。Kerberos 本身已经很安全了。
即便 IPSec 筛选器可能指定两台计算机间的所有通信均应进行封装,但上述类型的通信仍会免于处理。 Windows 2000 Service Pack 1 中提供了一个注册表项,可在某种程度上更改这种设置。使用注册表编辑器,并定位到: HKEY_LOCAL_MACHINE
SYSTEM\
CurrentControlSet\
Services\
IPSEC\ 新添加一个名为
NoDefaultExempt 的双字节值 (DWORD),并将其设为 1。可以为下列值: 0: 默认的免于处理适用
1: Kerberos 和 RSVP 均接受 IPSec 处理将某计算机升级为域控制器(并因而成为该域的成员)后,最好将 Kerberos 包含在 IPSec 中。但如果要升级为域控制器的计算机尚不是域成员,则不能使用 Kerberos 建立 IPSec。必须使用其它形式的验证,这正是使用机器证书的原因所在。 可以将下列文本导入注册表。这些文本会将
NoDefaultExempt 的值设为 1。请将这些文本复制到剪贴板,再粘贴到空白的“记事本”屏幕中,然后将该文件以
.REG 扩展名保存,再在 Windows 资源管理器中双击该文件。 Windows 注册表编辑器 5.00 版
[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \IPSEC]
"NoDefaultExempt"=dword:00000001
请在理解这段内容后,再继续阅读本文。如果决定采用该方法,则运行 DCPROMO 之前,还必须按顺序执行下节“针对域控制器间的通讯配置 IPSec 传输模式”中的所有步骤。顺序为:
- 若要在 IPSec 处理过程中包含 Kerberos,则需要添加上述注册表项。
- 安装证书颁发机构。
- 获得所有现有域控制器的证书及所有候选域控制器的机器证书。
- 执行“针对域控制器间的通讯配置 IPSec 传输模式”一节中的步骤。
- 在候选域控制器上运行 DCPROMO。
- 全部完成 - 一切就绪,利用现有 IPsec 配置进行复制。
两种升级方法的比较以下是上述两种方法的区别: PPTP 隧道
- 方便快捷。
- 要求防火墙准许 Kerberos。
- 要求防火墙准许 PPTP。
- 将升级与复制功能分开 - 先配置 PPTP 进行升级,然后再配置 IPSec 进行复制。
具有计算机证书的 IPSec
- 提供部署 PKI 的好理由。
- 允许将 Kerberos 包括在 IPSec 处理过程中。
- 通过防火墙的协议更少 - 没有 PPTP,也可能没有 Kerberos。
- 升级与正在进行的复制一步完成。
虽然很难讲以上两种方法孰优孰劣,不过,具有计算机证书的 IPSec 可能是一种“更有远见”的方法,尤其在大多数单位都打算部署某种 PKI 的情况下,更是如此。 针对域控制器间的通讯配置 IPSec 传输模式现在可以在所有域控制器上配置策略,以便利用 IPSec 传输模式相互通讯了。使用这种配置时,必须只允许 IPSec 及其相关协议穿过防火墙。这种配置非常简单,也更容易支持。请注意,这并非创建 IPSec 隧道。而是利用 IPSec 传输模式 - 端到端 IPSec,来保证服务器间会话的安全。 在每个域控制器上,都必须创建用于复制的 IPSec 策略,以及相应的 IP 筛选器列表和筛选器操作。选择“开始”、“程序”、“管理工具”、“本地安全策略”。

附件:
您所在的用户组无法下载或查看附件图 5 本地安全设置。 接着,单击“本地机器上的 IP 安全策略”(位于 MMC 的左侧面板)。即会显示默认策略,可在此添加一个用于复制的新策略。但必须先创建筛选器列表和筛选器操作。 筛选器列表表明了哪些 IP 地址、端口和协议触发 IPSec 的应用。现在,您只需保证域控制器间所有通信的安全,而无需保护域控制器与其它计算机之间通信的安全。在 MMC 的右侧面板中单击鼠标右键,然后单击“管理 IP 筛选器表和筛选器操作”。即会自动定位到“管理 IP 筛选器列表”选项卡。筛选器列表只是一个筛选器列表;
您应该为每个参与复制的服务器创建一个筛选器。也就是说,只需要一个筛选器列表,而该列表包含了所有域控制器的筛选器。

附件:
您所在的用户组无法下载或查看附件图 6 IP 筛选器列表和筛选器操作,筛选器列表选项卡。 要新建一个筛选器列表,请单击“添加”按钮。将该筛选器列表命名为“DC 复制”。然后单击“添加”按钮,新建一个筛选器,并按照以下步骤完成向导: - 选择“我的 IP 地址”作为源地址。
- 选择“一个特定的 IP 地址”作为目标地址,然后键入其它服务器的 IP 地址。
- 选择“任意”作为协议类型。这会将筛选器配置为两台计算机间的所有通信均携带在 IPSec4 中。
附件: 您所在的用户组无法下载或查看附件
图 7 域控制器复制筛选器列表。 给其余域控制器添加其它筛选器。完成后,关闭对话框。 接着,需要定义一个筛选器操作。单击“管理筛选器操作”选项卡,然后单击“添加”按钮新建一个操作。在向导中: - 将操作命名为“DC 复制”。
- 单击“协商安全”。
- 单击“不与不支持 IPSec 的计算机通讯”。
- 单击“高(封装的安全有效负载)”。
- 选中“编辑属性”复选框(需要以后进行更改)。
- 单击“完成”按钮。
在“属性”对话框中,清除“接受不安全的通讯,但总是用 IPSec 响应”旁的复选框。您肯定不希望服务器对不安全的通讯做出响应。当然,该设置只应用于那些位于相应 IP 筛选器列表中的计算机;您即刻就会将该筛选器列表和筛选器操作与某个策略相链接。关闭所有对话框。
附件: 您所在的用户组无法下载或查看附件
图 8 域控制器复制筛选器操作。 现在,已经为创建 IPSec 策略做好准备。在 MMC 的右侧面板中单击鼠标右键,然后单击“创建 IP 安全策略”。在向导中: - 将策略命名为“域控制器复制”。
- 清除“激活默认响应规则”。
- 确认“编辑属性”复选框已被选中,然后关闭向导。
现在,策略已经存在,但不包含规则。
附件: 您所在的用户组无法下载或查看附件
图 9 域控制器复制 IPSec 策略。 与以前创建的筛选器列表和筛选器操作建立关联,从而创建一条规则。单击“添加”按钮定义新规则。在向导中: - 选中“此规则不指定隧道”。
- 选中“局域网 (LAN)”作为网络类型。 选择一种验证方法 --
- 如果将 PPTP 隧道用于 DCPROMO,则应选中“Windows 2000 默认值(Kerberos V5 协议)”。或
- 如果用的是证书,则选中“使用由此证书颁发机构 (CA) 颁发的证书:”。然后单击“浏览”,并选择颁发了计算机所装机器证书的证书颁发机构。
- 您将会看到一列 IP 筛选器列表。从此列表中选择以前创建的筛选器列表“DC 复制”。
- 还会看到一列筛选器操作。从此列表中选择以前创建的筛选器操作“DC 复制”。
- 不编辑其属性。完成该向导。
现在,您的策略类似于下图(如果选用了该方法,则“身份验证”列会标明“证书”)。
附件: 您所在的用户组无法下载或查看附件
图 10 已完成的域控制器复制策略。 最后,必须启用(即指派)该策略。
附件: 您所在的用户组无法下载或查看附件
图 11 指派域控制器策略。 会立即进行 IPSec 处理。而不必重启服务器。 每个域控制器都需要类似的 IPSec 策略。无论控制器位于内部网络、DMZ 还是外部网络,都必须为其配置 IPSec 策略,使其与其它所有域控制器的所有通讯都经由 IPSec。这样,不仅使知识一致性检查器得以建立一个忽略防火墙的复制拓扑,还可确保各个服务器间所有 IPSec 复制的安全。 测试 IPSec 策略。确定要测试的策略已经创建。在创建某策略,并将其至少指派给两台计算机以后,即可用 IPSECMON.EXE 工具观察计算机何时建立 IPSec 安全关联: - 打开一个命令窗口。
- 发布命令 ipsecmon。即会启动一个图形化工具,列出当前的安全关联,以及有多少已验证和/或已加密的通信通过了该服务器。(除非域控制器已开始进行信息交换,否则目前可能没有任何系统管理员权限。)
- 单击“选项”按钮,然后将刷新频率改为 1 秒。
- 返回到命令提示符, ping 另一个同样具有 IPSec 策略的域控制器。用 -t 标志继续 ping,直到停止 (ping -t ip-address)。
- 查看几个“协商 IP 安全”响应 - 计算机正交换密钥,并建立其安全关联。最后,将看到正常的回复。建立双向安全关联可能需要 10 到 12 秒的时间。
- 按 Ctrl +C 停止建立关联。
进一步锁定 DMZ 中的 DC支持电子商务和外部网络连接的网络,可能需要将域控制器置于 DMZ 中。尽管最初这可能会带来安全隐患,但 IPSec 同样可帮助解决该问题。可以利用 IPSec 规则的许可/阻止功能,创建完善的数据包筛选器。请参阅文档“Using IPSec to Lock Down a Server”,网址为:http://www.microsoft.com/ISN/Columnists/P66703.asp。可结合本文信息及参考文档中的方法,创建一种 IPSec 策略,该策略可以只确保域控制器间通讯的安全,而阻止其它任何通讯到达 DMZ 中的域控制器。 此种 IPSec 用法的合法性尽管 IPSec 的设计者可能未预见到这一问题,但该协议的确已成为封装复杂通信、使其在网络间安全传输的极好方法。Windows 2000 IPSec 策略引擎可用于创建极其完善的规则,以指定主机间所许可的、阻止的或受到保护的通信。本文中,我们利用它保护已知主机(特定的域控制器)间所有通信的安全,同时准许这些主机间的其它通信往来。 有关 Windows 2000 IPSec 的详细信息以及 Windows 2000 的其它安全功能,请参阅 http://www.microsoft.com/windows2000/library/technologies/security/ 和 http://www.microsoft.com/technet/security/。 1 TCP 用来进行区域复制以及每当其回复超过 512 字节时。 2 本文不讨论使用预共享密钥。Windows 2000 包含预共享密钥验证,仅是为了与其它 IPSec 实现方式兼容,并符合 IPSec RFC。鉴于共享式机密样式验证所带来的固有不安全因素,我们坚决反对在产品环境中使用预共享密钥。 3 如果决定使用证书进行 IPSec 验证而不是使用 Kerberos,则可以配置服务器,允许在 IPSec 内部携带 Kerberos 通信。以后的文章中将详细介绍有关内容。无论采用何种验证模式,域控制器之间都需要 Kerberos。 4 即那些不经 IPSec 处理的通信之外的所有通信(如前所述)。