站内搜索
广告
PHP初学者:配置Apache服务器并且设置DNS
作者:    来源:    点击:    日期:2007-9-21 10:56:45   
以下是一个可以避免上述两个问题的配置片断.

<VirtualHost 10.0.0.1>
ServerName www.abc.dom
ServerAdmin webgirl@abc.dom
DocumentRoot /www/abc
</VirtualHost>

拒绝服务
拒绝服务主要由(至少)两种形式导致。 如果您在运行Apache 1.2以前的版本,在上述两种情况下,如果您的任何一个虚拟主机的DNS解析失败, 您都会无法启动服务。在一些情况下,DNS解析甚至不在您的控制范围之内。 比如说,如果abc.dom是您的一个客户,而且他们自己控制着DNS。 那么仅仅是因为他们删除了www.abc.dom这个记录, 都会导致您的服务器(1.2之前的版本)无法启动。

另外一种形式就更隐蔽了。比如说下面这个配置片断:

<VirtualHost www.abc.dom>
  ServerAdmin webgirl@abc.dom
  DocumentRoot /www/abc
</VirtualHost>

<VirtualHost www.def.dom>
  ServerAdmin webguy@def.dom
  DocumentRoot /www/def
</VirtualHost>

假设您已经为www.abc.dom设定了10.0.0.1, 而为www.def.dom设定了10.0.0.2。 更进一步,假设def.com自己控制DNS。在这种配置下, 您已经把def.com放到了一个可以将所有指向abc.com 的所有流量据为己有的情况之下。为了达到这样的目的, 他们只需要把www.def.dom的地址解析设置成10.0.0.1就可以了。 因为他们控制着自己的DNS服务, 所以您无法阻止他们把www.def.com这个记录指向任何一个IP地址。

然后,所有向10.0.0.1发出的请求 (包括用户所有类似http://www.abc.dom/任何字符的URL) 都将会为def.com这个虚拟主机所接收。 为了更好的理解着一切是怎样发生的, 您需要一个关于Apache是怎样将进入的请求分配给它的虚拟主机的深入说明。 您可以在这里发现一个完整的文档。

"main server"地址
在Apache 1.1中,基于域名的虚拟主机支持 需要Apache知道运行着httpd的主机的IP地址。 一般来说可以用全局变量ServerName(如果存在) 或者调用C的方法gethostname(与在命令行模式下键入hostname得到的返回值一样)。 接着它就会利用DNS来查找这个地址。目前还没有办法避免这样的查找。

如果您担心这样的查找会因为您的DNS服务器没有启动而遭到失败的结果, 您就可以在/etc/hosts中插入一条记录来确定主机名 (此文件中应该已经存在这条记录了,否则您的机器无法正常启动)。 然后,您要确认您的机器已经配置为当DNS解析失败的情况下, 它将会使用/etc/hosts根据所使用的操作系统不同, 您可能需要在/etc/resolv.conf或/etc/nsswitch.conf 两个文件中选择一个进行编辑。

如果您的服务器不必因为其他理由而使用DNS, 您也许不必在把HOSTRESORDER环境变量设置为"local"的情况下运行Apache。 这都取决于您所使用的操作系统和解析库。 如果您没有使用mod_env来控制环境变量,它还将影响到CGI。 强烈建议您参考一下您所使用的操作系统附带的man帮助或FAQ。

避免这些问题的小技巧
在VirtualHost中使用IP地址
在Listen中使用IP地址
确保所有的虚拟主机拥有显式的ServerName定义。
创建一个不包含任何服务页面的<VirtualHost_default_:*>服务器

附录:进一步的提示
涉及到DNS的情况都很让人不舒服。 在Apache 1.2 中,我们努力想让服务器在DNS解析失败的情况下至少保持能够启动, 但可能我们还是没能做到最好。在当今重编号成了必须的Internet上面, 在配置文件中显式的写明IP地址已经成为不合时宜的行为了。

上述盗窃攻击的解决办法是, 在一个正向的DNS查询结果后部署一个逆向DNS解析并将两个域名进行比较。 如果不同,就禁用相应的虚拟主机。 这个方法需要一个正确配置了的逆向域名解析服务器 (因为FTP服务器和TCP封装进行的“双重逆向”DNS处理的普遍应用,这已为大部分管理员所熟知了)。

首页 上一页 [2] [3] [4] [5] [6]  下一页 尾页 
PHP初学者:配置Apache服务器并且设置DNS 评论