我曾在黑防上发表过关于如何在防火墙后禁用QQ的文章(见2004第4期),从最基本的原理上来说,禁止QQ通讯的方法也适合于禁止其他IM软件,但因为不同的IM软件使用的IM协议不同,所以在具体操作上又有很大的不同,在这里将说说另一款流行的IM软件MSN Messenger(以下简称MSN)的禁用。与禁用QQ同理,禁用MSN我们也应该从客户端程序的登录方式入手,因为很简单的道理,如果无法登录MSN,那么也就无法使用MSN了。这里将以最新的MSN Messenger 7.0中文BETA版为例讲解。
一、 MSN Messenger客户端登录的方式及相应的禁用措施
MSN Messenger大致有以下几种登录方式:
1,通过MSN Messenger协议进行登录
2,通过HTTP方式进行登录
3,通过HTTP代理登录
4,通过socks4代理登录
5,通过socks5代理登录
下面将分别讲述各种登录方式的基本过程和特点,并给出相应的禁用措施(这里假设你创建的防火墙规则默认是允许所有外出访问的,以使得这篇文章更具通用性)。
(一)最常用的MSN Messenger协议(TCP/1863端口)登录及禁用

客户端使用MSN Messenger协议登录的基本过程如图1所示,这个登录过程可以划分为四个阶段(图中相应的连线),先来看第一阶段:与DS服务器交互(包括下面1-4步):
1, 首先客户端连接到Dispatch Server(DS)服务器的TCP 1863端口上,这个DS服务器的DNS名为messenger.hotmail.com(如果是通过HTTP方式连接,它的名字就是gateway.messenger.hotmail.com,不过它们实际上是一台服务器:207.46.104.20)。从名字可以看出来,DS只是一个负责“调度”任务的服务器;
2, 客户端与DS之间进行MSN Messenger协议的版本协商;
3, 客户端发送本地操作系统的一些系统信息给DS,DS返回推荐的MSN Messenger客户端版本;
4, 客户端初始化用户认证请求,但DS并不负责身份认证的相关事宜,于是它返回一个Notification Server (NS)服务器的地址给客户端,同时DS将主动断开与客户端的连接,也就是叫客户端去找NS进行身份认证,这个NS服务器的DNS名通常为*.msgr.hotmail.com的格式。
第二阶段:与NS交互(下面5-6步)
5, 客户端连接到上面得到的NS的TCP 1863端口,由于DS与NS之间没有连接,所以客户端又需要再次向NS提供上面2,3步类似的操作,
6, 客户端向NS服务器初始化认证请求,NS返回一串用于下面passport认证的字符串;
第三阶段:与PassPort服务器进行认证交互
7, 客户端用户向微软的Passport服务进行身份认证(通过HTTPS方式),认证成功后客户端将得到一个“凭证”;这里要说明的是,真正对用户进行身份鉴定的是微软的passport服务,这些服务器是*.passport.com的形式,passport认证服务并非MSN专用的,很多网站都使用它,比如hotmail邮箱登录。
第四阶段:再次与NS交互
8, 客户端将上面获得的“凭证”给NS看,如果是“真”的NS就说OK,于是用户成功登录进NS,客户端下次登录时可能直接与这个NS通信,而不再与前面的DS联系了。
上面登录的基本过程其实也适用于其他任何登录方式,即都要先与一台DS进行联系,然后与NS联系,中间还要到passport服务器上进行身份认证。从上面的登录过程可以看出,要禁用这种登录方式是很容易的,最简单高效的方法就是直接禁止对207.46.104.20(messenger.hotmail.com)的访问,也可以禁止外访TCP/1863端口,当然还可以禁止对*.msgr.hotmail.com域名集的访问,但不建议禁止对*.passport.com的访问,因为其他的passport验证服务还需要它,比如登录hotmail.com邮箱。从上面的登录过程我们还可以看出,登录使用到了TCP/1863和TCP/443这两个服务器端口,而不仅仅只有TCP/1863端口,这也是很多朋友在允许MSN通信时常犯的一个疑惑:为什么我打开了1863端口还是不能登录?我想现在应该明白了吧:),其实如果你创建规则时是“允许需要的,拒绝所有(其他)的”,那么这里不进行上述禁用操作客户端也不能使用MSN messenger协议进行登录。
(二)HTTP协议登录及禁用
即使你没有明确允许客户端以TCP 1863方式登录,但你会发现客户端仍然能够登录,这是为什么呢?这是因为当客户端不能以MSN Messenger协议进行登录时,它会尝试使用HTTP协议进行登录,以HTTP方式登录时,客户端使用POST命令提交请求,服务器作出相应的应答。图2是客户端的初始请求数据包,它是发往HTTP方式下的DS服务器gateway.messenger.hotmail.com的,这台服务器实际上与messenger.hotmail.com是同一台服务器,
很明显,由于这种登录方式客户端也要联系DS 207.46.104.20,所以简单高效的方法仍然是拒绝访问这个IP地址,当然也可以拒绝对域名gateway.messenger.hotmail.com的访问,不过前者更高效,因为不必进行应用层检查。
(三)HTTP代理登录及禁用
如果局域网内的上网代理服务器本身就支持HTTP代理,只要你在MSN中配置使用HTTP代理,就会登录成功,但如果你像前面一样禁止了访问DS的,那么登录也不会成功,因为HTTP代理服务也会去连接DS的,所以也会被防火墙禁止。但如果MSN使用的HTTP代理不是内网的,而是网外的,那又怎么办呢?通常来说,HTTP代理服务端口是TCP 8080/80等,对于非80端口,我们可以采取禁用相应端口的办法,比如禁止对TCP 8080的访问,但对TCP80就不行了,毕竟我们不可能把它给禁了,除非内网不需要上网,那怎样来对付这种使用80端口代理的呢?一个比较好的方法就是采用HTTP应用层过滤,现在大多数的企业级防火墙都支持这种过滤检查,它的原理就是对应用层数据进行检查以发现其中是否包含某些特征字符串,并采取相应的动作。根据图2,这里应该检查初始HTTP请求报文中是否包含host:gateway.messenger.hotmail.com字符串,企业级防火墙ISA Server 2004是支持HTTP应用层检查的,在ISA 2004中你可以这样操作以达到目的:
进入防火墙规则窗口,右击相应的访问规则(即要在它上面进行HTTP检查的规则),选择configure HTTP,在弹出窗口中切换到signatures标签,点击Add按钮,增加一个签名(特征字符串),如果防火墙检查到有这个特征字符串,就将阻止相应的连接。在这里因为是检查客户端的请求数据包的报头,所以我们在search in栏选择request headers,并在HTTP header和signature栏分别填上头名和要检查的内容,如图3,当你配置完并应用设置之后,你会发现使用外部80端口代理已经不能登录了,在ISA日志中你可以看到拒绝原因及拒绝记录。

