DNS迭代查询和递归查询

2013-05-30

迭代查询(Iterative query)是指一个NS在自己不能提供授权解释的前提下,直接告诉resolver你该去哪个NS查。(迭代法也称辗转法,反复查询)

递归查询(Recursive query),是指一个NS在自己不能提供授权解释的前提下,代替resolver去其他NS请求解析。待查询到结果后,最终将返回查询结果给客户机(resolver),在域名服务器查询期间,客户机(resolver)将完全处于等待状态。 递归查询不一定就是直接去root查,而是现在自己cache里面插就近name server,递归的时候总是将原样查询请求发送给其他NS,而不会修改它。

一、allow-recursion 和 allow-query 语句的区别 :

allow-recursion 只针对收到的递归查询请求,对于非递归请求不关心。allow-recursion 只能在 options 或者 view 语句中定义。不能在 zone 语句中定义,因为没意义。
allow-query 对所有收到的请求都适用。allow-query 可以在 options 、view 和 zone 语句中定义。
在 zone 语句中定义 allow-query 会影响到下级域的查询。
在 zone 语句中定义 allow-recursion 不影响下级域的查询。

二 、allow-query-cache 和 allow-recursion 的区别

recursion no; // Do not provide recursive service =〉相当于 allow-recursion { none; };
allow-query-cache { none; }; // Do not allow access to cache

9.4 的文档中的 allow-recursion 的注释说明

QUOTE:
allow-recursion Specifies which hosts are allowed to make recursive queries through this server. If not
specified, the default is to allow recursive queries from the builtin acls localnets and localhost.
Note that disallowing recursive queries for a host does not prevent the host from retrieving data
that is already in the server’s cache.

因此在 BIND 9.4 版本中,如果想禁止用户的递归查询请求,还需要将 allow-query-cache 选项关闭,否则用户仍然可能在cache中查到数据。

三、安全性设定--限制所有查询请求allow-recursion

就是允许哪些来源可以使用 DNS 主机进行递归查询动作。简单说就是透过这台 DNS 来查询任何资料,包含不是该 DNS 主机主责的 zone 也代为查询,你不想让别人用你的 DNS 去探查别人的 DNS 主机信息吧?

增加限制前我们用rndc status检查一下:
number of zones: 129
用dig测试一下:
dig www.wallcopper.com @ns.wallcopper.com +trace
是可以跟踪的。

增加设置:
options {
//allow-recursion { 127.0.0.1/32; 192.168.1.0/24; xx.xx.xx.xx/32; };
allow-recursion { none; };
allow-transfer { none; };
allow-query-cache { none; };
recursion no;
};

修改后的named.conf实例:
options {
version "bind";
directory "/usr/local/bind9/var/named";
Pid-file "../run/named.pid";
listen-on port 53 { any; };
blackhole { BLACKLIST;};
Allow-query {any;};
allow-recursion { none; };
allow-transfer { none; };
allow-query-cache { none; };
Dump-file "cache_dump.db";
Statistics-file "named_stats.txt";
recursion no;
};

rndc reload后我们再执行rndc status检查一下:
number of zones: 30
再用dig检查一下:
dig www.wallcopper.com @ns.wallcopper.com +trace
没法跟踪了,说明限制起作用了。

四、安全性设定--限制所有查询请求recursion no;
设置实例1:
options {
version "bind";
directory "/usr/local/bind9/var/named";
Pid-file "../run/named.pid";
listen-on port 53 {any;};
blackhole { BLACKLIST;};
Allow-query {any;};
Dump-file "cache_dump.db";
Statistics-file "named_stats.txt";
};

相当于:
options{
allow-recursion { any; };
allow-transfer { any; };
allow-query-cache { any; };
recursion yes;
};
用dig检查:
dig www.wallcopper.com @ns.wallcopper.com +trace
可以跟踪。

增加下面的设置后:
options{
allow-recursion { none; };
allow-transfer { none; };
allow-query-cache { none; };
recursion no;
};
在用dig检查:
dig www.wallcopper.com @ns.wallcopper.com +trace
跟踪失败了。

参考:
NS=Name Server

http://blog.zol.com.cn/3902/article_3901343.html
http://ycsk.iteye.com/blog/1220411
https://kb.isc.org/
http://www.zytrax.com/books/dns/ch7/queries.html

分类:网络 | 标签: |

相关日志

评论被关闭!