灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3221回复:0

对Apache配置的一些安全方法

楼主#
更多 发布于:2011-11-14 13:39
发一下关于一些apache安全配置的一些问题.

1、隐藏Apache的版本号及其它敏感信息
默认情况下,很多Apache安装时会显示版本号及操作系统版本,甚至会显示服务器上安装的是什么样的Apache模块。这些信息可以为黑客所用,并且黑客还可以从中得知你所配置的服务器上的很多设置都是默认状态。
这里有两条语句,你需要添加到你的httpd.conf文件中:
ServerSignature Off
ServerTokens Prod
ServerSignature出现在Apache所产生的像404页面、目录列表等页面的 底部。ServerTokens目录被用来判断Apache会在Server HTTP响应包的头部填充什么信息。如果把ServerTokens设为Prod,那么HTTP响应包头就会被设置成:
Server:Apache
如果你非常想尝试其它事物,你可以通过编辑源代码改成不是Apache的其它东西,或者你可以通过下面将要介绍的mod_security实现。
二、确保Apache以其自身的用户账号和组运行
有的Apache安装过程使得服务器以nobody的用户运行,所以,假定Apache和你的邮件服务器都是以nobody的账号运行的,那么通过Apache发起的攻击就可能同时攻击到邮件服务器,反之亦然。
User apache
Group 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 .httpdoverride
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。
十二、确定只有 才能root访问apache的config和binaries
假如你的apache装在/usr/local/apache
chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache
十三、降低timeout值(Lower the Timeout value)
默认的timeout被设定为300s,为了帮助减少拒绝服务攻击的潜在影响,你可以如下设置:
Timeout 45
十四、Limiting large requests
apache有很多指令可以让你限制请求包的大小,对减轻拒绝服务攻击的影响很有效。
其中一条就是运行LimitRequestBody指令。这个指令默认设置为无限制 。如果你
只允许上传的文件在1MB以内,你可以如下设置:
LimitRequestBody 1048576
如果你不允许文件上传,你可以把它设置的更小!
其他的指令如:LimitRequestFields, LimitRequestFieldSize 和 LimitRequestLine.
对多数服务器来说,这些指令都被设置了一个适当的默认值。但你可以为了你的需要而改变他们的默认设置!
十五、Limiting the size of an XML Body
如果你运行了模块mod_dav,那么你可能需要限制XML request body的大小。LimitXMLRequestBody 是apache2上仅有的有效指令,他的默认值是1百万字节(近1MB)
也有许多设置为0 ,意味着无限制大小,当你使用WebDAV上传巨型文件时,这种设置可能很有用,但是如果你只是简单的为了来源控制,你可能需要设置一个上限,如10MB:
LimitXMLRequestBody 10485760
十六、Limiting Concurrency
apache有许多的配置设定来调节处理concurrent request
MaxClients是服务于请求的child processes 最大限制数。很可能设置的太高而没有足够的内存去处理海量并发请求。
其他的指令有:MaxSpareServers, MaxRequestsPerChild
在apache2中
调节ThreadsPerChild, ServerLimit和MaxSpareThreads来匹配你的操作系统和硬件是非常重要的!

十七、Restricting Access by IP
如果你只想让某个网段或者某个IP接入,你可以在apache配置文件中强制实行。
如:你想限制你的intranet,只能被176.16.网段接入:
Order Deny,Allow
Deny from all
Allow from 176.16.0.0/16
Or by IP:
Order Deny,Allow
Deny from all
Allow from 127.0.0.1

十八、Adjusting KeepAlive settings
按照Apache的文档,使用HTTP Keep Alive's 你能提升客户端50%的性能。因此,改变这些设置之前你得小心一点,你将为了缓解一点点的Dos攻击而牺牲掉性能。
KeepAlive's默认设置为on,你应该别动它。
但你可以考虑去改变MaxKeepAliveRequests的值,它的默认值为100,和改变KeepAliveTimeout的值,默认值为15。通过分析你的日志来指定一个合理的值。

十九、Run Apache in a Chroot environment
chroot 允许你在一个隔离的jail子系统中运行一个程序。这避免了让它影响这台服务器上的其他服务。
上面提到的mod_security模块内置了chroot的支持。
很简单,在你的配置文件中添加一条mod_security指令。(前提是你得安装mod_security)


喜欢0 评分0
游客

返回顶部