举例详解ISA的HTTP过滤功能:ISA2006系列之九

举例详解 ISA HTTP 过滤功能
记得当初 ISA2004 发布时,微软大肆宣传 ISA2004 带来的各种新特性,其中很有分量的一个就是 HTTP 过滤。 HTTP 过滤其实就是 ISA 能够“理解” HTTP 协议的一部分内容,可以根据协议内容对访问请求进行更准确的控制, ISA2004 被当作应用防火墙和这个功能有很大的关系。其实一个全功能的应用防火墙对所有的管理员都是一个不可抗拒的诱惑,试想,传统防火墙根据 IP 和端口限制访问,应用防火墙则可以根据内容限制访问,两者的准确程度根本不在一个档次上。打个比方就象我们要拦截恐怖分子寄来的包裹,传统防火墙是根据包裹的邮寄地址来进行判断,看,这个包裹是伊拉克寄来的,拉出去砍了 …… 这样当然不够准确;应用防火墙则根据包裹内容进行判断,哇,这个包包中居然藏有很多爆炸物,快跑啊! …..
ISA2006 HTTP 过滤功能基本和 ISA2004 完全一样,对于大多数用户来说,最常使用的的服务器就是 Web 服务器,因此了解 ISA2006 中提供的 HTTP 过滤功能对更好地进行访问控制有很大的意义。
ISA Server 2006 究竟能够过滤 HTTP 数据包中的哪些内容,在此列举如下:
头长度的上限。
要求负载长度的上限。
URL 与查询长度的上限。
验证正则化与阻止高位字符
阻止可执行 Windows 命令的数据包通过。
阻止指定的 HTTP 连接方法( Method )。
阻止执行或下载指定的扩展名文件。
阻止指定的请求头或响应头的内容。
阻止包含的签名内容。
看完了上述 HTTP 数据包过滤策略的说明之后,接下来就让我们来看看它的设置方法。目前我的 ISA2006 中只有一条访问规则 Allow all ,内容是允许内网和本地主机任意访问,我们如果想在这条访问规则上设置 HTTP 过滤,只要在规则属性中切换到“协议”标签,如下图所示,点击右下角的“筛选”,选择“配置 HTTP “,就可以进行 HTTP 过滤设置了。
 
常规设置
如下图所示,在 HTTP 策略的“常规“标签中,我们可以设置头长度的上限、负载长度的上限、 URL 长度上限、查询长度、验证正则化与阻止高位字符以及阻止可执行 Windows 命令的数据包通过,具体解释如下:
 
头长度的上限:此参数设置为较小的值可有效防止一些会导致缓冲区溢出的黑客程序的攻击,不过在此不建议设置小于 10000 字节的大小,因为它可能也会导致一些合法的应用程序无法访问。
负载长度的上限:有效地设置此值,可防止企业内部所发布的网站遭受到通过 HTTP 中的 POST 方法传送大量的恶意数据包,而导致网站系统的负载过大。
URL 长度上限:设置超过此设限的网址长度将被阻止掉。
查询长度上限:在过去有一些蠕虫程序就是通过传送大量的 GET 要求给受害的目的地网站,藉此来瘫痪该网站的系统资源。
验证正则化与阻止高位字符:对于一些连接要求的数据包中,如果含有非正则化的字符与高位的内容可以在此加以阻止,不过必须注意的是如果网站是全中文化的,那么阻止高位的设置将会导致该网页无法正常显示,例如中文版 Exchange Server 2003 OWA 的发布就是如此。
阻止包含 Windows 可执行文件内容的响应:还记得最早以前的红色警戒病毒吗?它就是凭借传送带有可执行 Windows 命令( CMD/C )的数据包给目的地的 IIS 网站,来藉此入侵该网站的操作系统。 ISA 现在可以利用 HTTP 过滤有效阻止这种攻击。
 
方法
切换到 HTTP 策略的“方法“标签,如下图所示,我们可以阻止特定的 HTTP 方法。例如有些公司不希望员工在上班时间去论坛发贴子,我们就可以通过阻止 POST 方法来完成。
 
如下图所示,我们阻止了客户机使用 HTTP POST 方法,我们看看能否起到作用?
 
在客户机上访问百度的贴吧,准备发个帖子测试一下,如下图所示。
 
测试结果如下图所示, ISA HTTP 过滤器拒绝了这个访问请求。
 
阻止方法还可以用于别的用途,例如我们想禁止用户访问代理服务器,就可以考虑阻止 CONNECT 方法,这样一来用户就不能和 Web 代理服务器建立连接了。
 
扩展名
切换到 HTTP 过滤的“扩展名”标签,如下图所示,我们在此可以阻止通过 HTTP 协议访问一些具有特定扩展名的文件。如果我们希望阻止用户不小心从网站下载或执行恶意代码,那么就可以在扩展名中阻止 *.exe *.vbs *.js *.com 等。
 
HTTP 过滤中阻止了访问 *.exe 扩展名后,我们来实验一下,如下图所示,我们在客户机上下载 ISA2006 180 天试用版,下载的文件扩展名是 exe
 
结果如下图所示,下载请求被 ISA 过滤器阻止了。
 
HTTP
HTTP 策略属性中切换到“头”标签,如下图所示,我们可以阻止指定的请求头或响应头。
 
