Apache安全配置方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Apache安全配置⽅法
令Apache占领Web服务器半壁江⼭的⼀个重要原因就是它可以提供⼀个安全的Web操作环境。

Apache团体为保证其安全性做了⼤量的⼯作。

想当年,在此产品被发现存在⼀个安全缺陷时,Apache的开发⼈员就尽快地搞出了⼀个补丁。

然⽽,即管Apache已经堪称安全的产品,如果你在构建你的服务器时没有采取⼀些安全预防措施,这种Web服务器仍易于受到很多攻击。

在本⽂中,笔者将为你提供10个技巧,借此你可以保护⾃⼰的Apache Web服务器免于受到许多攻击。

不过,必须谨记,你需要仔细地评估每⼀个技巧,以确保其适合于你的组织。

只安装所需要的
Apache的⼀个最⼤的特点是其灵活性和⼤量的可选择安装模块,这在涉及到安全问题时可成为⼀个极⼤的弱点。

你安装的越多,也就为潜在的攻击者创造了越⼤的攻击⾯。

⼀个标准的Apache安装包含20多个模块,包括CGI特性,以及⼀些⾝份验证机制。

如果你不打算采⽤CGI,并且你只想采⽤静态的Web 站点,不需要⽤户⾝份验证,你可能就不需要这些模块所提供的任何服务,因此在安装Apache时请禁⽤这些模块。

如果你沿⽤了⼀个正在运⾏的Apache服务器,并且不想重新安装它,就应当仔细检查httpd.conf配置⽂件,查找以LoadModule开头的⾏。

请检查Apache的⽂档(也可以⽤Google、Yahoo等搜索),查找每个模块的⽬的信息,找出那些你并不需要的模块。

然后,重新启动 Apache。

暴露程度最⼩化
Apache易于安装并且相当容易管理。

不幸的是,许多Apache的安装由于为完全的陌⽣者提供了关于⾃⼰服务器的太多"有帮助”的信息,例如 Apache的版本号和与操作系统相关的信息。

通过这种信息,⼀个潜在的攻击者就可以追踪特定的可以影响你的系统的破坏性漏洞,特别是你没有能够保持所有补丁的更新的话情况更为严重。

如此⼀来,攻击者⽆需反复试验就可以确切地知道你在运⾏什么,从⽽可以调整其攻击⽅法。

要防⽌服务器⼴播敏感信息,⼀定要保证将httpd.conf中的"ServerSignature”指令设置为"off”。

⼀次默认的Apache安装会将此指令设置为"off”,不过许多管理员却启⽤了它。

同样地,禁⽤⽬录浏览也是⼀个不错的注意。

在⽬录浏览被启⽤时,访问⼀个并不包含其所需要⽂档的⽬录的⽤户,会看到此⽬录中完整的内容列表。

⽆疑,你不应当将敏感材料以纯⽂本的形式存储到⼀个Web服务器上,除⾮你必须这样做,你也不应该允许⼈们看到超过其需要的内容。

⽬录浏览默认地是被启⽤的。

要禁⽤这个特性,应编辑http.conf⽂件,⽽且对每⼀个"Directory”指令,应清除"Indexs”。

