保护Apache Web服务器安全和强化的13条建议

Apache Web服务器是一种非常流行的Web服务器,用于在Web上托管网站。在本教程中,我将介绍一些保护Apache Web服务器的主要建议。

我们都非常熟悉的Apache Web服务器,这是一个非常流行的Web服务器承载您的Web文件或在网络上你的网站。这里有一些链接,可以帮助您配置Apache Web服务器在您的Linux Box。
Apache安全提示

Apache安全和加固提示

  1. 安装Apache Web服务器
  2. 在您的Linux Box中设置您的网站
在本教程中,我将介绍一些确保Web服务器安全的主要提示。在将这些更改应用于Web服务器之前,您应该了解Apache服务器的一些基础知识。
  1. 文档根目录: 在 /var/www/html 或 /var/www
  2. 主配置文件:/etc/httpd/conf/httpd.conf 中 (RHEL / CentOS/ Fedora)和 /etc/apache2/apache2.conf 中 (于Debian / Ubuntu)。
  3. 默认HTTP端口:TCP 80
  4. 默认HTTPS端口 TCP 443
  5. 检测配置文件的设置和语法:httpd -t
  6. Web服务器的访问日志文件:/var/log/httpd/access_log
  7. Web服务器的错误日志文件:/var/log/httpd/error_log

1. 如何从错误页面中隐藏Apache版本和操作系统标识

当您使用源代码或类似yum的任何其他软件包安装程序安装Apache,它会在错误页面显示您的服务器的操作系统名称Apache Web服务器的版本 。 它还显示有关服务器中安装Apache模块的信息。
显示Apache版本

显示Apache版本

在上面的图片中,可以看到Apache显示出其与安装在服务器的操作系统版本 。 这可能是对您的Web服务器以及您的Linux Box 的一个主要的安全威胁。 为了防止Apache不显示这些信息传递给世界,我们需要在Apache的主配置文件的一些变化。 用vim编辑器中打开配置文件,然后搜索“ServerSignature”,它在默认情况下开启。 我们需要关闭这些服务器signature和第二行“ServerTokens Prod告诉Apache服务器响应头的每一个页面请求只返回Apache,抑制OS,主要和次要版本信息。
# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
# vim /etc/apache2/apache2.conf (Debian/Ubuntu)
ServerSignature Off
ServerTokens Prod
# service httpd restart (RHEL/CentOS/Fedora)
# service apache2 restart (Debian/Ubuntu)
隐藏Apache版本

隐藏Apache版本

2. 禁用目录列表

由默认的Apache列出在没有索引文件的文档根目录的所有内容 。请参见下面的图片。
Apache目录列表

Apache目录列表

我们可以通过使用Options指令中的配置文件的特定目录关闭目录列表。 为此,我们需要做在httpd.confapache2.conf文件中的条目。
<Directory /var/www/html>
Options -Indexes
</Directory>
隐藏Apache目录列表

隐藏Apache目录列表

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
您可以使用以下命令更新您的版本。
# yum update httpd
# apt-get install apache2
此外,还建议把你的内核操作系统更新到最新的稳定版本,如果你不运行它仅在特定操作系统或内核适用于任何特定的应用程序。

4. 禁用不必要的模块

这是一件好事,不给任何网络攻击的受害者的机会。 因此我们建议禁用所有那些不使用目前的模块 。您可以使用以下命令列出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守护进程。 为了安全起见,建议在其自己非特权帐户运行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”,并在那里你会需要指定的用户名组名使用。
User http-web
Group http-web

6. 使用“允许”和“拒绝”限制对目录的访问

我们可以限制使用“ 允许 ”和“ 拒绝 ”在httpd.conf文件选项进入目录。 在这里,在这个例子中,我们将通过设置在httpd.conf文件下面进行保护的根目录 。
<Directory />
Options None
Order deny,allow
Deny from all
</Directory>
  1. Options “None” -这个选项将不允许用户启用任何可选功能。
  2. Order deny, allow -这是其中的“ 拒绝 ”和“ 允许 ”指令将被处理的顺序。 在这里,它会“ 拒绝 ”第一,“ 允许 ”下一个。
  3. Deny from all -这将拒绝来自大家的根目录要求,任何人都无法访问根目录。

