HTTP服务器Apache

  Apache,一种开放源码的HTTP服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性(注1)被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,Perl/Python等解释器可被编译到服务器中。 Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。相传阿帕奇是一个武士,他英勇善战,且战无不胜,被印第安人奉为勇敢和胜利的代表,因此后人便用他的名字为印第安部落命名,而阿帕奇族在印第安史上也以强悍著称。

  Apach发展历史

  提到Apach服务器,就不得不提到Apache软件基金会。Apache软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为运作一个开源软件项目的 Apache 的团体提供支持的非盈利性组织,这个开源软件项目就是 Apache 项目。这个组织把自己作为有着相同目标的开发者与用户的团体,而不是简单的共享在一个服务器上的一组项目的组织团体。在它所支持的 Apache 项目与子项目中,所发行的软件产品都遵循 Apache许可证(Apache License)。

  Apache软件基金会(ASF)正式创建于1999年,它的创建者是一个自称为“Apache 组织”的群体。这个“Apache 组织”在1999年以前就已经存在很长时间了,这个组织的开发者爱好们聚集在一起,在美国伊利诺斯大学超级计算机应用程序国家中心(National Center for Supercomputing Applications,简称为NCSA)开发的 NCSA HTTPd 服务器的基础上开发与维护了一个叫 Apache 的 HTTP服务器。

  最初 NCSA HTTPd 服务器是由 Rob McCool 开发出来的,但是它的最初开发者们逐渐对这个软件失去了兴趣,并转移到了其他地方,造成了没有人来对这个服务器软件提供更多的技术支持。因为这个服务器的功能又如此强大,而代码可以自由下载修改与发布,当时这个服务器软件的一些爱好者与用户开始自发起来,互相交流并分发自己修正后的软件版本,并不断改善其功能。为了更好进行沟通,Brian Behlendorf 自己建立了一个邮件列表,把它作为这个群体(或者社区)交流技术、维护软件的一个媒介,把代码重写与维护的工作有效组织起来。这些开发者们逐渐地把他们这个群体称为“Apache 组织”,把这个经过不断修正并改善的服务器软件命名为 Apache 服务器(Apache Server)。由此看来,Apache的诞生极富有戏剧性。

  这个命名是根据北美当地的一支印第安部落而来,这支部落以高超的军事素养和超人的忍耐力著称,19世纪后半期对侵占他们领土的入侵者进行了反抗。为了对这支印第安部落表示敬仰之意,取该部落名称(Apache)作为服务器名。但一提到这个命名,这里还有流传着一段有意思的故事。因为这个服务器是在 NCSA HTTPd 服务器的基础之上,通过众人努力,不断地修正、打补丁(Patchy)的产物,被戏称为“A Patchy Server”(一个补丁服务器)。在这里,因为“Patchy”与“Apache”是谐音,故最后正式命名为“Apache Server”。

  自由软件开发Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站如Amazon.com、Yahoo!、W3 Consortium、Financial Times等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。

  开始,Apache只是Netscape网页服务器(现在是Sun ONE)的之外的开放源代码选择。渐渐的,它开始在功能和速度。超越其他的基于Unix的HTTP服务器。1996年4月以来,Apache一直是Internet上最流行的HTTP服务器: 1999年5月它在 57% 的网页服务器上运行;到了2005年7月这个比例上升到了69%。在2005年11月的时候达到接近70%的市占率,不过随着拥有大量域名数量的主机域名商转换为微软IIS平台,Apache市占率近年来呈现些微下滑。而Google自己的网页服务器平台GWS推出后,加上Lighttpd这个轻量化网页服务器软件使用的网站慢慢增加,反应在整体网页服务器市占率上,根据netcraft在2007年7月的最新统计数据,Apache的市占率已经降为52.65%,8月时又滑落到50.92%。尽管如此,它仍旧是现阶段因特网市场上,市占率最高的网页服务器软件。

  Apache web服务器软件主要特点:

  ◆支持最新的HTTP/1.1通信协议。Apache是最先使用HTTP/1.1协议的Web服务器之一,它完全兼容HTTP/1.1协议并与HTTP/1.0协议向后兼容。Apache已为新协议所提供的全部内容做好了必要的准备。

  ◆拥有简单而强有力的基于文件的配置过程。

  ◆支持通用网关CGI接口。Apache用mod_cgi模块来支持CGI,它遵守CGI/1.1标准并且提供了扩充的特征,如定制环境变量和很难在其他Web服务器中找到的调试支持功能。

  ◆支持基于IP和基于域名的虚拟主机。

  ◆支持多种方式的HTTP认证。

  ◆集成Perl处理模块。Perl已成为CGI脚本编程的基本标准。Apache肯定是使Perl成为这样流行的CGI编程语言的因素之一,现在Apache比以往任何时候都更加支持Perl,通过使用它的mod_perl模块你可以将基于Perl的CGI脚本装入内存,并可以根据需要多次重复使用该脚本。这消除了经常与解释性语言联系在一起的启动开销。

  ◆集成代理服务器Proxy服务器。Apache可作为前向代理服务器也可作为后向代理服务器。

  ◆支持实时监视服务器状态和定制服务器日志。Apache在记录日志和监视服务器本身状态方面向你提供了很大的灵活性,可以通过Web浏览器来监视服务器的状态,也可根据自己的需要来定制日志。

  ◆支持服务器端包含指令(SSI)。Apache提供扩展的服务器包含命令该项功能,为Web站点开发人员提供了更大的灵活性。

  ◆支持安全Socket层(SSL)。

  ◆提供用户会话过程的跟踪。通过使用HTTP cookies,一个称为mod_usertrack的Apache模块可以在用户浏览Apache Web站点时对用户进行跟踪。

  ◆支持FastCGI。Apache使用mod_fcgi模块来实现FastCGI环境,并使FastCGI应用程序运行得更快。

  ◆通过第三方模块可以支持Java Servlets。Apache的mod_jserv模块支持Java Servlets该项功能,可使Apache运行服务器的Java应用程序。

  ◆如果你准备选择Web服务器,毫无疑问Apache是你的最佳选择。

  ◆可以运行在所有计算机平台上。

  ◆支持虚拟主机。即通过在一个机器上使用不同的主机名来提供多个HTTP服务。Apache支持包括基于IP、名字和Port三种类型的虚拟主机服务。

  ◆支持HTTP认证。Apache支持基于Web的基本认证,它还为支持基于消息摘要的认证做好了准备。Apache通过使用标准的口令文件DBM SQL调用,或通过对外部认证程序的调用来实现基本的认证。

  ◆支持用户Web目录。Apache允许主机上的用户使用特定的目录存放用户自己的主页。可以通过如下URL地址来访问。

  ◆支持动态共享对象。Apache的模块可在运行时动态加载,这意味着这些模块可以被装入服务器进程空间,从而减少系统的内存开销。

  ◆支持多进程。当负载增加时,服务器会快速生成子进程来处理,从而提高系统的响应能力。

  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服务器的连接。

  Apache服务器面临的安全问题

  为了保护Web服务器不被恶意攻击和破坏,第一步就是要了解和识别它所面临的安全风险。以前,Web站点仅仅提供静态的页面,因此安全风险很少。恶意破坏者进入这类Web站点的唯一方法是获得非法的访问权限。

  近年来,大部分Web服务器不再提供静态的HTML页面,它们提供动态的内容,许多Web站点与颇有价值的客户服务或电子商务活动应用结合在一起(这也是风险所在,通常不注意的)。

  1)HTTP拒绝服务

  攻击者通过某些手段使服务器拒绝对HTTP应答。这使得Apache对系统资源(CPU时间和内存)需求剧增,最终造成系统变慢甚至完全瘫痪。Apache服务器最大的缺点是,它的普及性使它成为众矢之的。Apache服务器无时无刻不受到DoS攻击的威胁。主要包括以下几种形式。

  - 数据包洪水攻击。一种中断服务器或本地网络的方法是数据包洪水攻击,它通常使用Internet控制报文协议(ICMP)包或是UDP包。在最简单的形式下,这些攻击都是使服务器或网络的负载过重,这意味着黑客的网络速度必须比目标的网络速度要快。使用UDP包的优势是不会有任何包返回到黑客的计算机。而使用ICMP包的优势是黑客能让攻击更加富于变化,发送有缺陷的包会搞乱并锁住受害者的网络。目前流行的趋势是黑客欺骗目标服务器,让其相信正在受到来自自身的洪水攻击。

  - 磁盘攻击。这是一种更残忍的攻击,它不仅仅影响目标计算机的通信,还破坏其硬件。伪造的用户请求利用写命令攻击目标计算机的硬盘,让其超过极限,并强制关闭。这不仅仅是破坏,受害者会遭遇不幸,因为信息会暂时不可达,甚至丢失。

  - 路由不可达。通常,DoS攻击集中在路由器上,攻击者首先获得控制权并操纵目标机器。当攻击者能够更改路由器的路由表条目的时候,会导致整个网络不可达。这种攻击是非常阴险的,因为它开始出现的时候往往令人莫名其妙。毕竟,你的服务器会很快失效,而且当整个网络不可达,还是有很多原因需要详审的。

  - 分布式拒绝服务攻击。最有威胁的攻击是分布式拒绝服务攻击(DDoS)。当很多堡垒主机被感染,并一起向你的服务器发起拒绝服务攻击的时候,你将伤痕累累。繁殖性攻击是最恶劣的,因为攻击程序会不通过人工干涉蔓延。Apache服务器特别容易受攻击,无论是对分布式拒绝服务攻击还是隐藏来源的攻击。为什么呢?因为Apache服务器无处不在。在万维网上分布着无数的Apache服务器,因此为Apache定制的病毒(特别是SSL蠕虫)潜伏在许多主机上;带宽如今已经非常充裕,因此有很多的空间可供黑客操纵。蠕虫攻击利用服务器代码的漏洞,通过SSL握手将自己安装在Apache服务器上。黑客利用缓冲溢出将一个伪造的密钥安装在服务器上(适用于运行低于0.9.6e版本的OpenSSL的服务器)。攻击者能够在被感染的主机上执行恶意代码,在许多这样的病毒作用下,下一步就是对特定的目标发动一场浩大的分布式拒绝服务攻击了。通过将这样的蠕虫散播到大量的主机上,大规模的点对点攻击得以进行,对目标计算机或者网络带来不可挽回的损失。

  2)缓冲区溢出

  攻击者利用CGI程序编写的一些缺陷使程序偏离正常的流程。程序使用静态分配的内存保存请求数据,攻击者就可以发送一个超长请求使缓冲区溢出。比如,一些Perl编写的处理用户请求的网关脚本。一旦缓冲区溢出,攻击者可以执行其恶意指令。

  3)攻击者获得root权限

  如果Apache以root权限运行,系统上一些程序的逻辑缺陷或缓冲区溢出的漏洞,会让攻击者很容易在本地获得Linux服务器上管理员root权限。在一些远程的情况下,攻击者会利用一些以root身份执行的有缺陷的系统守护进程来取得root权限,或利用有缺陷的服务进程漏洞来取得普通用户权限,用以远程登录服务器,进而控制整个系统。

  如何配置一个安全的Apache服务器

  1)勤打补丁。使用最高和最新的安全版本对于加强Apache Web服务器的安全是至关重要的。将你的OpenSSL升级到0.9.6e或者更高版本,伪造的密钥将起不了任何作用,也不能渗透到系统里。

  2)隐藏和伪装Apache的版本。通常,软件的漏洞信息和特定版本是相关的,因此,版本号对黑客来说是最有价值的。默认情况下,系统会把Apache版本模块都显示出来(http返回头)。所以,安装完Apache服务器之后,最好隐藏和伪装Apache的版本号。

  3)建立一个安全的目录结构。

  4)为Apache使用专门的用户和用户组。按照最小特权原则,给Apache分配一个合适的权限,让其能够完成Web服务。最小特权原则是系统安全中最基本的原则之一,它限制了使用者对系统及数据进行存取所需要的最小权限,既保证了用户能够完成所操作的任务,同时也确保非法用户或异常操作所造成的损失最小。 必须保证Apache使用一个专门的用户和用户组,不要使用系统预定义的账号,比如nobody用户和nogroup用户组。

  5) Web目录的访问策略。对于可以访问的Web目录,要使用相对保守的途径进行访问,不要让用户查看任何目录索引列表。

  - 禁止使用目录索引;

  - 禁止默认访问;

  - 禁止用户重载。

  6)Apache服务器访问控制方法

  7)管理Apache服务器访问日志

  - 相关配置文件说明。

  - Web服务器日志轮循。Web服务器日志轮循比较好的方式有三种:第一种方法是利用Linux系统自身的日志文件轮循机制logrotate;第二种方法是利用Apache自带的日志轮循程序rotatelogs;第三种是使用在Apache的FAQ中发展已经比较成熟的日志轮循工具cronolog。对于大型的Web服务器来说,往往使用负载均衡技术提高Web站点的服务能力,这样后台有多个服务器提供Web服务,大大方便了服务的分布规划和扩展。如果有多个服务器,需要对日志进行合并,统一进行统计分析。因此为了保证统计的精确性,需要严格按照每天的时段来自动生成日志。

  - 使用php MyVisites分析Apache日志

  8)Apache服务器的密码保护 。.htaccess文件是Apache服务器上的一个设置文件。它是一个文本文件,可以使用任何文本编辑器进行编写。.htaccess文件提供了针对目录改变配置的方法,即通过在一个特定的文档目录中放置一个包含一个或多个指令的文件(.htaccess文件),以作用于此目录及其所有子目录。.htaccess的功能包括设置网页密码、设置发生错误时出现的文件、改变首页的文件名(如index.html)、禁止读取文件名、重新导向文件、加上MIME类别、禁止列目录下的文件等。注意,.htaccess是一个完整的文件名,不是***.htaccess或其他格式(当然也有管理员把其设置成其他名字,但一般都是使用.htaccess)。另外,上传.htaccess文件时,必须使用ASCII模式,并使用chmod命令改变权限为644(RW__R__R__)。每一个放置.htaccess的目录和其子目录都会被.htaccess影响。例如,在/abc/目录下放置了一个. htaccess文件,那么/abc/和/abc/def/内所有的文件都会被它影响,但/index.html不会被它影响,这一点是很重要的。

  9)减少CGI和SSI风险。CGI脚本的漏洞已经成为Web服务器的首要安全隐患,通常是程序编写CGI脚本中产生了许多漏洞。控制CGI脚本的漏洞除了在编写时需要注意对输入数据的合法性检查、对系统调用的谨慎使用等因素外,首先使用CGI程序所有者的UID来运行这些程序。这些CGI程序即使存在某些漏洞,那么其危害也仅限于该UID所能够访问的文件。也就是说,这样只能伤害用户的文件,而不会对整个系统带来致命的影响。通过安装和使用suEXEC的应用程序,可以为Apache服务器提供CGI程序的控制支持(从Apache l.3版以后,suEXEC已经作为Apache服务器的一部分),可以把suEXEC看作一个包装器,在Apache接到对CGI程序的调用请求后,它将这个调用请求交给suEXEC来负责完成具体的调用,并且从suEXEC获得返回的结果。

  10)让Apache服务器在“监牢”中运行。所谓的“监牢”是指通过chroot机制来更改某个软件运行时所能看到的根目录,即将某软件运行限制在指定目录中,保证该软件只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。这样即使被破坏或侵入,所受的损伤也不大

  11)使用SSL加固Apache。使用具有SSL功能的Web服务器,可以提高网站的安全性能。SSL协议工作在Linux TCP/IP协议和HTTP协议之间,SSL使用加密方法来保护Web服务器和浏览器之间的信息流。SSL不仅用于加密在互联网上传递的数据流,而且还提供双方身份验证。这样就可以安全地在线购物而不必担心别人窃取信用卡的信息。这种特性使得SSL适用于那些交换重要信息的地方,像电子商务和基于Web的邮件。

  12)Apache服务器防范DoS。Apache服务器对拒绝服务攻击的防范主要通过软件Apache DoS Evasive Maneuvers Module 来实现。它是一款mod_access的替代软件,可以对抗DoS攻击。该软件可以快速拒绝来自相同地址对同一URL的重复请求,通过查询内部一张各子进程的哈希表来实现。同时可以使用Linux系统强大的命令手段防范Dos攻击。

  13)利用LDAP对Apache进行认证。

  14)其他安全工具。使用tcp_wrappers和AIDE可以为系统提供额外的保护。使用tcp_wrappers可以进一部控制访问权限。AIDE是一个数据完整性检测工具,可以帮助系统管理员监视系统是否被改动过,你可以在AIDE的配置文件中编制特定的策略,监视Web服务器的配置文件、数据和CGI文件是否被修改。另外Selinux也可以保护Apache服务器。如果对目录服务比较熟悉,还可以使用LDAP服务器对Apache服务器进行访问认证。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值