本章要点
◆ Web服务器软件Apache简介
◆ Apache服务器面临的安全问题
◆ 配置一个安全的Apache服务器
6.1 Web服务器软件Apache简介随着网络技术的普及、应用和Web技术的不断完善,Web服务已经成为互联网上重要的服务形式之一。原有的客户端/服务器模式正在逐渐被浏览器/服务器模式所取代。本章将重点介绍Web面临的主要威胁,并结合在Linux中使用最多的Apache服务器,介绍进行Web服务器安全配置的技巧。
6.1.1 Apache的发展历史Apache源自于NCSA(University of Illinois, Urbana-Champaign)所开发的httpd。在1994年中期,许多Web主管自行发展自己的外加功能及修正码。一小批的Web主管通过私人电子邮件聚集在一起来实现他们的改变(以“patches”,即补丁的形式出现)。在1995年2月底,八位核心贡献者成立原始的Apache组织(取自A PAtCHE),1995年4月,Apache 0.6.2公布。
在1995年5月到7月,一个新的服务器架构被开发出来(程序名为Shambhala),包含了模块结构及API。这个服务器架构是基于存储池的存储器配置及要调整的预设分支处理模式开发的。这个开发群体在7月份将此服务器架构转换到新的服务器上,并为Apache 0.7.x新增特色,于8月推出了Apache 0.8.8。在一年之内,Apache服务器超过了NCSA的httpd成为Internet上排名第一的服务器。
Apache的强项是极大的市场占有率:Apache是今天网际网络金字招牌第一号,远远将竞争者抛在后面。特别是,Apache市场占有率表现出几个使对方望尘莫及的优势:
① 起源于HTTP协议——降低了用户加入协议来支援新的应用软件的门槛;
② 给UNIX/Linux带来生机——Apache走到哪里,UNIX/Linux就走到哪里;
③ 支援厂商的支持,为Apache提供的工具/模块持续成长。
特别是IBM宣布将把Apache作为其WebSphere应用服务器的一部分,这一轰动的宣布被商业报纸称为是开放源代码软件的一次突破。
6.1.2 市场情况统计显示,最流行的Web服务器是OSS/FS。比如,Apache就是现在排行第一的Web服务器,其市场份额比位于第二位的IIS高出了一倍多。
1.互联网上Web服务器统计Netcraft在Web服务器上的统计()显示,自从1996年4月以后,Apache就成为了Web服务器领域应用最为广泛的软件。而在此前,使用最广泛的Web服务器是 NCSA Web服务器(这是Apache的前身,也是OSS/FS)。它在1995年8月至1996年3月间占据了Web服务器市场份额第一的位置。从2000年开始,Netcraft就尝试只计算那些“活跃”的Web站点。因为很多Web站点被创建以后并未被使用(比如,虽然注册了域名但并未使用),这样的站点就属于“非活跃”的站点,很显然,这种统计方式更能反映实际的情况。在统计活跃的站点时,2006年6月的数据是Apache占据了61.25%的市场份额,IIS占据了29.71%,而Sun的份额是1.53%,Zeus的份额是0.62%。图6-1反映的是1995年9月至2006年6月,Web服务器市场份额的变化情况(链接)。
图6-1 Netcraft公司统计的Web服务器使用情况
2.商业网站统计E-soft()进行的另外一个独立的调查也显示了Apache在Web服务器领域占有统治地位。截至2006年7月1日该调查把Web服务器进行了细分,共调查了8 676 467个Web服务器,得出商业站点(.com)使用的Apache名列第一,市场份额是70.60%,接下来是IIS(23.93%)。链接,如图6-2所示。
3.安全服务器领域Netcraft报道,Apache已经超越微软成为开发者首选的SSL服务器,有44.0%的加密链接网站使用Apache作为服务器,43.8%使用微软产品。作为SSL协议的最初开发者,Netscape原本拥有最多的市场。但是Netscape的市场份额很快被微软借助IIS所超越,IIS在几年内始终拥有40%~50%的市场。Apache的第一版本不支持SSL,因为美国对加密算法有出口限制,所以开源项目的加密部分必须放到美国境外进行开发,同时必须单独发布。因此许多独立的项目为Apache提供了SSL支持,包括Apache-SSL和mod_ssl。但是当时一些商业版本的SSL模块,比如,c2net的Stronghold更为流行。到了Apache第二版本,mod_ssl被作为默认模块包含进来,Apache开始成为一个流行的SSL服务器。Netcraft关于SSL的调查自从1996年开始跟踪互联网上不断增多的支持SSL的Web服务器所用的服务器软件、操作系统和验证算法( in_ssl_servers.html)。
图6-2 E-soft统计的.com网站使用Web服务器的情况
E-soft也专门对安全的服务器(支持SSL/TLS的Web服务器,比如电子商务站点)进行了调查,即使是在这些领域,Apache的市场份额也有52.07%,而在同一领域中,IIS的份额是39.66%。因为Stronghold是将Apache重新打包以后发行的产品,所以Apache这个领域的实际市场份额应该更多(链接)。
很显然,各个Web服务器的市场份额经常都处于变化之中,最新的情况我们可以查看上述的相关链接。实际上,在最新的数据中,Apache依然遥遥领先。
6.1.3 Apache的工作原理Web系统是客户端/服务器式的,所以应该有服务器程序和客户端程序两部分。常用的服务器程序是Apache;常用的客户端程序是浏览器(如IE、Netscape、Mozilla)。我们可以在浏览器的地址栏内输入统一资源定位地址(URL)来访问Web页面。Web最基本的概念是超文本(Hypertext)。它使得文本不再是传统的书页式文本,而是可以在阅读过程中从一个页面位置跳转到另一个页面位置。用来书写Web页面的语言称为超文本标记语言,即HTML。WWW服务遵从HTTP协议,默认的TCP/IP端口是80,客户端与服务器的通信过程简述如下:
(1)客户端(浏览器)和Web服务器建立TCP连接,连接建立以后,向Web服务器发出访问请求(如get)。根据HTTP协议,该请求中包含了客户端的IP地址、浏览器的类型和请求的URL等一系列信息。
(2)Web服务器收到请求后,将客户端要求的页面内容返回到客户端。如果出现错误,那么返回错误代码。
(3)断开与远端Web服务器的连接。
下面是一个客户端发送给Web服务器请求的数据包的内容:
GET /engineer/ideal/list.htm HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*
Referer:
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Host:
Connection: Keep-Alive
从代码中可以看到,在客户端的请求里包含了很多有用的信息,如客户端类型等。Web服务器会将请求的Web页内容发送返回给客户端。HTTP/1.1说明:HTTP/1.1(超文本链接协议1.1版本)是HTTP协议的最新版本。HTTP协议是运行在TCP/IP协议组上的万维网应用协议。HTTP/1.1提供了比前一版本更快的访问网站速度,同时针对网络资源进行优化,降低了网络流量。HTTP/1.1由互联网工程任务组开发。现在大部分服务器和网站都支持HTTP/1.1协议。
下面是一些HTTP/1.1能够加快网页访问速度的原因。
(1)以往的HTTP协议每次访问应用程序时,都会进行创立及撤销链接的步骤。HTTP/1.1在首次访问网站时建立持久链接,将多个请求批量或通过管道发送到输出缓冲区内。TCP协议允许将多个来自IP层的数据包请求或回复命令集中到一个TCP段中。因此减少了反复建立链接所需的时间,同时由于没有了不必要的申请链接数据包,也降低了网络流量。由于将命令通过管道输送,大大提高了TCP段的效率。总之,网络流量降低了,性能提高了。
(2)当支持HTTP/1.1的浏览器发现网页是未压缩网页时,会将网页进行压缩后进行传输,这样可以节约更多流量空间,不过由于网页中的图片文件一般都已经被压缩过,因此,这种压缩对图片多的网页不太有效。除持久链接及其他改进后的性能之外,HTTP/1.1还允许多个域名共享同一IP地址。这简化了网络服务器对虚拟主机数目管理的处理量。
6.1.4 Apache服务器的特点Apache的主要特征如下。
(1)支持HTTP/1.1协议。Apache是最先使用HTTP/1.1协议的Web服务器之一,它完全兼容HTTP/1.1协议并与HTTP/1.0协议向后兼���。Apache已为新协议所提供的全部内容做好了必要的准备。
(2)支持通用网关接口(CGI)。Apache用mod_cgi模块来支持CGI,它遵守CGI/1.1标准并且提供了扩充的特征,如定制环境变量和很难在其他Web服务器中找到的调试支持功能。
(3)支持HTTP认证。Apache支持基于Web的基本认证,它还为支持基于消息摘要的认证做好了准备。Apache通过使用标准的口令文件DBM SQL调用,或通过对外部认证程序的调用来实现基本的认证。
(4)集成的Perl语言。Perl已成为CGI脚本编程的基本标准。Apache肯定是使Perl成为这样流行的CGI编程语言的因素之一,现在Apache比以往任何时候都更加支持Perl,通过使用它的mod_perl模块你可以将基于Perl的CGI脚本装入内存,并可以根据需要多次重复使用该脚本。这消除了经常与解释性语言联系在一起的启动开销。
(5)集成的代理Proxy服务器。Apache可作为前向代理服务器也可作为后向代理服务器。
(6)服务器的状态和可定制的日志。Apache在记录日志和监视服务器本身状态方面向你提供了很大的灵活性,可以通过Web浏览器来监视服务器的状态,也可根据自己的需要来定制日志。
(7)允许根据客户主机名或IP地址限制访问。
(8)支持CGI脚本,如Perl, PHP等。
(9)支持用户Web目录。Apache允许主机上的用户使用特定的目录存放用户自己的主页。可以通过如下URL地址来访问,如用户zhang,~/zhang。
(10)支持虚拟主机。即通过在一个机器上使用不同的主机名来提供多个HTTP服务。Apache支持包括基于IP、名字和Port三种类型的虚拟主机服务。
(11)支持动态共享对象。Apache的模块可在运行时动态加载,这意味着这些模块可以被装入服务器进程空间,从而减少系统的内存开销。
(12)支持服务器包含命令SSI。Apache提供扩展的服务器包含命令该项功能,为Web站点开发人员提供了更大的灵活性。
(13)支持安全Socket层(SSL)。
(14)用户会话过程的跟踪能力。通过使用HTTP cookies,一个称为mod_usertrack的Apache模块可以在用户浏览Apache Web站点时对用户进行跟踪。
(15)支持FastCGI。Apache使用mod_fcgi模块来实现FastCGI环境,并使FastCGI应用程序运行得更快。
(16)支持Java Servlets。Apache的mod_jserv模块支持Java Servlets该项功能,可使Apache运行服务器的Java应用程序。
(17)支持多进程。当负载增加时,服务器会快速生成子进程来处理,从而提高系统的响应能力。