7. 使用mod_security和mod_evasive模块来保护Apache

这两个模块“ 的mod_security”“mod_evasive”是在安全方面的Apache非常流行的模块。

Mod_security

mod_security的工作为我们的Web应用程序防火墙 ,使我们能够监测实时的基础上的流量 。 这也有助于我们保护我们的网站或Web服务器从蛮力攻击 。 您可以直接在服务器上使用默认安装包的帮助下安装mod_security。
在Ubuntu / Debian上安装mod_security
$ sudo apt-get install libapache2-modsecurity
$ sudo a2enmod mod-security
$ sudo /etc/init.d/apache2 force-reload
在RHEL / CentOS / Fedora上安装mod_security
# yum install mod_security
# /etc/init.d/httpd restart
Mod_evasive
mod_evasive工作非常有效,它需要一个请求来处理和处理得很好。 它可以防止DDOS攻击从做太大的伤害。 mod_evasive的这一特点使它能够处理HTTP brute forceDOSDDos攻击。此模块使用三种方法检测攻击。
  1. 如果这么多请求在每秒几次中到达同一页面。
  2. 如果任何子进程试图让超过50个并发请求。
  3. 如果有任何IP仍试图做出新的请求时,它暂时列入黑名单
mod_evasive可以直接从源进行安装。在这里,我们有这些模块的安装和设置指南,这将帮助您在您的Linux框中设置这些Apache模块。
  1. 使用Mod_Security和Mod_evasive保护Apache

8. 禁用Apache的以下符号链接

由默认的Apache如下符号链接 ,我们可以将此功能关闭Options指令FollowSymLinks。为此,我们需要在主配置文件中进行以下输入。
Options -FollowSymLinks
而且,如果任何特定用户网站需要启用了FollowSymLinks,我们可以简单的写在该网站的“.htaccess”文件的规则。
# Enable symbolic links
Options +FollowSymLinks
注意:要启用“.htaccess”文件设置“AllowOverride All”内部重写规则应该出现在主要全局配置。

9. 关闭服务器端包含和CGI执行

如果没有必要,我们可以关闭服务器端包含(mod_include)和CGI执行,这样做,我们需要修改主要的配置文件。
Options -Includes
Options -ExecCGI
我们可以为目录标记的一个特定的目录。在这里,在这个例子中,我们关闭包括和“/var/www/html/web1”目录的CGI脚本的执行。
<Directory "/var/www/html/web1">
Options -Includes -ExecCGI
</Directory>
下面是用可以打开关闭 Options指令其他值。
  1. Options All - 要启用所有选项一次。这是默认值,如果您不想在Apache conf文件或.htaccess中显式指定任何值。
  2. Options IncludesNOEXEC - 该选项允许服务器端包含没有执行权限的命令或CGI文件。
  3. Options MultiViews - 允许使用mod_negotiation模块模块内容协商多视图。
  4. Options SymLinksIfOwnerMatch - 这是类似的FollowSymLinks。但是,只有当链接和链接到的原始目录之间的所有者是相同的时,才会遵循。

10. 限制请求大小

由默认的Apache对HTTP请求,即无限的总规模没有限制,当你允许在Web服务器上的大型请求其可能的,你可能是拒绝服务攻击的受害者。 我们可以限制一个Apache指令“LimitRequestBody”与目录标签的要求大小。 您可以从0( 无限制 )字节的值设置为允许在请求主体2147483647(2GB)。您可以根据网站需要设置此限制,假设您有一个网站允许上传,并且您想限制特定目录的上传大小。 在这里,在这个例子中,user_uploads是包含由用户上载的文件的目录。 我们投入的500K这一限制。
<Directory "/var/www/myweb1/user_uploads">
LimitRequestBody 512000
</Directory>

