Total Pageviews

Friday, 6 October 2017

Apache的安全设置

一、确保你安装的是最新的补丁
如果门是敞开的话,在窗户上加锁就毫无意义。同样道理,如果你没有打补丁,继续下面的操作就没有什么必要。
二、隐藏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),你可以如下设置:
<Directory />
  Order Deny,Allow
  Deny from all
  Options None
  AllowOverride None
</Directory>
<Directory /web>
  Order Allow,Deny
  Allow from all
</Directory>
注意,因为我们设置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
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>
十一、运行mod_security
Run mod_security是O’Reilly出版社出版的Apache Security一书的作者Ivan Ristic所写的一个非常好用的一个Apache模块。可以用它实现以下功能:
•简单过滤
•基于过滤的常规表达式
•URL编码验证
•Unicode编码验证
•审计
•空字节攻击防止
•上载存储限制
•服务器身份隐藏
•内置的Chroot支持
•更多其它功能
下载:http://www.apachelounge.com/download/
# Install:
- Create .../apache2/modules/mod_security2 and copy mod_security2.so,libxml2.dll and pcre.dll to this folder
- Install the Visual C++ 2008 Redistributable Package
  Download, if you not done it already, from:
www.microsoft.com/downloads/details.aspx?FamilyID=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=en
# Add to your httpd.conf:
- LoadModule security2_module modules/mod_security2/mod_security2.so
- Enable the module unique_id by uncommenting:
  LoadModule unique_id_module modules/mod_unique_id.so
# Configuration: see the included documentation
# A very quick start:
SecRuleEngine On
SecDefaultAction log,auditlog,deny,status:403,phase:2,t:lowercase,t:replaceNulls,t:compressWhitespace
SecAuditEngine RelevantOnly
SecAuditLogType Serial
SecAuditLog logs/mod_security2.log
## -- General rules --------------------
SecRule ARGS "c:/" t:normalisePathWin
SecRule ARGS "\.\./" "t:normalisePathWin,id:99999,severity:4,msg:'Drive Access'"
SecRule ARGS "d:/" t:normalisePathWin
## -- phpBB attack --------------------
SecRule ARGS:highlight "(\x27|%27|\x2527|%2527)"
To check your mod_security, add the rule:
Call your site with:
http://www.xxxx.com/?abc=../../
You should get a access denied,
this triggered by the above rule SecRule ARGS "\.\./" t:normalisePathWin
十二、关闭任何不必要的模块
Apache通常会安装几个模块,浏览Apache的module documentation,了解已安装的各个模块是做什么用的。很多情况下,你会发现并不需要激活那些模块。
找到httpd.conf中包含LoadModule的代码。要关闭这些模块,只需要在代码行前添加一个#号。要找到正在运行的模块,可以用以下语句:
grep LoadModule httpd.conf
以下模块通常被激活而并无大用:mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi。
十三、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端口。
不过,这项措施有可能不适用于你的环境,应根据需要而定。
十四、Apache启动权限
Apache启动权限过大,容易给恶意入侵者提供便利.
  创建一个新的帐户来替代这个帐号启动apache并设置相应的权限。
  1.在计算机管理里的本地用户和组里面创建一个帐户,例如:apache,设置密码apacheuser,加入guests组(如果出现问题,可以赋予user权限);
  2.打开开始->管理工具->本地安全策略,在用户权限分配中选择“作为服务登陆”,添加apache用户;
  3.计算机管理里面选择服务,找到apache2.2,先停止服务,右击->属性,选择登陆,把单选框从本地系统帐户切换到此帐户,然后查找 选择apache,输入密码apacheuser,然后点确定(这个时候apache还不能正常启动,一般情况肯定会报错:Apache2.2 服务因 1 (0×1) 服务性错误而停止。);
  4.赋予apache安装目录(比如:D:/apache2.2)以及web目录(比如D:/wwwroot)apache帐号的可读写权限,去除 各磁盘根目录除administror与system以外的所有权限,赋予apache安装目录所在的磁盘根目录apache帐户的可读取列目录权限(我 开始觉得没必要,但后来发现:这是导致上面出错的关键。)

No comments:

Post a Comment