Apache服务器安全防范

Apache服务器走到那里,unix/linux就跟到那里,这足以说明在WEB服务器领域Apache的优良性能与市场占有率
这今天互联网的大环境下,web服务已经成为公司企业必不可少的业务,大多数的安全问题也跟随而来,***重点也转移为web***,许多web与很有价值的客户服务与电子商业活动结合在一块儿,这也是吸引恶意***重要缘由。

先来了解下web所面临的安全风险

HTTP拒绝服务***
***者经过某些手段使服务器拒绝对http应答,这使Apache对系统资源(cup时间与内存)需求巨增,最终形成系统变慢甚至彻底瘫痪,Apache服务器最大的缺点是,它的广泛性使它成为众矢之的,Apache服务器无时无刻不受到DoS***威胁,主要有下边几种
1.数据包洪水***
一种中断服务器或本地网络的方法是数据包洪水***,它一般使用internet控制报文协议(ICMP,属于网络层协议)
包或是udp包,在最简单的形式下,这些***都是使服务器或网络负载太重,这意味这***者的网络速度必须比目标主机网络速度要快,使用udp包的优点是不会有任何包返回到***的计算机(udp效率要比tcp高17倍),而使用ICMP包的优点是***者能让***更加富与变化,发送有缺陷的包会搞乱并锁住受害者的网络,目前流行的趋势是***者欺骗服务器,让其相信正在受来自 自身的洪水***
2.磁盘***
这是一种很不道德的***,它不只影响计算机的通讯,还破坏其硬件,伪造的用户请求利用 写命令***目标计算机硬盘,让其超过极限,并强制关闭,结局很悲惨
3.路由不可达
一般DoS***,集中在路由器上,***者首先得到控制权并操纵目标机器,当***者能更改路由表条目时候,会致使整个网络没法通讯,这种***很阴险,隐蔽,由于网络管理员须要排除的网络不通缘由不少,其中一些缘由须要详细分辨
4.分布式拒绝服务***
这也是最具备威胁的DDoS***,名称很容易理解,简单说就是群欧,不少客户机同时单条服务器,你会发现你将伤痕累累,Apache服务器特别容易受到***,不管是DDos仍是隐藏来源的***,由于Apache无处不在,特别是为Apache特地打造的病毒(特选SSL蠕虫),潜伏在许多主机上,***者经过病毒能够操纵大量被感染的机器,对特定目标发动一次浩大的DDoS***,经过将蠕虫散播到大量主机,大规模的点对点***得以进行,除非你不提供服务,要否则几乎没法阻止这样的***,这种***一般会定位到大型的网站上。

缓冲区溢出,这种***很广泛,***者利用CGI程序编写一些缺陷程序偏离正常的流程,程序使用静态的内存分配,***者就能够发送一个超长的请求使缓冲区溢出,好比,一些perl编写的处理用户请求的网关脚本,一但缓冲区溢出,***者就能够执行恶意指令

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

这边这些都是服务将会遇到的***手段,下边来讲,如何打造安全的Apache服务器
若是你能遵照下边这些建议,那么你将获得一台相对安全的apache服务器

一:勤打补丁
你必需要相信这个是最有用的手段,缓冲区溢出等漏洞都必须使用这种手段来防护,勤快点相信对你没有坏处
在http:www.apache.org上最新的changelog中都写有:bug fix ,security bug fix的字样,作为负责任的管理员要常常关注相关漏洞,及时升级系统添加补丁。使用最新安全版本对增强apache相当重要

二:隐藏和假装Apache的版本
打乱***者的步骤,给***者带来麻烦,相信是管理员愿意看到的。软件的漏洞信息和版本是相关的,在***者收集你服务软件信息时候给与迷惑是个不错的选择,况且版本号,对***者来讲至关与GPS定位同样重要
默认状况,系统会把apache版本模块都显示出来(http返回头),若是列举目录的话,会显示域名信息(文件列表正文),去除Apache版本号的方法是修改 配置文件,找到关键字,修改成下边
ServerSignature off
ServerTokens prod

