版本V1.0

时间2012-10-04

版权GPL

作者itnihao 邮箱 itnihao@qq.com

博客 http://itnihao.blog.51cto.com

如需重新发行,请注明以上信息,谢谢合作

前言

本文档基于对apache的学习整理而成的笔记。本文档详细的记录了apache各种应用,以及一些个人的理解,如果偏差,请和我联系,以在下一个版本中进行更正。其中大部分文档均来自网络,感谢网络上各位朋友的分享,才有此文档的出现。其中本人对参考的部分网络文档进行适当的修改,以达到更好的参考效果。也希望各位积极的分享文档,为开源事业做出自己力所能及的贡献。

                                             itnihao  20121004日于成都

第十章apache的安全设置

下面的文字收集于网络,链接不知道在何处了。

    声明:关于安全的事情没有保证的或者绝对的这些建议可以让你的服务器更安全,但不要 认为遵循这些建议后你的服务器就理所当然是安全的。 另外, 在这些建议中有的建议可能会降低服务器性能或者因为你的环境引起问题。 我建议所 作的任何改变是否适合你的需求完全由你决定。换句话说,那是你的风险。

    一、确保你安装的是最新的补丁 如果门是敞开的话,在窗户上加锁就毫无意义。同样道理,如果你没有打补丁,继续下面的 操作就没有什么必要。

二、隐藏 apache 的版本号及其它敏感信息 默认情况下,很多 apache 安装时会显示版本号及操作系统版本,甚至会显示服务器上安装 的是什么样的 apache 模块。这些信息可以为***所用,并且***还可以从中得知你所配置 的服务器上的很多设置都是默认状态。 这里有两条语句,你需要添加到你的 httpd.conf 文件中: ServerSignature Off ServerTokens Prod ServerSignature 该参数设置 出现在 apache 所产生的像 404 页面、目录列表等页面的底部, 三个选项 On|Off|EMai 主要起开关作用,推荐设置为 Off。 推荐设置为 ServerTokens 该参数设置 http 头部返回的 apache 版本信息,安全起见,尽量少显示信息, : 推荐设置为 Off,可用的值和含义如下(显示的信息逐渐增加) Prod:仅软件名称,例如:apache Major:包括主版本号,例如:apache/2 Minor:包括次版本号,例如:apache/2.0 Min:仅 apache 的完整版本号,例如:apache/2.0.54 OS:包括操作系统类型,例如:apache/2.0.54Unix) Full: 包括 apache 支持的模块及模块版本号, 例如:Apache/2.0.54 (Unix) OpenSSL/0.9.7gmod_ssl/2.0.54 以其自身的用户账号和组运行( 启动权限)

三、确保 apache 以其自身的用户账号和组运行(Apache 启动权限) 创建一个新的帐户来替代这个帐号启动 apache 并设置相应的权限。

四、确保 web 根目录之外的文件没有提供服务 我们不让 apache 访问 web 根目录之外的任何文件。 假设你的所以 web 站点文件都放在一个 目录下(例如/web) ,你可以如下设置: 

order deny,allow 

deny from all 

options none 

allowoverride none 

order allow,

deny allow from all 

注意,因为我们设置 opitins none 和 allowoverride none,这将关闭服务器的所有 option 和 override。你现在必须明确把每个目录设置成 option 或者 override

    五、关闭目录浏览 你可以在 directory 标签内用 option 命令来实现这个功能。 设置 option 为 none 或者-indexes。 options -indexes

    六、关闭 includes 这也可以通过在 directory 标签内使用 option 命令来实现。 设置 option 为 none 或者-includes。 options -includes

    七、关闭 cgi 执行程序 如果你不用 cgi,那么请把它关闭。在目录标签中把选项设置成 none -execcgi 就可以:

    options -execcgi

八、禁止 apache 遵循符号链接 同上,把选项设置成 none -followsymlinks: 

options -followsymlinks

九、关闭多重选项 如果想关闭所有选项,很简单: options none 如果只想关系一些独立的选项,则通过将 options 做如下设置可实现: 

options -execcgi -followsymlinks -indexes

十、关闭对.htaccess 文件的支持 关闭对 在一个目录标签中实现: allowoverride none 如果需要重载,则保证这些文件不能够被下载,或者把文件名改成非.htaccess 文件。比如, 我们可以改成.httpdoverride 文件,然后像下面这样阻止所有以.ht 打头的文件: accessfilename .httpd

override order allow,

deny deny from all

 satisfy all

    十一、 运行 mod_security run mod_security 是 o’reilly 出版社出版的 apache security 一书的作者,ivan ristic 所写的一 个非常好用的一个 apache 模块。可以用它实现以下功能: ·简单过滤 ·基于过滤的常规表达式 ·url 编码验证 ·unicode 编码验证 ·审计 ·空字节***防止 ·上载存储限制 ·服务器身份隐藏 ·内置的 chroot 支持 ·更多其它功能

    十二、 关闭任何不必要的模块 apache 通常会安装几个模块,浏览 apache 的 module documentation,了解已安装的各个模 块是做什么用的。很多情况下,你会发现并不需要激活那些模块。 找到 httpd.conf 中包含 loadmodule 的代码。要关闭这些模块,只需要在代码行前添加一个号。要找到正在运行的模块,可以用以下语句: grep loadmodule httpd.conf 以 下 模 块 通 常 被 激 活 而 并 无 大 用 : mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex

    十三、 从 httpd.conf 中清除默认的注释 Apache 2.2.4 中默认的 httpd.conf 文件有 400 多行。在这 400 行中,只有一小部分是实际的 Apache 指令, 其余的仅是帮助用户如何恰当地在 httpd.conf 中放置指令的注释。 完全清除多 余的注释。文件变得更加容易阅读

    十四、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 端口。 不过,这项措施有可能不适用于你的环境,应根据需要而改动。