Apache服务器安全防范
Apache 服务器走到那里,unix/linux就跟到那里,这足以说明在WEB 服务器领域Apache 的优良性能与市场占有率这今天互联网的大环境下,web 服务已经成为公司企业必不可少的业务,大多
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/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 mod_ssl/2.2.8 OpenSSL/0.9.8g Server at forum.ubuntu.org.cn Port 80
这个等于告诉恶意用户很多有用信息,虽然说不算开了门,但等于被告诉了门在那里,还是相当危险的
三:建立安全的目录结构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 的应用相对还是比较麻烦的,有需要的话,可以发贴或查看资料,这几就不多写,篇幅不够
来源:http://forum.ubuntu.org.cn