经过分析web服务器类型,大体能够推测操做系统类型,win使用iis,linux广泛apache,默认的Apache配置里没有任何信息保护机制,而且容许目录浏览,经过目录浏览,一般能够获得相似“apache/1.37 Server at apache.linuxforum.net Port 80”或“apache/2.0.49(unix)PHP/4.3.8”的信息
经过修改配置文件中的ServerTokens参数,能够将Apache的相关信息隐藏起来,若是不行的话,多是提示信息被编译在程序里了,要隐藏须要修改apache的源代码,而后从新编译程序,以替换内容
编辑ap_release.h文件,
修改"#define AP_SERVER_BASEPRODUCT\"Apache\""为
"#define AP_SERVER_BASEPRODUCT\"Microsoft-IIS/5.0\"
编辑os/unix/os.h文件
修改"#define PLATFORM\"Unix\""为
"#define PLATFORM\'Win32"
修改完成后,从新编译,安装apache,在修改配置文件为上边作过的,再次启动apache后,用工具扫描,发现提示信息中已经显示为windows操做系统了
这个等于告诉恶意用户不少有用信息,虽说不算开了门,但等于被告诉了门在那里,仍是至关危险的

三:创建安全的目录结构apache服务器包括四个目录结构
ServerRoot #保存配置文件,二进制文件与其余服务器配置文件
DocumentRoot #保存web站点内容,包括HTML文件和图片等
ScripAlias #保存CGI脚本
Customlog 和 Errorlog #保存日志和错误日志
建议的目录结构为,以上四种目录相互独立而且不存在父子逻辑关系
注:
ServerRoot目录只能为root用户访问
DocumentRoot目录应该可以被管理web站点内容的用户访问和使用apache服务器的apache用户与组访问
ScripAlias目录应该只能被CGI开发人员和apache用户访问
Customlog 和 Errorlog只能被root访问
下边是一个安全目录结构的事例
+-------/etc/
|
| +----/http (ServerRoot)
| +----/logs (Customlog 和 Errorlog)
|
+-------var/www
|
| +---/cgi-bin (ScripAlias)
| +---/html (DocumentRoot)

这样的目录结构是比较安全的,由于目录之间独立,某个目录权限错误不会影响到其余目录

四:为apache使用专门的用户与组
按照最小特权的原则,须要给apache分配一个合适的权限,让其可以完成web服务
注:
最小特权原则是系统安全中最基本的原则之一,限制使用者对系统及数据进行存取所须要的最小权限,保证用户能够完成任务,同时也确保被窃取或异常操做所形成的损失

必须保证apache使用一个专门的用户与组,不要使用系统预约的账户,好比nobody用户与nogroup组
由于只有root用户能够运行apache,DocumentRoot应该可以被管理web站点内容的用户访问和使用apache服务器的apache用户与组访问,例如,但愿“test”用户在web站点发布内容,而且能够以httpd身份运行apache服务器,能够这样设定
groupadd webteam
usermod -G webteam test
chown -R httpd.webteam /www/html
chmod -R 2570 /www/htdocs
只有root能访问日志,推荐这样的权限
chown -R root.root /etc/logs
chown -R 700 /etc/logs

五:web目录的访问策略
对于能够访问的web目录,要使用相对保守的途径进行访问,不要让用户查看任何目录索引列表
禁止使用目录索引:
apache在接到用户对一个目录的访问时,会查找DirectoryIndex指令指定的目录索引文件,默认为index.html,若是该文件不存在,那么apache会建立动态列表为用户显示该目录的内容,这样就会 暴露web站点结构,所以须要修改配置文件禁止显示动态目录索引,修改httpd.conf
Options -Indexes FollowSymLinks
Options指令通知apache禁止使用目录索引,FollowSymLinks表示不容许使用符号链接。
禁止默认访问:
要的安全策略必需要禁止默认访问的存在,只对指定的目录开放权限,若是容许访问/var/www/html目录,使用以下设定
Order deny,allow
Allow from all
禁止用户重载:
为了禁止用户对目录配置文件(htaccess)进行重载(修改),能够这样设定
AllowOverride None

六:apache服务器访问控制
apache的access.conf文件负责设置文件的访问权限,能够实现互联网域名和ip地址的访问控制
如容许192.168.1.1到192.168.1.254的主机访问,能够这样设定
order deny,allow
deny from all
allow from pair 192.168.1.0/255.255.255.0

七:apache服务器的密码保护
.htaccess文件是apache上的一个设置文件,它是一个文本文件,.htaccess文件提供了针对目录改变配置的方法
既经过在一个特定的文档目录中放置一个包含一个或多个指令的文件(.htaccess文件),以做用于此目录和子目录。
.htaccess的功能包括设置网页密码,设置发生错误时出现的文件,改变首业的文件名(如,index.html),禁止读取文件名,从新导向文件,加上MIME类别,禁止目录下的文件等。
注:.htaccess是一个完整的文件名,不是***.htaccess或其余格式,在/abc目录下放置一个.htaccess文件,那么/abc与它的子目录都会被这个文件影响,但/index.html不会被影响