下面是一些最常见的请求头,大家可以参考使用。
Accept :浏览器可接受的 MIME 类型。
Accept-Charset
:浏览器可接受的字符集。
Accept-Encoding
:浏览器能够进行解码的数据编码方式,比如 gzip Servlet 能够向支持 gzip 的浏览器返回经 gzip 编码的 HTML 页面。许多情形下这可以减少 5 10 倍的下载时间。
Accept-Language
:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。
Authorization
:授权信息,通常出现在对服务器发送的 WWW-Authenticate 头的应答中。
Connection
:表示是否需要持久连接。如果 Servlet 看到这里的值为 “Keep-Alive” ,或者看到请求使用的是 HTTP 1.1 HTTP 1.1 默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如 Applet ,图片),显著地减少下载所需要的时间。要实现这一点, Servlet 需要在应答中发送一个 Content-Length 头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream ,然 后在正式写出内容之前计算它的大小。
Content-Length
:表示请求消息正文的长度。
Cookie
:这是最重要的请求头信息之一
From
:请求发送者的 email 地址,由一些特殊的 Web 客户程序使用,浏览器不会用到它。
Host
:初始 URL 中的主机和端口。
Pragma :指定 “no-cache” 值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
Referer
:包含一个 URL ,用户从该 URL 代表的页面出发访问当前请求的页面。
User-Agent
:浏览器类型,如果 Servlet 返回的内容与浏览器类型有关则该值非常有用。
UA-Pixels
UA-Color UA-OS UA-CPU :由某些版本的 IE 浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和 CPU 类型。
 
签名
很多文档在介绍 ISA HTTP 过滤功能时都会重点介绍签名,签名其实就是 HTTP 数据包中有规律出现的特征数据。我们想阻止一些 HTTP 应用程序,就可以分析一下这些程序在通讯时有哪些特征数据,然后把这些特征数据以签名的形式提交给 ISA ,这样 ISA 就可以阻止这些应用程序了。最典型的例子就是即时通讯软件,如 QQ MSN 等。
XP 中自带了一个 MSN 客户端软件 Windows  Messenger ,以此软件为例, Windows Messenger 登录服务器时有三种方式
1 使用 MSN Messenger 协议直接连接 MSN 服务器的 1863 端口。
2 使用 HTTP 协议连接 MSN 服务器的 80 端口。
3 使用代理服务器连接到 MSN 服务器的 80 端口。
其中第一种和第二种连接方式是很容易控制的,我们在 ISA 上封掉 MSN 服务器即可,虽然 MSN 服务器数量不少,但毕竟只是时间问题。第三种方法就不太好控制了,访问者通过代理服务器绕到 MSN 服务器上,从 ISA 的角度来看这只是内网的一台客户机访问外网的一台服务器而已。我们不可能封掉所有的代理服务器,这时就要靠签名了,我们要找出 MSN 客户端通过代理服务器访问 MSN 服务器时的特征数据,依靠这个来封掉 MSN
微软网站给出了常用的即时通讯软件的签名,如下表所示。
应用程序名称
搜寻范围
HTTP 头定义
签名内容
MSN Messenger
Request headers
(请求头)
User-Agent:
MSN Messenger
Windows Messenger
Request headers
(请求头)
User-Agent:
MSMSGS
Netscape 7
Request headers
(请求头)
User-Agent:
Netscape/7
Netscape 6
Request headers
(请求头)
User-Agent:
Netscape/6
AOL Messenger
Request headers
(请求头)
User-Agent:
Gecko/
Yahoo Messenger
Request headers
(请求头)
Host
msg.yahoo.com
Kazaa
Request headers
(请求头)
P2P-Agent
Kazaa
Kazaaclient:
Kazaa
Request headers
(请求头)
User-Agent:
KazaaClient
Kazaa
Request headers
(请求头)
X-Kazaa-Network:
KaZaA
Gnutella
Request headers
(请求头)
User-Agent:
Gnutella
Gnucleus
Edonkey
Request headers
(请求头)
User-Agent:
e2dk
Internet Explorer 6.0
Request headers
(请求头)
User-Agent:
MSIE 6.0
Morpheus
Response header
(响应头)
Server
Morpheus
Bearshare
Response header
(响应头)
Server
Bearshare
BitTorrent
Request headers
(请求头)
User-Agent:
BitTorrent
SOAP over HTTP
Request headers
(请求头)
Response headers
(响应头)
User-Agent:
SOAPAction
 
按照表中内容,我们在 ISA 中利用签名封锁 MSN 。在 HTTP 策略属性的“签名”标签处点击“添加”,如下图所示,我们为签名取名为“ MSN ”,查找范围是“请求头”, HTTP 头是“ User-Agent ”,签名内容是“ MSMSGS ”。
 
HTTP 过滤中阻止了 MSN 签名后,再用 Windows Messenger 通过代理服务器登录,原本是可以登录的,现在只能收到如下图的错误提示,签名设置成功了。
 
 
那如果我们要的签名在表中没有怎么办呢?我们可以通过抓包器来抓包分析。以 Windows Messenger 为例,如果我们想获取签名,只要在一台客户机上用 Windows Messenger 登录,然后启动抓包器抓包就可以了。抓包器我一般喜欢用 Ethereal ,其实用 Windows 自带的网络监视器也可以,我们甚至可以用网络监视器抓包,然后用 Ethereal 解码分析。下图就是网络监视器抓到的 Windwos Messenger 登录服务器时的数据包,图中很明显地看到 User-Agent 的内容是 MSMSGS ,这就是我们要的签名。
 
分析签名是比较复杂的,尤其是有些程序的签名会发生改变,例如 QQ ,想要准确地分析签名需要能够熟练使用抓包工具并能深入理解 HTTP 协议。以后有时间我会写篇介绍使用抓包工具的博文,希望大家都能利用好 HTTP 过滤提供的高级功能,做好 ISA 的访问控制。
 

你可能感兴趣的:(方法,扩展名,请求头,ISA2006,http过滤)