但是还是有问题,我们可以对TCP80代理使用应用层检查,对TCP8080进行端口禁用,但对其他端口呢?总不能一个一个地禁用吧,其实,这就要看你创建规则是使用的什么原则了,我们推荐是采用“允许需要的,拒绝所有的”的原则,而不是采用“允许所有的,禁止特定的”原则。因为采用前一种原则,我们就不必特意去禁用某些端口,只要我们不明确开放这些端口就行了。
另外,在ISA2004中,默认情况下ISA只会对内建的HTTP协议(TCP80)进行HTTP过滤检查,如果你创建了一条其他端口的HTTP协议,也可以让ISA对其进行HTTP过滤检查,方法是双击此协议,在其parameters标签下的Applicaton filter栏选中Web proxy filter(如图4)。

(四)socks4和socks5代理登录
Socks4和socks5代理登录与上面的HTTP代理登录类似,如果客户端使用外网的代理,只有封住一些常用的代理端口,比如TCP1080/1813/3128等,但对于这些端口之外的就不好办了,在这里也只有再一次提醒大家使用“允许需要的,拒绝所有的”的原则创建防火墙规则。
(五)其实还应该有一种比较特殊的登录方式,很多人叫它为HTTP隧道,比如现在比较有名的“通通通”,关于“通通通”服务,其网站有明确的解释:““通通通”是一款提供socks via Http转换的网络服务,由运行在客户PC上的客户软件和运行在IDC的后台服务器组成,它可以将Socks5请求封装成HTTP请求,从而帮助您轻易地越过各种防火墙和代理服务器的限制。”由于它转换后的数据是以HTTPS的方式先传给第三方后台服务器的,所以不能对其进行应用层检查(数据加密了),但也不难看出其缺点,因为第一要使用它需要登录,由于它不可能有很多台登录服务器,所以根据sniffer结果很容易禁止相应登录服务器,另外由于它也需要后台服务器的支持,所以通过sniffer禁止这些后台服务器也不是难事,我想它的服务器肯定没有QQ多:)。对于其他这类软件,可以采取上面类似的方法。
二、 结语
通过上面的讨论我们可以简单地总结一下,要禁用MSN,可以采用下面的方法:
1, 首先是尽量采取“允许需要的,拒绝所有(其他)的”的原则创建防火墙规则
2, 拒绝对IP 207.46.104.20的访问
3, 拒绝对TCP 1863的访问
4, 对HTTP进行应用层检查,阻止包含gateway.messenger.hotmail.com的连接
5, 拒绝对常用代理端口的访问,比如TCP 8080/1080/3128
6, 关注常见的HTTP隧道登录,枪打出头鸟,随时拒绝这类服务的登录服务器