.htaccess的创建和使用比较复杂点,若是感兴趣的朋友能够回帖发问,这里就不具体写出来了,这种保护要比某些程序实现的保护安全,那种方法能够经过被猜想方法获取密码,用.htaccess很难被破解,但文本方式的验证会比较慢,对少许用户没影响,但对大量用户就必须使用带数据模块的验证了,这须要编译源代码时候开启模块,默认是不开启的

八:让apache运行在“监牢”中
“监牢”的意思是指经过chroot机制来更改某个软件运行时所能看到的根目录,简单说,就是被限制在指定目录中,保证软件只能对该目录与子目录文件有所动做,从而保证整个服务器的安全,即便被破坏或侵入,损伤也不大
之前,unix/linux上的daemon都是以root权限启动的,当时,这是一件理所固然的事情,像apache这样的服务器软件,须要绑定到80端口上来监听请求,而root是惟一有这种权限的用户,随着***手段和强度的增长,这样会使服务器受到至关大的威胁,一但被利用缓冲区溢出漏洞,就能够控制整个系统。如今的服务器设计一般以root启动,而后进程放弃root权限,改成某个低级的账号运行。这种方式显然会下降对系统的危害,但***者仍是会寻找漏洞提高权限,即便没法得到root权限,也能够删除文件,涂改主页等
为了进一步提升系统安全性,linux内核引入chroot机制,chroot是内核中的一个系统调用,软件能够经过调用函数库的chroot函数,来更改某个进程所能见到的跟目录,好比,apache软件安装在/usr/local/httpd目录,以root启动apache,这个root权限的父进程会派生数个以nobody权限运行的子进程,父进程监听80端口,而后交给某个子进程处理,这时候子进程所处的目录续承父进程,即/usr/local/httpd目录,可是一但目录权限设定错误,被***的apache子进程能够访问/usr/local , /usr ,/tmp甚至整个文件系统,由于apache进程所处的跟目录仍然是整个文件系统的跟目录,若是能够用chroot将apache限制在/usr/local/httpd/下,那么apache所存取的文件都被限制在/usr/local/httpd下,建立chroot监牢的做用就是将进程权限限制在文件目录树下,保证安全。
若是本身手动apache的监牢,将是很烦琐和复杂的工做,须要牵扯到库文件,这里可使用jail包来简化监牢的实现
jail的官方网站为: http://www.jmcresearch.com 有兴趣能够逛逛
这里也不写出具体的建立过程稍微麻烦,若是对安全有须要的话,请回帖,会及时补上

九:apache服务器防范Dos
apache服务常常会碰到Dos***,防范的主要手段是经过软件, apahce Dos Evasive Maneuvers Module
来实现的,它是一款mod_access的代替软件,能够对抗DoS***,该软件能够快速拒绝来自相同地址对同一URL的重复请求,经过查询内部一张各子进程的哈希表来实现
能够到网址:http://online/.securityfocus.com/tools/ 上下载软件

十:减小CGI和SSI风险
CGI脚本的漏洞已经成为WEB服务器的首要安全隐患,一般是程序编写CGI脚本产生了许多漏洞,控制CGI的漏洞除了在编写时候注意对输入数据的合法检查,对系统调用的谨慎使用等因素外,首先使用CGI程序全部者的ID来运行这些程序,即便被漏洞危害也仅限于该ID能访问的文件,不会对整个系统带来致命的危害,所以须要谨慎使用CGI程序。
1.3版的apache集成了suEXEC程序,能够为apache提供CGI程序的 控制支持,能够把suEXEC看作一个包装器,在Apache接到CGI程序的调用请求后,把这个请求交给suEXEC来负责完成具体调用,并从suEXEC返回结果,suEXEC能够解决一些安全问题,但会影响速度
若是是对安全性要求很高时候,建议使用suEXEC,此外还有一个软件CGIWrap,它的安全性要高与suEXEC

减小SSI脚本风险,若是用exec等SSI命令运行外部程序,也会存在相似CGI脚本风险,除了内部调试程序时,应使用
option命令禁止其使用:
Option IncludesNOEXEC

十一:使用ssl加固Apache
使用具备SSL功能的服务器,能够提升网站敏感页的安全性能,SSL工做与TCP/IP协议和HTTP协议之间
SSL能够加密互联网上传递的数据流,提供身份验证,在线购物而没必要担忧别人窃取信用卡信息,在基于电子商务和基于web邮件的地方很是重要。
SSL的应用相对仍是比较麻烦的,有须要的话,能够发贴或查看资料,这几就很少写,篇幅不够
 
 
转于ubuntu论坛 原文地址: http://forum.ubuntu.org.cn/viewtopic.php?f=54&t=144725