博威---云架构决胜云计算

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1992|回复: 2

apache安全设置

[复制链接]
发表于 2010-1-29 16:51:00 | 显示全部楼层 |阅读模式
只要是软件,就一定有漏洞。apache也不例外。
1、安全更新
要保证apache的安全,首要任务就是,要及时“打补丁”——当有新的安全更新时,在第一时间内安装该补丁。那么要怎么才能在第一时间内得知安全新的消息呢?我建议你订阅Ubuntu的安全邮件列表
ubuntu-security-announce@lists.ubuntu.com。在ubuntu网站的https://lists.ubuntu.com/mailman ... u-security-announce可以订阅。
订阅时要注意,一定要填写自己最常用的信箱,只有这样你才能够在最短时间内获得安全信息。
获得时要注意更新的信息后,一般情况下,你只需要登录到服务器上,运行sudo apt-get update && apt-get upgrade即可。不过,以下两种情况你要注意:
(1)有时你需要运行apt-get dist-upgrade才能升级所有软件包;
(2)你应该仔细阅读安全邮件的信息,因为有时在升级后还需要手工进行其他处理。
2、隐藏敏感信息
在命令行中用telnet访问本机的80端口,然后给出命令“HEAD/HTTP/1.0″并按两次回车键,看看能得到什么信息:


