Outlook通过RPC或RPC over HTTPS访问Exchane邮箱:Exchange2003系列之四

Outlook 通过 RPC/RPC Over HTTPS 访问 Exchange 邮箱
 
我们在前面的文章中已经介绍了 Exchange 邮箱的创建和配置,现在我们来看看如何访问 Exchange 邮箱。访问邮箱我们可以通过以下方式
A  Outlook 作客户端软件   通过 RPC/RPC Over HTTPS 访问
B  IE 作客户端软件    通过 HTTP/HTTPS 访问
C  Outlook Express 作客户端软件   通过 SMTP/POP3 访问
D  Outlook Express 作客户端软件   通过 IMAP 访问
E  通过 EXIFS 访问
 
从性能和安全考虑,用户倾向于采用 Outlook IE 访问邮箱,这两种方式无论是性能还是安全与其他方式相比明显占优。 Outlook IE 再进行对比,显然号称 Exchange 最佳客户端软件的 Outlook 还是更胜一筹。下面我们就来看看如何用 Outlook 通过 RPC/RPC Over HTTPS 访问 Exchange 邮箱。
 
在完成具体实现方法之前,我们要先了解一下 RPC 协议的特点,然后才能明白为什么很多防火墙管理员对 RPC 很头疼?为什么 RPC 数据包需要封装成 HTTP 格式?
 
RPC 是远端过程调用的缩写, RPC 协议特点很鲜明。普通的基于 Winsock 的网络服务大多有自己的固定端口,比如 FTP 守护 21 HTTP 守护 80 ,但基于 RPC 实现的服务却可以守护随机端口。随机端口?!有没有搞错!客户端程序怎么知道每次随机产生的监听端口是多少?客户端该如何连接服务器呢。为了解决这些问题, RPC 设计成这样的工作方式。首先,每个基于 RPC 的服务都有一个 UUID UUID 是一组 128 位长的数字,被用来区分 RPC 服务。 UUID 的定义是国际标准,跨操作系统。例如 Exchange 信息存储服务的 UUID A 4F 1DB00-CA47-B 31F -00DD010662DA 。每次这些基于 RPC 的服务启动时都会选择一个高端端口进行监听,这个端口可以是随机的,然后这些服务会把自己的 UUID 以及自己这次监听的端口存储在终点映射器( End Point Mapper 简称 EPM )的一个表中 EPM 是专门为 RPC 设计的一个服务,端口是 135 EPM 记录了本机有多少个基于 RPC 的服务以及这些服务监听的高端端口各是多少。
现在假设有一个客户机要访问服务器上的 Exchange 信息存储服务,客户机首先要连接服务器的 135 端口,向 EPM 发起一个查询请求,查询请求中描述了自己所请求服务的 UUID ,此例应是 A 4F 1DB00-CA47-B 31F -00DD010662DA ,然后请 EPM 告知这个服务对应的端口是多少。 EPM 查询后告诉客户机,你所请求的这个服务在 6001 端口监听。客户机接到这个答案后,接下来就会去连接 6001 端口,和 Exchange 信息存储服务胜利会师了!
听了上面的描述,大家就明白了为什么很多防火墙管理员对 RPC 很头疼,就因为 RPC 的动态端口!普通防火墙工作在网络层,传输层的居多,基本上只开放几个固定端口,用来保障网络安全。但如果防火墙后面有 RPC 服务,就麻烦了,为了保证 RPC 服务能被顺利访问,管理员有可能要被迫开放 1024 以上的所有高端端口!但如果开放得这么多,那防火墙也就成筛子了 ….. 所以这个问题直到应用层防火墙问世以后才得以较好解决,例如 ISA 就作得不错,以后我们会给大家介绍,这里就不多说了。
电信部门对 RPC 服务也比较敏感,前两年的冲击波,震荡波等病毒,就是利用了 RPC 的一些漏洞在互联网上大肆传播,危害巨大。电信部门闻风丧胆,唯恐避之不及,干脆采用一刀切的手段,有些运营商把访问 135 端口的数据包直接丢弃,来它个难言之隐,一丢了之。这下运营商省事了,工程师们费事了。所有有时候 Exchange 服务器在内网用 RPC 访问很正常,一放到公网用 RPC 访问就很容易出问题。罪魁祸首其实是后台的运营商,所以工程师们为了应付电信的封锁,想出了给 RPC 包化化妆,封装给 HTTP 包这样的主意。这也是为什么今天我们要尝试用 RPC/RPC Over HTTPS 来访问邮箱的原因。
 
介绍一下今天的实验环境,如下图所示,由三台虚拟机构成, Florence exchtest.com 的域控制器, CA 服务器, Berlin Exchange SP2 Istanbul 是域内的工作站,安装了 Outlook2003 ,用来作访问邮箱的客户机。三台计算机的操作系统都安装了 Win2003 中文企业版, DNS 服务器是我的物理主机 192.168.2.24

 
 
  Outlook 通过 RPC 访问 Exchange 邮箱
 
