发信人: ccaatt()
整理人: ipaq(2001-05-28 15:33:01), 站内信件
|
撰稿人:Steve Riley
Microsoft Telecommunications Practice 顾问
2001 年 3 月
在部署分布式 Active Directory™ 目录服务架构时,防火墙会带来两个困难:
最初将服务器升级为域控制器。
在域控制器之间复制通信。
Active Directory 依靠远程过程调用 (RPC) 进行域控制器之间的复制。(简单邮件传输协议 [SMTP] 虽可用于架构、配置及全局编录复制等环境,但却无法用于域命名上下文,使其用途受到了限制。)在一个目录林分布于内部网络、非军事区 (DMZ)、外部(即面向 Internet)网络的环境中,要使复制顺利进行,并非易事。有三种可能的解决方法:
放松防火墙的限制,允许 RPC 的本机动态行为。
限制 RPC 使用 TCP 端口,仅略微开放防火墙。
将域控制器(DC 到 DC)通信封装在 IP 安全协议 (IPSec) 内,并为此开放防火墙。
每种方法各有优缺点。总的来说,列在前面的方法缺点多于优点,而列在后面的则优点多于缺点。因此,尽管本文对这三种方法都会加以介绍,但因 IPSec 优于另外两种方法,所以将着重介绍它。
完全动态的 RPC
优点 缺点
无需特殊的服务器配置 使防火墙变成了“瑞士干酪”(不堪一击)
随机引入高端口连接
防火墙配置不安全
您当然可以以该方式配置工作环境,但有足够的理由弃之不用,最重要的原因是它会导致网络不安全。不过,这种方法所需的配置工作量最少。
若要通过动态 RPC 启动复制,则应配置防火墙,使其允许:
服务 端口/协议
RPC 终结点映射器 135/TCP, 135/UDP
网络基本输入/输出系统 137/TCP, 137/UDP
(NetBIOS) 名称服务
NetBIOS 数据文报服务 138/UDP
NetBIOS 会话服务 139/TCP
RPC 动态分配 1024-65535/TCP
IP 上的服务器消息块 (SMB) 445/TCP, 445/UDP
即 Microsoft-DS
轻量目录访问协议 (LDAP) 389/TCP
SSL 上的 LDAP 636/TCP
全局编录 LDAP 3268/TCP
SSL 上的全局编录 LDAP 3269/TCP
Kerberos 88/TCP, 88/UDP
域名服务 (DNS) 53/TCP^1 , 53/UDP
Windows Internet Naming Se- 1512/TCP, 1512/UDP
rvice (WINS) 解析(如果需要)
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 内置的 Kerberos^2。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
Kerberos^3 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 配置进行复制。
两种升级方法的比较
以下是上述两种方法的区别:
<H2>PPTP 隧道</H2>
方便快捷。
要求防火墙准许 Kerberos。
要求防火墙准许 PPTP。
将升级与复制功能分开 - 先配置 PPTP 进行升级,然后再配置 IPSec 进行复制。
<H3>具有计算机证书的 IPSec</H3>
提供部署 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 地址。
选择“任意”作为协议类型。这会将筛选器配置为两台计算机间的所有通信均携带在 IPSec^4 中。
图 7 域控制器复制筛选器列表。
给其余域控制器添加其它筛选器。完成后,关闭对话框。
接着,需要定义一个筛选器操作。单击“管理筛选器操作”选项卡,然后单击“添加”按钮新建一个操作。在向导中:
将操作命名为“DC 复制”。
单击“协商安全”。
单击“不与不支持 IPSec 的计算机通讯”。
单击“高(封装的安全有效负载)”。
选中“编辑属性”复选框(需要以后进行更改)。
单击“完成”按钮。
在“属性”对话框中,清除“接受不安全的通讯,但总是用 IPSec 响应”旁的复选框。您肯定不希望服务器对不安全的通讯做出响应。当然,该设置只应用于那些位于相应 IP 筛选器列表中的计算机;您即刻就会将该筛选器列表和筛选器操作与某个策略相链接。关闭所有对话框。
图 8 域控制器复制筛选器操作。
现在,已经为创建 IPSec 策略做好准备。在 MMC 的右侧面板中单击鼠标右键,然后单击“创建 IP 安全策略”。在向导中:
将策略命名为“域控制器复制”。
清除“激活默认响应规则”。
确认“编辑属性”复选框已被选中,然后关闭向导。
现在,策略已经存在,但不包含规则。
图 9 域控制器复制 IPSec 策略。
与以前创建的筛选器列表和筛选器操作建立关联,从而创建一条规则。单击“添加”按钮定义新规则。在向导中:
选中“此规则不指定隧道”。
选中“局域网 (LAN)”作为网络类型。
选择一种验证方法 --
如果将 PPTP 隧道用于 DCPROMO,则应选中“Windows 2000 默认值(Kerberos V5 协议)”。或
如果用的是证书,则选中“使用由此证书颁发机构 (CA) 颁发的证书:”。然后单击“浏览”,并选择颁发了计算机所装机器证书的证书颁发机构。
您将会看到一列 IP 筛选器列表。从此列表中选择以前创建的筛选器列表“DC 复制”。
还会看到一列筛选器操作。从此列表中选择以前创建的筛选器操作“DC 复制”。
不编辑其属性。完成该向导。
现在,您的策略类似于下图(如果选用了该方法,则“身份验证”列会标明“证书”)。
图 10 已完成的域控制器复制策略。
最后,必须启用(即指派)该策略。
用鼠标右键单击“DC 复制”策略。
单击“指派”。
图 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 处理的通信之外的所有通信(如前所述)。
|
|