6.3.12 Apache服务器防范DoS
Apache服务器对拒绝服务攻击的防范主要通过软件Apache DoS Evasive Maneuvers Module 来实现。它是一款mod_access的替代软件,可以对抗DoS攻击。该软件可以快速拒绝来自相同地址对同一URL的重复请求,通过查询内部一张各子进程的哈希表来实现。到网站http://online/. securityfocus.com/data/tools/dospatch.tar.gz上下载软件。软件安装的配置可以查看Linux中文主页http://www.linux.gov.cn/上的Apache性能和安全指南,过程比较简单,限于篇幅这里就不介绍了。
同时可以使用Linux系统强大的命令手段防范Dos攻击。
netstat -an | grep -i "服务器IP地址:80" | awk '{print $6}' | sort | uniq -c | sort -n
这个命令会自动统计TCP连接的各个状态的数量,如果syn_recv很高的话,就不能排除有基于TCP协议的拒绝服务攻击的可能。于是需要打开tcp_syncookies:
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
如果没有 /proc/sys/net/ipv4/tcp_syncookies,说明内核不支持syncookies,需要重新编译内核,同时降低SYN重试次数。
echo "1" > /proc/sys/net/ipv4/tcp_syn_retries
echo "1" > /proc/sys/net/ipv4/tcp_synack_retries
同时加大syn_backlog,以保证用户的访问:
echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog
6.3.13 利用LDAP对Apache进行认证
建立测试网页。
# #mkdir /var/www/html/ldap
#echo "LDAP Auth Test Page" > /var/www/html/ldap/index.html
安装mod_authz_ldap模块。
要让Apache服务器可以存取LDAP服务器上的资料,必须利用mod_authz_ldap模块作为Apache和LDAP服务器之间认证的接口,所以必须安装mod_authz_ldap模块。
# rpm -ivh mod_authz_ldap*.rpm
修改/etc/httpd/conf.d/auth_mysql.conf。
若之前曾安装mod_auth_mysql认证模块,则必须将mod_auth_mysql模块功能关闭。
#LoadModule mysql_auth_module modules/mod_auth_mysql.so
修改/etc/httpd/conf.d/authz_ldap.conf。
# <IfModule mod_authz_ldap.c>
# <Location /private>
# AuthzLDAPEngine on
# AuthzLDAPServer localhost
# AuthzLDAPUserBase ou=People,dc=example,dc=com
# AuthzLDAPUserKey uid
# AuthzLDAPUserScope base
# AuthType basic
# AuthName "ldap@example.com"
# require valid-user
# </Location>
</IfModule>
修改为以下文字:
# LoadModule authz_ldap_module modules/mod_authz_ldap.so
<IfModule mod_authz_ldap.c>
<Directory /var/www/html/ldap>
AuthzLDAPServer localhost
AuthzLDAPUserBase ou=People,dc=example,dc=com
AuthzLDAPUserKey uid
AuthzLDAPUserScope base
AuthType basic
AuthName "ldap@example.com"
require valid-user
</Directory>
</IfModule>
重新启动Apache服务器。
# #service httpd restart
停止 httpd: [ 确定 ]
启动 httpd: [ 确定 ]
6.3.14 其他安全工具
使用tcp_wrappers和AIDE可以为系统提供额外的保护。使用tcp_wrappers可以进一步控制访问权限。AIDE是一个数据完整性检测工具,可以帮助系统管理员监视系统是否被改动过,你可以在AIDE的配置文件中编制特定的策略,监视Web服务器的配置文件、数据和CGI文件是否被修改。另外Selinux也可以保护Apache服务器(第16章将会介绍)。如果对目录服务比较熟悉,还可以使用LDAP服务器对Apache服务器进行访问认证。
在Apache配置文件中,有一些安全相关的指令可以使用。这些指令的详细用法可以参考http://httpd. apache.org/docs/mod/directives.html。
使用以下指令可以帮助你减小拒绝服务攻击的威胁。
- LimitRequestbody:数字参数,控制HTTP请求的大小。
- LimitRequestFields:数字参数,控制请求头的数目。
- KeepAlive:设置连接的生存期。
- KeepAliveTimeout:限制等待请求的时间。
使用以下指令可以帮助你减少缓冲区溢出的危险。
- LimitRequestFieldSize:限制每个请求头的大小。
- LimitRequestLine:限制每个请求行的大小。
实际上,大部分Web站点被破坏者恶意攻击是因为应用程序或脚本中的漏洞。Web安全专家认为,运行在Web服务器上的脚本或应用程序是最大的危险因素。因为CGI脚本通常产生动态内容,它们经常导致很大损害。对于大部分Web服务器来说,首先应该考虑如何加强安全配置。
6.4 本章小结
Apache的安装维护中需要注意以下安全问题。
- 检查文件和目录的权限是否恰当。
- httpd.conf的设置是否适当。
- 使服务器日志文件能够记录尽可能详细的信息。
- 对某些需要特别保护的目录使用密码保护(.htaccess)。
- 对CGI脚本或者程序进行封装。
- 检查SSI指令。
- 使用其他安全工具,如tcp_wrappers和Tripwire。