Apache安全和强化的十三个技巧(一)

日期: 2013-12-11 作者:赵长林 来源:TechTarget中国

Apache是一个很受欢迎的web服务器软件,其安全性对于网站的安全运营可谓生死攸关。下面介绍一些可帮助管理员在Linux上配置Apache确保其安全的方法和技巧。 本文假设你知道这些基本知识: 文档的根目录: /var/www/html or /var/www 主配置文件: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora等系统) 或/etc/apache/apache2.conf (Debian/Ubuntu). 默认HTTP 端口: 80 TCP 默认 HTTPS 端口: 443 TCP 测试配置文件设置及语法: httpd -t 对Web服务……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

Apache是一个很受欢迎的web服务器软件,其安全性对于网站的安全运营可谓生死攸关。下面介绍一些可帮助管理员在Linux上配置Apache确保其安全的方法和技巧。

本文假设你知道这些基本知识:

  • 文档的根目录: /var/www/html or /var/www
  • 主配置文件: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora等系统) 或/etc/apache/apache2.conf (Debian/Ubuntu).
  • 默认HTTP 端口: 80 TCP
  • 默认 HTTPS 端口: 443 TCP
  • 测试配置文件设置及语法: httpd -t
  • 对Web服务器的日志文件的访问: /var/log/httpd/access_log
  • Web服务器错误日志文件: /var/log/httpd/error_log

1、避免在错误中显示Apache版本和操作系统的ID

一般情况下,在用源代码安装或用yum等包安装程序安装Apache时,Apache服务器的版本号和服务器操作系统的名称都可以在错误消息中显示,而且还会显示安装在服务器上的Apache模块信息。

在上图中,可以看出错误页面显示了Apache的版本以及服务器所安装的操作系统版本。这有可能成为Web服务器和Linux系统的一个重要威胁。为防止Apache把这些信息泄露出来,我们需要在Apache的主要配置文件中进行更改:

用vim编辑器打开配置文件,查找“ServerSignature”,默认情况下它是打开状态。我们需要关闭服务器签名。ServerTokens Prod告诉Apache只在每一个请求网页的服务器响应的头部,仅返回Apache产品名称。

# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
# vim /etc/apache/apache2.conf (Debian/Ubuntu)
ServerSignature Off
ServerTokens Prod
# service httpd restart (RHEL/CentOS/Fedora)
# service apache2 restart (Debian/Ubuntu)

2、禁用目录列表

默认情况下,在缺少index文件时,Apache会列示root目录的所有内容。如下图所示:

对于某个特定目录,我们可以在配置文件中用“Options directive”关闭目录列示。可以在httpd.conf或apache2.conf文件中加入如下项目:

<Directory /var/www/html>
  Options -Indexes
</Directory>

其效果类似于下图:

3、经常更新Apache

Apache的开发社区一直在不断地改善安全问题,并经常发布带有新的安全特性的最新版本。所以我们建议你使用最新的Apache作为自己的web服务器。为检查Apache的版本,我们可以用httpd –v命令来检查最新的版本。

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 13 2013 17:29:28

可以用下面的命令更新Apache版本。

# yum update httpd
# apt-get install apache2

如果你并不是在特定操作系统或内核上运行某个特别的软件,建议你保持内核和Linux操作系统为最新版本。

4、禁用不必要的模块

为了尽量减少网站遭受Web攻击的机会,管理员最好禁用目前不用的所有模块。你可以使用下面的命令,列示Web服务器所有的已编译模块。

# grep LoadModule /etc/httpd/conf/httpd.conf
# have to place corresponding `LoadModule' lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
……

上述模块在默认情况下都是启用的,但往往并不需要,特别是mod_imap,mod_include, mod_info, mod_userdir, mod_autoindex。要禁用特定的模块,可以在该模块所在行的开头插入“#”注释,并重新启动服务。

5、用独立的用户和组运行Apache

在默认的安装方式中,运行Apache进程时的用户是“nobody”或daemon。为安全起见,我们建议用非特权账户运行Apache,例如,我们要使用http-web,就需要创建该Apache 用户和组:

# groupadd http-web
# useradd -d /var/www/ -g http-web -s /bin/nologin http-web

现在你需要告诉Apache用这个新用户运行,为此,我们需要在/etc/httpd/conf/httpd.conf中加入一个新条目,并重新启动服务。
用vim编辑器打开/etc/httpd/conf/httpd.conf ,查找关键字“User” 和 “Group”,然后将后面的用户名和组名改为http-web:

User http-web
Group http-web

6、对用户的允许和禁止,限制对目录的访问

我们可以用httpd.conf文件中的“Allow” 和“Deny”限制对目录的访问。在本例中,我们要保证root目录的安全,在httpd.conf文件中进行如下的设置:

<Directory />
   Options None
   Order deny,allow
   Deny from all
</Directory>

其中,Options “None”表示不允许用户启用任何可选特性。

Order deny, allow---在这里处理“Deny” 和 “Allow”指令,首先禁用,然后才是允许。

Deny from all,禁用所有人对root目录的请求,任何人都不能访问根(root)目录。

请继续阅读Apache安全和强化的十三个技巧(二)

作者

赵长林
赵长林

TechTarget中国特邀作者

相关推荐

  • Apache安全和强化的十三个技巧(二)

    “mod_security”和“mod_evasive”是Apache在安全方面非常流行的两个模块。mod_security作为防火墙而运行,它允许我们适时地监视通信,还可以有助于我们保护网站或Web服务器免受暴力破解攻击。

  • 如何制定Apache安全最佳做法?

    Apache HTTP Server占Web服务器市场的份额超过50%,这也使其成为最热门的攻击目标,企业必须制定Apache安全最佳做法。

  • CGI安全:从Web服务器配置入手

    随着防火墙技术的发展以及人们对服务器本身的安全性的重视,未来的主流攻击方向将逐渐转向Web端口.CGI程序本身的安全性是程序员的事情,这对于某些管理员来说他们是无能为力的.但我们仍然可以通过正确合理的配置,使我们的Web服务器降低CGI程序本身安全问题所带来的各种威胁.本文便是从CGI安全角度来描述了两种主流的Web服务器(IIS和APACHE)的具体配置,相信这样配置之后,我们的服务器安全性会得到很大提高。

  • IIS与Apache安全性之比较

    抛开微软在漏洞方面的坏名声,IIS和Apache这两个平台的脆弱性不相上下,许多安全攻击都可以追溯到管理员因技术方面的欠缺导致的错误配置。