$ telnet localhost 80
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Mon, 03 Nov 2008 01:37:59 GMT
Server: Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.3 with Suhosin-Patch
Last-Modified: Mon, 03 Nov 2008 00:46:59 GMT
ETag: “34943-2d-45abe48d446c0″
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html
显示了详细的软件版本信息,这样对于想搞破坏的下流黑客来说,可是一个很好的利用漏洞。
然后才能隐藏这些信息呢?可以使用ServerTokens指令。修改配置文件/etc/apache2/apache2.conf,来修改ServerTokens的配置。找到ServerTokens Full所在的行,将其改为:
ServerTokens Prod
然后重新加载apache配置:
$ sudo /etc/init.d/apache2 reload
然后再检查一下HTTP的头信息:
$ telnet localhost 80
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Mon, 03 Nov 2008 02:08:43 GMT
Server: Apache
Last-Modified: Mon, 03 Nov 2008 00:46:59 GMT
ETag: “34943-2d-45abe48d446c0″
Accept-Ranges: bytes
Content-Length: 45
Connection: close
Content-Type: text/html
Connection closed by foreign host.
3、不要以root 身份运行Apache
如何查看目前的apache是哪个用户运行的呢?请看下面命令和输出:
$ ps auxf | grep apache
ly 5536 0.0 0.2 3004 756 pts/0 S+ 21:29 0:00 \_ grepapache
root 5420 0.0 2.4 18524 6236 ? Ss 20:36 0:00 /usr/sbin/ apache2 -k start
www-data 5505 0.0 1.4 18524 3652 ? S 21:08 0:00 \_ /usr/sbin/ apache2 -k start
www-data 5506 0.0 1.2 18524 3188 ? S 21:08 0:00 \_ /usr/sbin/ apache2 -k start
www-data 5507 0.0 1.2 18524 3188 ? S 21:08 0:00 \_ /usr/sbin/ apache2 -k start
www-data 5508 0.0 1.2 18524 3188 ? S 21:08 0:00 \_ /usr/sbin/ apache2 -k start
www-data 5509 0.0 1.2 18524 3188 ? S 21:08 0:00 \_ /usr/sbin/ apache2 -k start
从上面命令输出可以看出,是www-data这个用户在运行apache。其实这是ubuntu默认的,在apache安装时,创建了www-data这个组合用户。如果万一发现是root用户在运行apache的话,应该立刻想是否
“被黑了”,并立即检查配置文件/etc/apache2/apache2.conf,看看Group和User指令的设置是否正确。在Ubuntu Server8.04中,这两个指令的默认定义是这样的:
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
也就是说,这里两个指令,是在/etc/apache2/envvars文件中定义的。打开该文件,你可以看到默认定义:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
一旦发现该部分设置被改变,你应该立即恢复原配置。此外,你还应该检查系统的www-data用户和组是否存在:
$ cat /etc/group|grep www
$ cat /etc/passwd|grep www
万一不存在的话,你需要手工创建它们:
$ sudo groupadd www-data
$ sudo useradd -g www-data www-data
然后重启apache:
$ sudo /etc/init.d/apache2 restart
4、密码认证
如果你的网站上有一个目录,这个目录是内部用的,希望加上密码认证。要做到这个要求,方法很多;最简单的办法就是加密码认证。
密码认证,有两种方法:“基本认证”和“摘要式认证”;前者使用明文密码,后者则使用MD5摘要的方式将密码加密后,在网上传输。
(1)基本认证
假设虚拟机blog.mytest.com下有一个需要保护的目录,名称叫private。
要启用“基本认证”,首先要让apache能够读取.htaccess文件,所以我们先要修改一下虚拟主机的配置文件/etc/apache2/sites-available/blog.mytest.com:
$ sudo nano /etc/apache2/sites-available/blog.mytest.com
加入下面的行:
<Directory /var/www/blog.mytest.com/private>
Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all
</Directory>
注意AllowOverride AuthConfig这一行,它启用了.htaccess文件。
保存后重新加载apache配置:
$ sudo /etc/init.d/apache2 reload
接下来,就要使用htpasswd命令来创建认证文件了。我们先建立一个目录,用来存放认证文件:
$ sudo mkdir /var/www/blog.mytest.com/auth
$ sudo chmod a+rx /var/www/blog.mytest.com/auth
$ cd /var/www/blog.mytest.com/auth
然后用htpasswd命令来创建认证文件:
$ sudo htpasswd -bc private.passwords username password
Adding password for user username
上述命令创建了一个文件private.passwords,并向该文件写入了一个认证信息:用户名username,密码是password。
接下来,我们需要在private目录下创建一个.htaccess文件,在这个文件中将认证文件指定为刚才创建的private.passwords:
$ sudo mkdir /var/www/blog.mytest.com/private
$ cd /var/www/blog.mytest.com/private
$ sudo nano .htaccess
在.htaccess文件中加入下列内容:
AuthName “Password Needed”
AuthType Basic
AuthUserFile /var/www/blog.mytest.com/auth/private.passwords
Require valid-user
(2)摘要式认证
摘要式认证比较新,可能有些旧版本的浏览器不支持。
要使用摘要式认证,首先要启用该模块:
$ sudo a2enmod auth_digest
$ sudo /etc/init.d/apache2 restart
假设还是要保护blog.mytest.com网站的private目录,我们要在该目录下创建.htaccess文件。文件内容如下:
AuthType Digest
AuthName “Please Give Your Password”
AuthDigestDomain /var/www/blog.mytest.com/private
AuthUserFile /var/www/blog.mytest.com/auth/digest.passwords
require valid-user
接下来,我们需要用htdigest命令来创建认证文件:
$ cd /var/www/blog.mytest.com/private
$ sudo htdigest -c digest.passwords “Please Give Your Password” username
Adding password for username in realm Please Give Your Password.
New password:
Re-type new password:
5、检查文件权限
我们打个比方。你写了一个index.cgi,传到服务器上,结果发现apache说”permission denied”,不让运行。为了让它运行,你给了777权限:
$ sudo chmod 777 index.cgi
这么做的时候,你只想着能让index.cgi运行,急着看运行结果;即使当时考虑到了安全问题。可能也是想:以后再做权限控制吧。万一以后忘了,就麻烦了——777权限使得所有人都有权限写入(修改
)这个文件。
对于这种情况,正确的权限是755(所有人都可以执行,只有文件的拥有者可以写入):
$ sudo chmod 755 index.cgi
一般来说,.htpasswd文件应该给予640权限,.htaccess文件应为644,PHP文件为600。如果有的文件非常要紧,你不希望别人看到(比如config.php),那么可以给予400权限。如果某些文件需要写入权
限的话,则可以设为766,写完后再设为755。除非真正需要,才设置为777。
此外,下面的两行配置也和文件权限有点关系:
Options FollowSymLinks
AllowOverride None
默认情况下,ubuntu的apache是有这两行配置的(在虚拟机配置文件中)。
6、关闭不用的模块
在服务器安全的原则中,有一条最基本的就是“最少服务”原则。也就是说,只要是用不到的,就不启用、不安装。
7、DDoS攻击防范
apache提供一个mod-evasive的模块,该模块可以在很大程度上防止HTTP DDoS攻击。虽然无法完全防御,至少可以缓解HTTP服务器的压力。如果能配合软件防火墙、硬件防火墙等,效果会更好。
(1)、mod-evasive的工作原理
这里略吧,有空再谈,需要的朋友可以查阅网络资料。
(2)、mod-evasive的安装
$ sudo apt-get install libapache2-mod-evasive
(3)mod-evasive的配置
我们可以自行创建一个配置文件,根据需要来调整mod_evasive模块参数:
$ sudo nano /etc/apache2/conf.d/evasive
写入内容:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
#还可以加入以下备选配置
DOSEmailNotify you@yourdomain.com
DOSSystemCommand “su – someuser -c ‘/sbin/… %s …’”
DOSLogDir “/var/lock/mod_evasive”
#还可以加入以下的“白名单”配置
DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.0.*
</IfModule>
(4)DDoS攻击测试
/usr/share/doc/libapache2-mod-evasive/examples/test.pl文件是该模块自带的一个测试程序,运行以下命令可以测试mod_evasive的效果:
$ cd /usr/share/doc/libapache2-mod-evasive/examples
$ perl test.pl
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
版权所有,转载请注明: 转载自阿里窝|阿里家族的窝
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|boway Inc. ( 冀ICP备10011147号 )

GMT+8, 2024-5-5 18:27 , Processed in 0.081144 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表