这个操作很 easy ,只要在客户机上为 Outlook 创建一个正确的配置文件并注意权限问题就可以了,以访问管理员邮箱为例,具体如下
A   Isatnbul 上以 exchtest\administrator 登录,保证登录用户有访问邮箱的权限

 
B  Outlook 创建配置文件,启动 Outlook ,弹出 Outlook 配置向导,点击下一步

 
Outlook 询问是否将 Outlook Express 的邮件账号升级过来,选择“不升级”,下一步

 
Outlook 询问是否要配置一个邮箱账号,当然选“是“,下一步

 
Outlook 询问后台邮件服务器的类型,选择“ Microsoft Exchange Server ”,下一步

 
  
 
接下来我们填写了 Exchange 服务器的完全合格域名 berlin.exchtest.com ,要访问的邮箱是 administrator ,不使用缓存 Exchange 模式,完成配置后登录进入 administrator 的邮箱。

 

我们如何得知 Outlook 的连接状态呢? Outlook Exchange 服务器是用 RPC 连接还是 RPC Over HTTPS 呢,这个问题很简单。按住 Ctrl 键,右键单击屏幕右下角的 Outlook 图标,如下图所示,选择“连接状态”

看看连接状态到底是什么样,如下图所示,现在 Outlook exchange 服务器是靠 RPC 连接的。

 
提示:如果 Outlook 的配置文件有误,导致无法进入邮箱,可利用控制面板-邮件-显示配置文件,删除当前的配置文件。然后重新启动 Outlook Outlook 会提示你创建新的配置文件。
 
  Outlook 通过 RPC Over  HTTPS 访问邮箱
这种邮箱访问方式意味着要将 Outlook 发出的 RPC 数据包封装成 HTTP 格式,然后用 SSL 进行加密,服务器收到加密数据后,先对数据进行解密,再将 HTTP 包还原成 RPC 格式。要达到这个目标,需要以下步骤:
A  Exchange 服务器安装“ HTTP 代理上的 RPC
B  对“ HTTP 代理上的 RPC 进行配置”
C  创建 CA 服务器
D  Exchange 服务器申请证书
E  配置 IIS 的身份验证方式
F  配置客户机上的 Outlook
 
我们从第一步开始
A  Exchange 服务器安装“ HTTP 代理上的 RPC
这是最基本的一步,目的是让 Exchange 服务器有能力对封装在 HTTP 包内的 RPC 数据包进行解封装,将其还原为 RPC 数据包。我们在 Exchange 服务器上,打开控制面板-添加或删除程序-添加 / 删除 Windows 组件,找到网络服务组件,点击详细信息,选择安装“ HTTP 代理上的 RPC ”,如下图所示

 
安装了“ HTTP 代理上的 RPC ”后,在 IIS 的默认 web 站点中多出一个虚拟目录 RPC ,如下图所示, RPC 虚拟目录中有一个 Rpcproxy.dll 的动态链接库。客户机将 RPC 包封装为 HTTP 格式,然后加密后发送到服务器的 RPC 虚拟目录下(这个虚拟目录的名称是约定好的,不能改变),对 HTTP 包进行解封装的工作主要 Rpcproxy.dll 来完成。

 
B  对“ HTTP 代理上的 RPC 进行配置
HTTP 代理上的 RPC ”需要进行什么配置呢,主要是 RPC 端口。“ HTTP 代理上的 RPC ”可以将封装在 HTTP 包内的 RPC 数据解封装出来,但对 HTTP 包内的 RPC 数据包有端口限制,默认情况下,只允许 RPC 数据包的端口范围在 100-5000 。那 Exchange 服务器使用的 RPC 服务端口在不在这个范围内呢?很遗憾,不在。 Exchange 服务器使用的 RPC 服务使用的常用端口有 6001 6002 6004 等,都超出了 100-5000 的范围,所以我们要对“ HTTP 代理上的 RPC ”进行配置,让它将 RPC 端口扩大一些,在本例中,我们将其更改为 100-7000
我们可以通过注册表,也可以通过 win2003 Resource  kit 中的 Rpccfg.exe 进行修改,我们演示一下如何用注册表进行修改,在 Exchange 服务器上运行 Regedit.exe ,定位到 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\RpcProxy\ValidPorts] ,如下图所示:将键值从原来的 BERLIN 100-5000 修改为 BERLIN.EXCHTEST.COM 100-7000 100-7000 大家都理解了,计算机名为什么也要修改呢,这个参数取决于客户机访问服务器时用哪种方式描述服务器,是用 NETBIOS 名称例如 [url]HTTP://Berlin[/url] ,还是完全合格域名例如 [url]HTTP://Berlin.Exchtest.com[/url] ,再或者干脆用 IP 地址。考虑到访问者有可能来源于广域网上,我们决定用完全合格域名来表示。
提醒一下,一旦决定客户机访问服务器是用完全合格域名的方式,那接下来 Exchange 服务器申请证书时,证书名称也要用完全合格域名。

 
顺便介绍一下,我们怎么知道自己机器上的 RPC 服务使用了哪些端口呢?微软的 Resource Kit 工具集中提供了一个 Rpcdump.exe 的工具,我们把它拷贝到 Exchange 服务器上,执行
Rpcdump /v /i ,在输出的结果中可以看到本机注册的 RPC 服务的 UUID 以及端口号,如下图所示:


 
C  创建 CA 服务器
RPC Over HTTPS 意味着 RPC 包被封装成 HTTP 格式后,还要利用 SSL 进行加密处理,这样就需要 web 服务器提供证书, web 服务器的证书从何而来? CA 服务器,所以我们需要在域内部署 CA 服务器。在我们的实验环境中,我们使用 Florence 承担这个角色,在 Florence 上,先确认 IIS 组件已经安装,然后打开控制面板-添加或删除程序-添加 / 删除 Windows 组件,勾选“证书服务”, Windows 弹出窗口警告一旦安装证书服务,计算机名以及计算机角色都不能再进行更改。如下图所示:

