Apache安全和强化的十三个技巧(二)
Apache安全和强化的十三个技巧(二)
2014年01月24日 | 作者:赵长林 | 来源:TechTarget中国
摘要:Apache是一个流行的web服务器软件,其安全性对于网站的安全运营可谓生死攸关。本文将介绍一些可帮助管理员在Linux上配置Apache确保其安全的方法和技巧。
7、使用mod_security和mod_evasive来保障Apache的安全
“mod_security”和“mod_evasive”是Apache在安全方面非常流行的两个模块。mod_security作为防火墙而运行,它允许我们适时地监视通信,还可以有助于我们保护网站或web服务器免受暴力破解攻击。借助默认的包安装程序,我们可以轻松地把mod_security安装在服务器上。下例说明如何在Ubuntu或Debian系统上安装mod_security:
$ sudo apt-get install libapache2-mod-security
$ 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的工作效率很高,它只采用一个请求就可以很好地工作,可以防止DDoS攻击造成巨大危害。mod_evasive可以应对http暴力破解攻击和DoS(或DDoS)攻击。该模块可以在三种情况下检测攻击:一是在每秒钟内有太多请求到达同一个页面时,二是在任何子进程试图发出超过50个并发请求时,三是在任何地址已经被临时列入黑名单时它仍试图尝试新的请求。
8、禁用Apache遵循符号链接
默认情况下,Apache遵循符号链接,我们可以用options指令的FollowSymLinks来关闭这个特性。为此,我们需要在主配置文件中加入一条:
Options –FollowSymLinks
如果有一个特定的用户或网站需要遵循符号连接,我们可以在那个网站的.htaccess文件中增加规则:
# Enable symbolic links
Options +FollowSymLinks
注意:为将规则重新写入到.htaccess文件中,在主配置文件中,应当全局防止“AllowOverride All”
9、关闭服务器端包含和CGI执行
如果我们不需要,就可以关闭服务器端包含(mod_include)和CGI执行。为此,我们需要修改主配置文件:
Options -Includes
Options –ExecCGI
我们还可以用Directior标记对特定目录执行这种操作。在本例中,我们关闭了/var/www/html/web1这个目录的Includes和Cgi文件执行:
Options -Includes -ExecCGI
下面列示的是其它一些可以用Options指令打开或关闭的值:
Options All:立即启用所有选项。如果你不想在Apache配置文件或.htaccess中明确地指定任何值,那么它就是默认值。
Options IncludesNOEXEC:该选项允许服务器端包含文件但不执行命令或CGI。
Options MultiViews:允许内容协商多重视图(使用mod_negotiation)
Options SymLinksIfOwnerMatch:跟FollowSymLinks类似。但是要当符号连接和被连接的原始目录是同一所有者时才被允许。
10、限制请求的大小
Apache在默认情况下对HTTP请求的总大小是没有限制的。在你允许Web服务器可以接受大量请求时,你就有可能成为DoS攻击的受害者。我们可以用directiory标签来限制 LimitRequestBody指令的请求大小。
你可以用字节来设置这个值(从0到2147483647,0表示无限制)。你可以根据自己的需要限制这个值。假设你要限制user_uploads这个目录所包含的用户上传文件量,并且限制为500K,就应当:
LimitRequestBody 512000
11、DDoS攻击的防御和强化
你不可能完全阻止企业网站免受DdoS攻击。下面这些命令便于你进行控制。
TimeOut指令用于设置在特定事件失效之前,服务器等待事件完成的时间长度。其默认值是300秒。对于容易遭受DDoS攻击的网站,把这个值降低很有好处。这个值的大小取决于网站上的请求种类。注意,对于某些CGI脚本,这个设置可能会产生问题。
MaxClients:此指令允许用户设置服务器可同时服务的连接限制。每一个新连接都要根据这个限制进行排队。它适用于Prefork和Worker。其默认值为256。
KeepAliveTimeout:在关闭连接之前,服务器随后的等待时间长度。默认值是5秒。
LimitRequestFields:这个设置可以帮助我们限制可以接受的HTTP请求的头部字段数量。其默认值为100。 有时,由于http的请求头部过多而导致发生DDoS攻击,用户不妨降低这个值。
LimitRequestFieldSize:帮助我们设置HTTP请求头部的大小。
12、启用Apache日志功能
Apache允许你独立记录操作系统的日志。例如,在用户与Web服务器进行交互时所输入的命令信息就非常有用。
为此,你需要包含mod_log_config模块。Apache有三个主要的与日志相关的指令:
TransferLog:创建日志文件
LogFormat :设置定制格式
CustomLog :创建并格式化一个日志文件
我们还可以在虚拟主机部分设置这些命令。例如,下面的例子是启用了日志功能的一个网站的虚拟主机配置:
DocumentRoot /var/http://www.zjjv.com//
ServerName http://www.zjjv.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
13、用ssl证书保障Apache的安全
你还可以用SSL证书用加密的方式保障信息传输的安全。在电子商务网站中,消费者为了买东西,有时需要提供账户或信用卡的细节,默认情况下,Web服务器用明文发送这些信息。配置服务器使其借助于SSL证书就可以为用户进行加密传输。
企业可以从不同的SSL供应商购买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编辑器打开主配置文件,并增加下面的内容,然后重启服务:
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
此时,打开浏览器,并输入https://example.com,就可以看到自签名的证书。