例如,在笔者的做实验⽤的Apache 2.2.4服务器上,这是默认的⽬录命令:
复制代码代码如下:
<Directory "/usr/local/apache/htdocs">
Options Indexes FollowSymLinks
AllowOverrride None
Order allow,deny
Allow from all
</Directory>
清除Indexes后的样⼦:
复制代码代码如下:
<Directory "/usr/local/apache/htdocs">
Options FollowSymLinks
AllowOverrride None
Order allow,deny
Allow from all
</Directory>
你也可以保留Indexes指令,并⽤⼀个破折号引导,从⽽禁⽤此指令(也就是"-Indexes”)。

禁⽤符号连接追踪
如果你是唯⼀⼀个校对Web内容的⼈员,⽽你在创建新的符号连接时⼜⼏乎不犯错误,你可能不会担⼼此措施。

不过,如果你有很多⼈员能够向你的站点增加内容,并⾮所有的⼈都像你⼀样谨慎从事,那么就会有⼀种风险,即某个⽤户可能偶然会创建⼀个符号连接指向你的⽂件系统的⼀部分,⽽你⼜确实不想让⼈们看到这些⽂件。

例如,如果你的Apache服务器的根⽬录中的某⼈创建了⼀个指向 "/”⽂件夹的符号连接,你该怎么办?
为了取消Apache服务器允许⽤户追踪符号连接的请求,应该在Directory命令中清除FollowSymlinks指令。

例如,在笔者的试验性的Apache 2.2.4服务器中,Directory命令如下:
复制代码代码如下:
<Directory "/usr/local/apache/htdocs">
Options Indexes FollowSymLinks
AllowOverrride None
Order allow,deny
Allow from all
</Directory>
在清除了FollowSymLinks后,就成为如下的样⼦:
复制代码代码如下:
<Directory "/usr/local/apache/htdocs">
Options Indexes
AllowOverrride None
Order allow,deny
Allow from all
</Directory>
如果⼀些⽤户需要跟踪符号连接的能⼒,可以考虑使⽤SymLinksIfOwnerMatch代替。

Listen指令具体化
在你第⼀次安装Apache时,httpd.conf包含⼀个"Listen 80”指令。

应将其改变为 "Listen mn.xx.yy.zz:80”,在这
⾥"mn.xx.yy.zz”是你想让Apache监听其请求的IP地址。

如果你的Apache运⾏在⼀个拥有多个IP地址的服务器上时,这⼀点尤其重要。

如果你不采取预防措施,默认的"Listen 80”指令告诉Apache监听每⼀个IP地址的 80端⼝。

不过,这项措施有可能不适⽤于你的环境,应根据需要⽽定。

从httpd.conf中清除默认的注释
Apache 2.2.4中默认的httpd.conf⽂件有400多⾏。

在这400⾏中,只有⼀⼩部分是实际的Apache指令,其余的仅是帮助⽤户如何恰当地在httpd.conf中放置指令的注释。

根据笔者的经验,这些注释有时起负⾯作⽤,甚⾄将危险的指令留存于⽂件中。

笔者在所管理的许多 Apache服务器上将httpd.conf⽂件复制为其它的⽂件,如httpd.conf.orig等,然后完全清除多余的注释。

⽂件变得更加容易阅读,从⽽更好地解决了潜在的安全问题或者错误地配置⽂件。

没作任何设置前,查看web服务器请求⽂件头
HTTP/1.1 200 OK
Date: Sun, 27 Apr 2008 11:56:46 GMT
Server: Apache/2.2.8 (Unix) DAV/2 PHP/5.2.5 with Suhosin-Patch
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "387a5-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Content-Type: text/html
⼏乎把web服务器详细信息都暴出来了,如果没个版本的apache和php爆出严重漏洞,会给攻击者提供最有攻击价值的安全信息,这是⾮常危险的
将apache的配置⽂件加上两⾏
ServerTokens ProductOnly
ServerSignature Off
重启apache让设置⽣效
再次发出apache头信息请求
HTTP/1.1 200 OK
Date: Sun, 27 Apr 2008 11:57:40 GMT
Server: Apache
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "387a5-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Content-Type: text/html
可以看到apache版本号于已经没有了
做到这点,我们还可以改变apache的版本,这就要修改apache的源代码了,在apache的源码包中找到ap_release.h 将
#define AP_SERVER_BASEPRODUCT "Apache" 修改为#define AP_SERVER_BASEPRODUCT "Microsoft-IIS/5.0”
或者#define AP_SERVER_BASEPRODUCT "Microsoft-IIS/6.0”
然后找到os/unix下的os.h⽂件,将其#define PLATFORM "Unix"修改为#define PLATFORM "Win32"
然后重新编译,安装apache。

最后修改httpd.conf配置⽂件,添加两⾏ServerTokens Prod
ServerSignature Off
在发送头请求,会有什么,就不⽤我说了吧,嘿嘿,这叫偷天换⽇,从这点来说,php也是⼀样,同样可以通过这种⽅式改变⼀些系统信息,不过根据GPL开源的精神,这样做貌似不太好,还是保留apache和php版权信息吧。

附:
ServerSignature 三个选项
On|Off|EMai 主要起开关作⽤
ServerTokens 四个选项
Minimal|ProductOnly|OS|Full 四个选项隐藏信息依次增加
下⾯对php的配置⽂件php.ini进⾏配置
默认情况下expose_php = On
将其改为 expose_php = Off
为什么,可以看这段解释
; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header). It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
然后禁⽌⼀些涉及php安全的函数
disable_functions = phpinfo, get_cfg_var //禁⽌phpinfo和get_cfg_var等函数
display_errors = Off //禁⽌爆出错误
allow_url_fopen = Off //这个关闭,就没有办法取远程内容了,但是可以⽤变通,⽤curl远程读取的⽅法做到
safe_mode = On //开启安全模式,这个开了,可能会有些php功能没办法使⽤了
⽆论如何,还是要我们的程序设计的完美,⼀般来说,单纯更具对系统攻击很难,如果是程序有漏洞,那攻击就简单了。

相关文档
最新文档