通常,一个域名服务器,负责被委派的一个域及其子域的解析。如长安大学,原来校名为西安公路交通大学,申请的域名为 xahu.edu.cn,在NIC中注册负责该域名解析的域名服务器(NS)的地址为:202.117.64.1 。我校在建立域名解解析服务时用了主、从(master-slave )冗余备份配置。
在202.117.64.1 上建主域名服务器(master),在一台备份服务器,如202.117.64.8 上建从(slave)域名服务器,并指定master为202.117.64.1 。具体配置如下:
master named.conf 文件:
optinons { directory “/var/named”; };
zone “0.0.127.in-addr.arpa”{
type master;
file “db.local”; };
zone “xahu.edu.cn” {
type master;
file “db.xahu.edu.cn”; };
zone “64.117.202.in-addr.arpa” {
type master;
file “db.64.117.202”; };
zone “.” {
type hint;
file “db.root”; };
slave named.conf 文件:
optinons { directory “/var/named”; };
zone “0.0.127.in-addr.arpa”{
type master;
file “db.local”; };
zone “xahu.edu.cn” {
type slave;
file “bak.db.xahu.edu.cn”;
masters {202.117.64.1;}; };
zone “64.117.202.in-addr.arpa” {
type slave;
file “bak.db.64.117.202”;
masters {202.117.64.1}; };
zone “.” {
type hint;
file“db.root”; };
不同之处(黑体部分)在于,主从服务器要分别用type 声明类型,另外,从服务器中要用masters 指定主服务器的地址。对主服务器,在/var/named目录下,创建相应的区域数据文件(zone date file):db.local ,db.xahu.edu.cn ,db.64.117.202 ,db.root ;而对从服务器,只要创建 db.local ,db.root 两个文件即可。
这样两个服务器就可工作了。主服务器对本域内的查询请求,直接从区域数据文件(如db.xahu.edu.cn)中获得数据,对非本域查询,查找缓存,或根据根提示(db.root)再向其他域名服务器查询,最终给请求者应答。从服务器不同之处在于,因为它是区域“xahu.edu.cn”和“64.117.202.in-addr.arpa”的从服务器,该区域的数据它要从主服务器获得,第一次启动时,因为区域数据文件不存在,从服务器就要去联系主服务器,请求区域传送(zone transfer),获得数据,此后,根据区域文件中设置的时间间隔,定期查询主服务器中该区域数据是否更新(通过比较区域数据文件SOA中的序列号),如有更新,则再作zone transfer,以保持数据同步(BIND8,BIND9支持DNS NOTIFY,即数据变更,master会主动通知slave)。在实际应用中,将主服务器地址公布出去,为校园网用户提供域名解析服务,数据变更也只需在主服务器上更改,只要每次改动后记住增加区域数据文件SOA中的序列号,就可保证从服务器数据同步,实现自动备份。
为服务器增加安全设置
以上配置看起来令人满意。域名服务器工作了,而且还有容灾备份,可以高枕无忧了吗?不,为保证系统安全还有一些事情要做。
对递归查询的限制
域名服务器完成两个主要功能:一、为内部用户作解析服务,要求应答递归查询请求,称为:resolving name server;二、在NIC注册获得对某域授权的服务器,如202.117.64.1已被委派负责xahu.edu.cn域的解析,这样该服务器要应答外部其他域名服务器的非递归查询请求,即对外提供自己所负责域的解析,称为:delegated name server。
再来看前面的配置,默认会应答任何地方来的递归的和非递归的查询。这样会有两个后果:其一、任何人都可以把202.117.64.1设置为它的域名服务器,为它提供域名解析服务,显然会增加服务器的负担;其二、为黑客留下可攻击的漏洞,比如一种spoofing attacks,通过向被攻击server 发对某域名的递归请求,而该域名在hacher 的服务器 负责的域内,这样使被攻击server向被黑客控制的server 查询。
最好的做法是,用两台服务器分别来完成两个功能,对resolving name server 应限制仅应答本地用户的查询请求(包括递归和非递归):
acl“internal”{202.117.64/24;};定义地址列表,包含校内所有ip
options { allow-query {“internal”;}; };
对delegated name server 应限制不作递归查询,即不管是递归还是非递归的查询请求都以对待非递归查询的方式应答:
options { recursion no; };
如果没有更多的机器,也可以将两种功能服务合而为一到一台服务器上实现。在前面配置中只要加入:
acl “internal” {202.117.64/24;};
options { allow-recursion{“internal”;}; };
这样就实现了仅对校内ip作递归查询,对其它ip作非递归查询的安全设置。
对区域传送的限制
以上配置中,从服务器定期会向主服务器请求区域传送,得到主服务器上的区域数据,这是我们需要的。但默认情况下,一个服务器会应答任何人的区域传送请求,这也带来一些安全隐患:其一、任何人都可一次得到该域的全部记录数据,会将自己内部信息在别有用心的人面前暴露无遗;其二、因为区域传送的数据量大,别人可通过不断的向服务器请求区域传送,对服务器进行Qos攻击,同时产生大量不必要的流量,占用网络带宽。
所以对区域传送必须加以控制,主服务器只响应从服务器的区域传送请求,从服务器拒绝任何区域传送请求:
对master:
acl “slave”{202.117.64.8;};
options { allow-transfer{“slave”;}; };
对slave:
options { allow-transfer{none;}; };
三、支持双域的域名服务器配置
我校原为西安公路交通大学,所以以前申请的域名为xahu.edu.cn,对应202.117.64.0开始的16个C类地址,为该域注册的域名服务器是202.117.64.1。后来经过高校合并后改名为长安大学,同时原来申请的ip也不够合校后扩大的需求,又申请了16个C类地址,对应于长安大学校名申请了新域名chd.edu.cn,为该域注册的域名服务器是218.195.48.1。
这样出现了为学校同时建立两套域名服务的需求。按常规思路,仿照前面对xahu.edu.cn域的做法,在一台新机器218.195.48.1上,为chd.edu.cn.域建立主服务器:
/etc/named.conf
optinons { directory “/var/named”; };
zone “0.0.127.in-addr.arpa”{
type master;
file “db.local”; };
zone “chd.edu.cn” {
type master;
file “db.chd.edu.cn”; };
zone “48.195.218.in-addr.arpa” {
type master;
file “db.48.195.218”; };
zone “.” {
type hint;
file“db.root”; };
但这样做发现一些问题,首先需要占用一台独立的服务器;其次,维护比较麻烦,因为校内所有服务都要支持双域名,如web服务,要求www.xahu.edu.cn和www.chd.edu.cn 域名都可访问到实际存在的同一个主页,所以对两个域数据的更改基本是同步的,放在同一个服务器上维护较方便;第三,校内用户得指定两个域名服务器;第四,两个域之间互相查询,如果缓存中记录超时,则要先去找根,再到二级edu.cn.域名服务器,而后才能找到对方服务器,造成多余的出校流量。
基于以上考虑,设想将对两个域的解析由一台服务器来做,并经过实验,得到以下正确配置方法:
202.117.64.1 作为master 的 /etc/named.conf文件:
acl“internal”{202.117.64/24;218.195.48/24;};
acl“slave”{202.117.64.8;};
optinons {
directory“/var/named”;
allow-recursion{“internal”;};
allow-transfer{“slave”;}; };
zone“0.0.127.in-addr.arpa”{
type master;
file“db.local”; };
zone“xahu.edu.cn”{
type master;
file“db.xahu.edu.cn”; };
zone“64.117.202.in-addr.arpa”{
type master;
file“db.64.117.202”; };
zone“chd.edu.cn”{
type master;
file“db.chd.edu.cn”; };
zone“48.195.218.in-addr.arpa”{
type master;
file“db.48.195.218”; };
zone“.”{
type hint;
file“db.root”; };
即在原来基础上,增加两个区域“chd.edu.cn”和 “48.195.218.in-addr.arpa”,以支持对新域名的正向解析和新ip的反向解析。这样用户仍只指定202 .117.64.1为域名服务器,就可同时解析新老域名。
回顾一下前面对域名服务器功能的描述,会发现以上配置完全实现了resolving name server 功能,但作为delegated name server 它只支持xahu.edu.cn.一个域,如果外界某个服务器需解析域名www.chd.edu.cn,他最终会去找218.195.48.1,而我们现在这台服务器的地址是202.117.64.1,要解决这个问题,只要给域名服务器配双ip即可。
我们用的是Solaris操作系统,在/etc目录下创建文件hostname.hme0:1 其内容是:218.195.48.1,即要添加的ip地址。
然后重启系统,用ifconfig -a 即可看到除了原端口hme0(ip为202.117.64.1)外,新增了一个虚拟端口hme0:1,ip为218.195.48.1。通过交换机,将该服务器同时接入两个ip所在网段。这样外界服务器对两个域的查询分别定位到202.117.64.1和218.195.48.1两个地址上,最终访问到同一个域名服务器上。
最后,修改从服务器/etc/named.conf文件,增加对chd.edu.cn ,48.195.218.in-addr.arpa 域的备份。这样一个比较安全的支持双域的DNS就建起来了。
文章转载地址:http://www.365master.com/kt_article_show.php?article_id=25&categ_code=10041003