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

简介:
举例详解 ISA HTTP 过滤功能
记得当初ISA2004发布时,微软大肆宣传ISA2004带来的各种新特性,其中很有分量的一个就是HTTP过滤。HTTP过滤其实就是ISA能够“理解”HTTP协议的一部分内容,可以根据协议内容对访问请求进行更准确的控制,ISA2004被当作应用防火墙和这个功能有很大的关系。其实一个全功能的应用防火墙对所有的管理员都是一个不可抗拒的诱惑,试想,传统防火墙根据IP和端口限制访问,应用防火墙则可以根据内容限制访问,两者的准确程度根本不在一个档次上。打个比方就象我们要拦截恐怖分子寄来的包裹,传统防火墙是根据包裹的邮寄地址来进行判断,看,这个包裹是伊拉克寄来的,拉出去砍了……这样当然不够准确;应用防火墙则根据包裹内容进行判断,哇,这个包包中居然藏有很多爆炸物,快跑啊!…..
ISA2006HTTP过滤功能基本和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方法来完成。
 
如下图所示,我们阻止了客户机使用HTTPPOST方法,我们看看能否起到作用?
 
在客户机上访问百度的贴吧,准备发个帖子测试一下,如下图所示。
 
测试结果如下图所示,ISAHTTP过滤器拒绝了这个访问请求。
 
阻止方法还可以用于别的用途,例如我们想禁止用户访问代理服务器,就可以考虑阻止CONNECT方法,这样一来用户就不能和Web代理服务器建立连接了。
 
  扩展名
切换到HTTP过滤的“扩展名”标签,如下图所示,我们在此可以阻止通过HTTP协议访问一些具有特定扩展名的文件。如果我们希望阻止用户不小心从网站下载或执行恶意代码,那么就可以在扩展名中阻止*.exe*.vbs*.js*.com等。
 
HTTP过滤中阻止了访问*.exe扩展名后,我们来实验一下,如下图所示,我们在客户机上下载ISA2006180天试用版,下载的文件扩展名是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 类型。
 
  签名
很多文档在介绍ISAHTTP过滤功能时都会重点介绍签名,签名其实就是HTTP数据包中有规律出现的特征数据。我们想阻止一些HTTP应用程序,就可以分析一下这些程序在通讯时有哪些特征数据,然后把这些特征数据以签名的形式提交给ISA,这样ISA就可以阻止这些应用程序了。最典型的例子就是即时通讯软件,如QQMSN等。
XP中自带了一个MSN客户端软件Windows  Messenger,以此软件为例,Windows Messenger登录服务器时有三种方式
使用 MSN Messenger 协议直接连接 MSN 服务器的  1863 端口。
使用 HTTP 协议连接 MSN 服务器的 80 端口。
使用代理服务器连接到 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的访问控制。
















本文转自yuelei51CTO博客,原文链接:http://blog.51cto.com/yuelei/86492 ,如需转载请自行联系原作者

相关文章
|
1月前
|
JSON JavaScript 网络安全
新款HTTP代理工具Proxyman(界面美观、功能强大)
新款HTTP代理工具Proxyman(界面美观、功能强大)
|
4月前
|
XML Java Android开发
Android Studio App开发之网络通信中使用POST方式调用HTTP接口实现应用更新功能(附源码 超详细必看)
Android Studio App开发之网络通信中使用POST方式调用HTTP接口实现应用更新功能(附源码 超详细必看)
60 0
|
8月前
|
存储 Web App开发 网络协议
HTML&CSS Day01 功能元素与HTTP请求协议详解
HTML&CSS Day01 功能元素与HTTP请求协议详解
43 0
HTML&CSS Day01 功能元素与HTTP请求协议详解
|
9月前
|
缓存 负载均衡 算法
【2022】Nginx使用ngx_http_upstream_module实现负载均衡功能
【2022】Nginx使用ngx_http_upstream_module实现负载均衡功能
87 0
|
10月前
|
测试技术
jmeter辅助功能详解(http请求默认值,断言)
jmeter辅助功能详解(http请求默认值,断言)
137 0
|
11月前
|
缓存 应用服务中间件 nginx
重识Nginx - 11 使用ngx_http_proxy_module的proxy_cache搭建一个具备缓存功能的反向代理服务
重识Nginx - 11 使用ngx_http_proxy_module的proxy_cache搭建一个具备缓存功能的反向代理服务
185 0
|
11月前
|
JSON 应用服务中间件 nginx
重识Nginx - 08 使用ngx_http_autoindex_module实现目录浏览功能
重识Nginx - 08 使用ngx_http_autoindex_module实现目录浏览功能
89 0
|
11月前
|
存储 C# 数据库
Qt+QtWebApp开发笔记(四):http服务器使用Session和Cookie实现用户密码登录和注销功能
前面实现了基础的跳转,那么动态交互中登录是常用功能。本篇实现一个动态交互的简单登录和注销功能,在Qt中使用Session和Cookie技术。
|
JavaScript 视频直播 5G
基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能
由于5g网络的光速推广,视频业务又被推上了风口浪尖,在2019年初我们还在谈论照片,短视频等关键字,而进入2020年,我们津津乐道的就只有视频,视频,还是视频,普通人拿起手机做直播早已不是奢望。
基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能