此文曾发表于***防线,注意文中提到的QQ服务器IP并非所有的,因为QQ服务器随时都在增加,请大家留意平时的防火墙日志,另外,这篇文章虽然是在ISA上的具...
QQ通讯主要表现在两个方面,一个是客户端与服务器之间的通讯,比如QQ客户端发送登录信息、个人配置信息等到服务器,而服务器返回在线好友、广告、在线好友的IP地址及端口等信息。另一种通讯就是发生在客户端与客户端之间的,比如正常登录后,客户端之间聊天就不再通过服务器转发了,而是客户端之间直接通讯,通常是UDP
4000与UDP 4000端口通信,如果有多个QQ,端口号依次增加,比如UDP 4001、4002等。对于要禁止用户使用QQ,其实我们只关心客户端登录服务器的通讯,因为只要禁止了客户端登录,用户就无法使用QQ了,所以这里要更多地来看看QQ的登录方式。QQ有以下几种登录方式(QQ2000c 1230版以上,这里以最新的QQ2003III buildd0117为例):
1. 最常用的UDP协议登录,客户端使用UDP 4000端口,而服务器则使用UDP 8000端口,图2是常用的7个登录服务器,它们均以sz开头。
2, TCP方式登录,服务器使用TCP80端口(也用TCP 443端口),也就是大多数WEB服务器使用的端口,
现在这种服务器有两个,如图3:

3,会员专用的VIP登录,服务器IP为218.17.209.42和219.133.60.173等,端口是443。
4, Socks5代理登录,通过sock5代理服务器进行登录。
5,HTTP代理登录,通过http代理服务器进行登录。
知道了QQ的登录方式,要禁用QQ就好着手了,从上面可以看出,QQ登录时使用了从网络层到应用层的协议进行登录,所以要有效禁止QQ也应建立一个立体的策略。下面就根据上面不同的登录方式来设置不同的禁止策略。
一.禁止UDP方式登录
对于ISA
Server 2000来说,一个外出访问必须要没有一个协议规则拒绝请求并且要有明确的协议规则允许请求才能被ISA放行,所以对于这种登录方式,首先需要规范ISA Server 2000本身的策略建立原则,即应该只为需要的协议创建允许规则,而不应该创建一种允许全部协议外出的规则,由于拒绝策略将被优先应用,为了提高效率,我们可以创建一条拒绝策略,这里也就是创建一条拒绝对外部UDP 8000端口进行访问的协议规则就行了,用不着再去禁用服务器IP。由于ISA Server 2000中没有预定义UDP 8000这样一条协议,所以需要先创建一条协议。要定义新的协议请右击Policy elements下的Protocol definitions,选择“新建/definition”,协议各项参数如下: Name:Deny UDP 8000 Port 8000 Protocol type:UDP Direction:send receive 完成后再右击Access policy下的Protocol Rule,选择“新建/Rule”,参数如下:Name:DenyQQ8000 Rule action:Deny Protocols:selected
protocols/DenyUDP8000 Schedule:Always Client type:Any request这样就建立了一条禁止客户端使用UDP方式进行登录的协议规则。
二.禁用TCP方式登录
由于这种登录方式使用的是我们平常上网访问的TCP 80或TCP 443端口,所以不能再像上面一样采取禁用端口的方法,但由于这种登录只有两台服务器,所以可以采取禁止访问相应服务器的方式来禁用此种方式登录,同理会员专用的VIP登录也可以采用这种方法来禁用,在ISA Server 2000中的操作步骤如下:
1,创建目标地址集
右击“Policy Elements/Destination sets”,选择“新建/Sets”,增加一个目标地址集(图3中列出的IP和会员登录所用的服务器IP),如图4所示:
最后结果应该如图5所示:

