多年来,微软的互联网信息服务(IIS)Web服务器给许多企业带来了大量的安全问题,包括十二年前臭名昭著的Code Red蠕虫病毒。IIS的一个重要安全隐患是它会默认安装和启用很多功能,比如脚本和虚拟目录等,但这其中的许多功能又被证实是很容易被利用,从而导致重大安全事故。

  几年前发布的IIS 6采用了一种“默认锁定”的方法,即不安装某些功能,或者安装以后将其默认禁用,而最新版本IIS 7则采取了更多措施。Windows Server 2008甚至没有默认安装IIS 7,而在安装的时候,IIS 7网络服务器经过配置后只提供具有匿名身份验证和本地管理的静态内容,虽然生成的只是最简单的网络服务器,但却把受到安全攻击的几率降至最小。

  做到这一点是可能的,因为IIS 7已被完全模块化。让我们简单的研究一下IIS 7更加安全的原因,以及它的安全性是如何实现的。通常而言,管理员可以从40多个单独的功能模块中做出选择,实现完全自定义的安装。通过只安装某个网站所需要的功能,管理员可以大大减小潜在的攻击面,并且节省资源。

  然而,请注意这只适用于清洁安装(clean install)。如果你在运行老版本的IIS,你又要升级你的Windows操作系统,所有的元数据库和IIS状态信息都会被收集并保存。结果,许多不必要的Web服务器功能会在升级时被安装到系统中。因此,企业在升级之后最好重新查看应用程序对IIS功能的依赖性,并卸载不需要的IIS模块。

  更少的组件意味着更少的设置管理,以及更少的问题修补,因为人们只需要维护那些正在使用的模块附属内容。这样可以减少停机时间并提高可靠性。此外,标签混乱的IIS管理控制台已经被更加直观的GUI工具所取代,这让安全设置的可视化更加简单,理解起来也更加容易。比如,如果支持基本身份验证的组件没有安装在你的系统中,该组件的配置设置就不会出现,以免混淆视听。

  那么,安全运行IIS可能需要哪些组件呢?下面列出的九个组件中,运行静态网页以及其他功能的网站都需要前六个;而需要加密服务器与客户端之间数据的人则需要第七和第八项;当你拥有一个Web farm,并且想要farm中每个Web服务器都使用相同的配置文件和加密密钥时,你将需要第九项共享配置:

  1、验证组件,其中包括集成Windows验证、客户端证书验证以及基于ASP.NET格式的验证,这些验证可以让你在应用层上管理客户端注册和验证,而不是依靠Windows账户。

  2、URL验证,它很好地与ASP.NET会员和角色管理整合,然后根据用户名和角色来授权或者拒绝应用程序中的URL,防止没有授权的用户去访问受限制的内容。

  3、IPv4地址和域名规则(Domain Name Rules)提供了基于IP地址和域名的内容访问管理。新属性“allowUnlisted”可以更容易的阻止人们访问所有的IP地址,除非列表中允许。

  4、CGI和ISAPI约束,它们允许你用CGI文件方式(.exe)和ISAPI扩展方式(.dll)启用或禁用动态内容。

  5、请求过滤器,它结合了UrlScan工具中限制HTTP请求类型的功能,IIS 7将会拒绝这些包含可疑数据的请求。像Apache的mod_rewrite属性一样,它可以用正则表达式来阻止攻击或者基于动词、文件扩展名、大小、命名空间和时序的修改请求。

  6、日志,它现在可以提供有关应用程序池、进程、网站、应用程序域和运行请求的实时状态信息,并且能够在整个请求与应答过程中跟踪某个请求。

  7、服务器证书

  8、安全套接层

  9、共享配置

  其他增强IIS 7安全性的功能还包括:Web服务器专用的新型内置用户帐户和组帐户。该功能启用了一个系统之间通用的安全标识符(SID),从而简化了访问控制列表管理,以及应用程序池保护机制(sandboxing)。同时,应用程序管理员可以配置哪些设置,服务器管理员都能完全控制,同时让他们直接在应用程序上做出配置的改变,无需使用管理权限去访问服务器。

  IIS 7与以前的产品相比非常不同,这对用户来说是一件好事。它的设计与创建遵循了经典的安全原则,它为使用Windows系统的企业提供了一个比过去更加安全的、更容易配置和管理的Web服务器。从安全的角度看,它可能还做得不够,还不能动摇Linux和Apache工作站的地位,但是微软的确已经缩小了与它们的差距。管理员可能还需要一段时间来适应新的模块化方式以及管理工具和任务。尽管管理员都熟悉Windows操作系统和框架,但仍需要培训和进行系统测试。