11. 保护DDOS攻击和加固

好了,这是真的,你不能完全保护您的网站在DDoS攻击 。这里有一些指令,可以帮助你有一个控制它。
  1. TimeOut:该指令允许你设置的时间服务器将等待某些事件来完成它失败之前的金额。 它的默认值是300秒 。 这是很好的保持这个值低的那些网站上这是受DDOS攻击 。 这个值完全取决于样的要求您得到您的网站 注意 :这可能会带来问题,来CGI脚本。
  2. MaxClients:该指令允许您设置将同时服务的连接限制。 每个新连接将在此限制后排队。 它可以与preforkworker这两个MPM。 它的默认值是256。
  3. KeepAliveTimeout:其服务器将等待一个后续请求关闭连接之前的时间量。 默认值是5秒
  4. LimitRequestFields:它可以帮助我们设定了一个上限将从客户端接受HTTP请求的报头字段的数目。 它的默认值是100。 建议如果DDOS攻击正在发生,因为许多HTTP请求头的结果,以降低此值。
  5. LimitRequestFieldSize:它帮助我们设置HTTP请求头大小限制。

12. 启用Apache日志记录

Apache可以让你独立登录您的操作系统的日志记录 。启用Apache日志记录是明智的,因为它提供了更多信息,例如由与Web服务器交互的用户输入的命令。 要做到这一点,你需要包括mod_log_config模块。 Apache有三个主要的与日志相关的指令。
  1. TransferLog:创建一个日志文件。
  2. LogFormat:指定自定义格式。
  3. CustomLog:创建和格式的日志文件。
您也可以将它们用于特定网站它,你正在做的虚拟主机以及您需要在虚拟主机部分指定它。例如,这里是我的网站虚拟主机配置启用日志记录。
<VirtualHost *:80>
DocumentRoot /var/www/html/example.com/
ServerName www.example.com
DirectoryIndex index.htm index.html index.php
ServerAlias example.com
ErrorDocument 404 /story.php
ErrorLog /var/log/httpd/example.com_error_log
CustomLog /var/log/httpd/example.com_access_log combined
</VirtualHost>

13. 使用SSL证书保护Apache

最后,但并非最不重要的SSL证书 ,可以在Internet上使用SSL安全证书以加密的方式为你的所有通信。 假设你有一个网站,使人们通过登录证明其登录凭据,或者你有一个电子商务网站,人们提供自己的银行信息借记卡 / 信用卡信息购买产品,默认情况下您的Web服务器以纯将这些信息发送-文本格式,但是当你使用SSL证书到你的网站,Apache的密文的所有信息。 您可以从那么多不同的SSL提供商,如namecheap.com 购买SSL证书 。 如果你正在运行一个非常小的网络业务,并做不愿意购买你仍然可以分配一个 SSL证书 签名证书到您的网站。Apache使用mod_ssl的模块,支持SSL证书
# openssl genrsa -des3 -out example.com.key 1024
# openssl req -new -key example.com.key -out exmaple.csr
# openssl x509 -req -days 365 -in example.com.com.csr -signkey example.com.com.key -out example.com.com.crt
一旦您的证书已创建并签名。现在你需要在Apache配置中添加。使用vim编辑器打开主配置文件,并添加以下行并重新启动服务。
<VirtualHost 172.16.25.125:443>
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/example.com.crt
SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt
ServerAdmin ravi.saive@example.com
ServerName example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/example.com-error_log
CustomLog /var/log/httpd/example.com-access_log common
</VirtualHost>
打开你的浏览器中键入https://example.com,你将能看到新的自签名证书 。 这些是您可以用它来保护您的Apache Web服务器安装一些安全提示。 欲了解更多有用的安全技巧和想法,请参阅官方在线文档Apache HTTP服务器