创建站点和内容规则。右击“Access
Policy/site and content rules”,选择“新建/rule”,各项参数如下:name:DQQlogin rule action:deny rule configuration:deny access based . destination destination sets:specified
destination set/(第1步所建的目标地址集名) 另外还可以创建一个目标地址集,参数为图3中的那几个DNS主机(FQDN),并参照上面第2步为它创建一条拒绝类的站点和内容规则。
三. 禁用通过Socks5代理登录
对于socks5代理来说,可以分两种情况来讨论:
1,     socks5代理服务器使用常用的1080(或1813、3128)端口,对于这种情况,我们可以参照一部分禁用UDP 8000端口的方法来禁用UDP 1080、1813、3128端口;
2,     Socks5代理服务器不是使用的周知端口1080、1813或3128
对于这种情况是较难控制的,但如果 ISA
server本身策略原则得当,即只为需要的协议创建了允许规则(比如只创建了允许访问外部的53和80端口),常规方式下QQ仍然不能登录,除非它使用开放的端口与外部通信(比如53或80等),下面将专门讲这种情况。
四.禁用HTTP代理登录
这是很多ISA
Server 2000管理员碰到的一个难题,因为ISA Server 2000本身就有一个Web代理服务,客户端可以把QQ的HTTP代理服务器设为ISA Server 2000的地址,端口设为8080,这样就很容易地用上QQ了,但是只要你按上面(二)部分禁用TCP登录的方式进行了操作,那么QQ是无法通过这个HTTP代理的,因为这种方式的登录最终也是在图3中的服务器上进行登录,当QQ把数据包发送到
ISA Server 2000代理服务时,代理服务会会检查到目标地址是图3中的服务器,所以访问会被禁止。但如果QQ不通过ISA Server 2000的代理而使用外面的代理情况会怎么样呢?这就与你建立的协议规则有关了,在这里仍然强调我们只应该为需要使用的协议创建规则,这样那些没有允许规则的协议就不能外出,比如通常我们不会创建允许TCP 8080端口开放的协议规则,这样QQ就不能使用那些端口为8080的HTTP代理服务器,但对QQ使用端口为80的代理服务器就不好管了,毕竟我们不可能不允许对80端口的访问。难道对于这种情况就没法管了,非也,因为使用HTTP代理服务的数据包有一个很明显的特征就是通常都会使用connect方法,这样只要禁止使用connect方法的HTTP协议数据包通过就行了,要检查HTTP数据包,此时就需要应用程序过滤器来工作了,但在ISA server 2000中,没有内置的Web filter,也就没有能够检查HTTP报头的Web filter了,不过所幸的是在ISA Server 2004中已经有了相应的Web filter,你可以配置Block掉使用connect方法的HTTP数据包,方法是:
1.右击相应规则,选择“configure HTTP”;
2.切换到“Methods”标签,选择“Block specified methods(allow all others)”项,然后点击“Add”按钮;
3.在窗口的“method”中输入connect即可。     如图6。

四.即使你禁止了上面QQ所用的一切登录方式,但是你所做的仍然可能只是竹篮打水一场空。因为客户机可以安装这样一种程序,这种程序本身可以作为一个Socks5服务器(此时需要把QQ的登录方式设置为使用此socks5代理服务器),并且它能够把socks数据包转化成http数据包,然后把转化后的数据包发送到外部一个开放80端口的HTTP服务器上,并在这个服务器上把收到的数据包还原成socks数据包,然后转发至目标服务器(这里是QQ的登录服务器),目标服务器则把响应信息通过原路返回,由于外出的数据包是标准的HTTP数据包(由于不是HTTP代理,所以没有connect语句),所以ISA是允许它外出的。
对于这种登录方式,可以采取下面的方法进行处理。
1.禁止对相应HTTP服务器的访问
由于这种程序需要在外部提供额外的接收服务器,导致程序运行的成本较高,所以这种程序很少,或者都是收费服务,所以这种程序一出来,就会很快流行,当然也就“出名”了,正所谓人怕出名猪怕壮,枪打出头鸟,此时只要封掉这些程序使用的外部服务器就可以了。比如国内现在就有一个叫“通通通”的程序提供这种免费服务,它的原理就与上面所讲一样,通过它几乎可以让一切内网网络程序突破防火墙的限制,要禁止“通通通”,只要封掉其提供服务的HTTP服务器就行了,这里是service.tongtongtong.com、wt.tongtongtong.com和dx.tongtongtong.com三个服务器,禁止方法参照(二)部分。补充:以它们的IP为目标地址集。
2.扫描内网中的socks服务器
采用第一种方法不可避免地会漏掉一些服务提供者,所以可以采用扫描内网中的1080、1813、3128端口的方法来发现使用socks5服务器的人,常用的端口扫描工具有superscan,但是如果使用者更改了程序的服务端口这种方法又难行通了,并且这种工作还必须经常做,如有必要,可以把它列为一天的工作内容之一。
3,     上面都是治标不治本的方法,最根本的方法应该对HTTP数据包进行内容检查,因为这种HTTP数据包中一定会有与QQ相关的数据在里面,比如通常都会有相关登录服务器的数据,只要检查到有这些内容,就可以block掉,不过这种内容检查的功能在ISA 2000中是没有内置的,在ISA 2004中集成了这项功能,它可以禁止含有匹配字符的HTTP内容通过,比如禁止掉含有tencent.com的HTTP内容,这些内容可以位于request URL、request headers、request body、response headers和response body(响应正文)区域中,但这种方法有些副作用,最明显的就是会影响上网的响应速度,但它仍不失为一种较好的方法,不过如果http数据包是加密的,即HTTPS数据包,上述方法也将失效。这种方法在上面图6窗口的signatures(签名)标签中进行设置。
如图7。

上面从防火墙的角度讨论了怎样来禁止内网用户使用QQ,其实我们还可以从另外一个方面来考虑,就是让客户端不能安装QQ,这样不就禁止QQ了吗?如果你的网络是以域的方式组织的,并且客户端用户只有users组的权限(默认情况下应该这样),文件系统也是NTFS格式,这样客户端是没有安装软件的权限的,也就自然不存在使用QQ的问题了。另外本文虽然是对QQ的讨论,但禁止原理对其他即时通信软件或网络游戏同样适用。