接下来选择 CA 服务器类型,由于我们部署的是域中的第一台证书服务器,因此选择了“企业根”类型,由于和 Active Directory 的集成,企业根比独立根更方便。

 
 
接下来输入 CA 的公用名称,在此我们输入 ITETCA ,下一步后需要配置证书数据库的路径,使用默认设置,完成 CA 服务器的安装。


注意: CA 服务器安装完成后, Berlin Istanbul 最好使用 Gpupdate/force 来刷新一下组策略,确保 Florence 已经成为了被信任的证书颁发机构。
 
D  Exchange 服务器申请证书
域内有了 CA 服务器, Exchange 服务器就可以申请证书了,打开管理工具中的 Internet 信息服务( IIS )管理器,右键点击默认网站,选择属性-目录安全性,如下图所示。点击服务器证书


 
 
选择新建证书,准备进行证书申请

选择“立即将证书请求发送到联机证书颁发机构”,这是创建企业根 CA 的好处,在线申请很方便

 
 
输入证书名称以及密钥长度,使用默认设置就可以了

单位及部门信息也不重要,描述性的,随意填写

 
 
证书公用名称,这是关键,要用完全合格域名,和刚才修改注册表时所规定的计算机名要保持一致,客户机访问 Exchange 服务器时也要使用这个计算机名。如果客户机访问服务器使用的格式是 [url]Https://berlin[/url] ,客户机会被提示证书的名称和访问的站点不一致。

接下来填写证书中的地理信息参数, SSL 端口(用默认值 443 ,不要改),选择证书颁发机构,完成申请后默认网站会立即收到颁发的证书。查看一下证书,如下图所示。至此, Exchange 服务器证书申请完成。

 
E  配置 IIS 的身份验证方式
接下来选择 IIS 的身份验证方式,客户机的 Outlook RPC 封装成 HTTP 后,经过 SSL 加密后传到 Exchange 服务器默认网站的 RPC 虚拟目录,由于 Outlook 的访问目标是邮箱,因此 RPC 虚拟目录默认采用的匿名验证方式是肯定不行的。那我们选择哪种验证方式呢?建议最好选择“基本”验证方式,毕竟基本验证是工业标准,不用考虑兼容性问题。那有人要问了,基本验证是采用明文方式传输数据,就不怕安全性方面有问题吗?不用担心,基本验证不能保护数据安全,但 SSL 可以,别忘了 RPC 封装成 HTTP 后还要用 SSL 加密!
打开管理工具- Internet 信息服务( IIS )管理器-默认网站- RPC -属性-目录安全性,如下图,在身份验证和访问控制上选择“编辑”

 
去掉“启用匿名访问”和“集成 Windows 验证”,勾选“基本身份验证,” 确定结束
 

 
F  配置客户机上的 Outlook
最后,我们应该来更改 Outlook 配置了,我们要让 Outlook RPC 包封装成 HTTP 格式。在 Istanbul 上,打开控制面板-邮件-电子邮件账号,如下图所示,选择“查看或更改现有电子邮件账户”

 
这是我们刚刚在 Outlook 中创建的电子邮件账号,选择“更改”

不用更改现有的参数,选择“其他设置”

 
 
选择“连接”标签,勾选“使用 HTTP 连接到我的 Exchange 邮箱”,点击“ Exchange 代理服务器设置”

Exchange 代理服务器处填写 Exchange 服务器的完全合格域名 berlin.exchtest.com ,这个名称和我们申请证书的公用名称以及配置 Exchange 服务器注册表时填写的 RPC 服务器名应该完全一样 。选择无论是在快速网络还是在低速网络, Outlook 都优先使用 HTTP 传送数据,如果不能使用 HTTP 进行传输再尝试使用 RPC 。身份验证方式从 NTLM 更改为基本身份验证,和 RPC 虚拟目录的验证方式一致。

更改完 Outlook 的设置后,启动 Outlook ,出现身份验证窗口,输入用户名和口令,登录进入邮箱


查看 Outlook 的连接状态,如下图所示,连接使用的是 HTTPS ,实验成功!

你可能感兴趣的:(代理,rpc,邮箱,outlook,Exchange2003系列)