Solaris10下DNS服务器安全攻略

来源:网络收集 作者:网友

DNS服务器是为了网络上的主机提供域名解析的服务的服务器。Solaris 10虽然自带了BIND 9.2.4版本,但它并不是Sun公司的产品,Internet Software Consortium负责BIND软件的更新,我们应当到www.isc.org 网站下载最新版本的BIND软件,因为新的版本的软件可以防止某些漏洞。

  下面我们来介绍如何配置DNS服务器。

  一、从源代码安装配置DNS服务器

  (1)为了下载最新的BIND软件,我们到http://www.isc.org/products/BIND/ 下载,本例子下载的是bind-9.3.2.tar.gz。

  (2)将下载的软件放到系统中的某个目录下,本例中放在usr/local/src目录下。

  #cd usr/local/src

  # wget http://ftp.isc.org/isc/bind9/9.3.2/bind-9.3.2.tar.gz

  # cp bind-9.3.2.tar.gz ..

  # cd ..

  # gzip -d bind-9.3.2.tar.gz

  # tar -vxf bind-9.3.2.tar

  # rm bind-9.3.2.tar

  # cd bind-9.3.2

  # ./configure

  # make

  # make install

  # cd /usr/sbin

(3)生成的可执行文件位于/usr/local/sbin目录下。最重要的可执行文件为named和rndc。

  # /usr/local/sbin/rndc-confgen > /etc/rndc.conf

  # cat /etc/rndc.conf

  输出为:

  # Start of rndc.conf

  key "rndc-key" ...{

  algorithm hmac-md5;

  secret "y9xvvfQjdWv9f/Fo7wquBg==";

  };

  options ...{

  default-key "rndc-key";

  default-server 127.0.0.1;

  default-port 953;

  };

# End of rndc.conf

  # Use with the following in named.conf, adjusting the allow list as needed:

  # key "rndc-key" ...{

  # algorithm hmac-md5;

  # secret "y9xvvfQjdWv9f/Fo7wquBg==";

  # };

  # controls ...{

  # inet 127.0.0.1 port 953

  # allow ...{ 127.0.0.1; } keys ...{ "rndc-key"; };

  # };

  # End of named.conf

  (9)创建rndc.key文件。将rndc.conf文件中注释部分拷贝生成如下文件:

  # vi /etc/rndc.key

  key "rndc-key" ...{

  algorithm hmac-md5;

  secret "y9xvvfQjdWv9f/Fo7wquBg==";

  };

controls ...{

  inet 127.0.0.1 port 953\

  allow ...{ 127.0.0.1; } keys ...{ "rndc-key"; };\

  };

  检查rndc是否正常工作:

  #/usr/local/sbin/named -g

  Jan 11 11:56:45.075 starting BIND 9.2.3 -g

  Jan 11 11:56:45.076 using 1 CPU

  Jan 11 11:56:45.079 loading configuration from '/etc/named.conf'

  ......

  #/usr/local/sbin/rndc status

  (10)编辑named.conf配置文件。

  # vi /etc/named.conf

  第一段的内容如下:

  // generated by named-bootconf.pl

  options ...{

  directory "/var/named";

  /**//*

* If there is a firewall between you and nameservers you want

  * to talk to, you might need to uncomment the query-source

  * directive below. Previous versions of BIND always asked

  * port by default.

  */

  // query-source address * port 53;

  };

  上面的部分是在这个文件开头的options设定的,首先用directory指定了named的资源记录(RR - Resource Record文件目录所在位置为:“/var/named”。也就是说,它会到这个目录下面寻找DNS记录文件)。所以,我们在后面部分所指定的文件,就无须使用绝对路径了,但它们一定要放在这个目录下面。

  那一段被注释文字,如果你仔细阅读一下,它大致意思是如果你要设定的 DNS 服务器和client之间隔着防火墙的话,要将“//query-source address * port 53;”前面的注解符号“//”拿掉(当然,也必须要设定好你的火墙)。不过,这只对早期的版本有影响,而在bind 8.1之后则无须担心这个设定。接下来再让我们看下一段句子:

  //

  // a caching only nameserver config

  //

  zone "." IN ...{

  type hint;

  file "named.root";

  };

通过这几行语句,我们为named定义了DNS系统中的根区域“.”(root zone)的设定,同时它是一个internet(IN)的区域类别。这里还指定了root zone的服务器种类(type)为“hint”(也只有这个zone会使用这样的种类)。最后,用file指定这个区域记录文件为:“named.root”,也就是“/var/named/named.root”文件。在root zone后面,你应该还会看到如下这两段:

  zone "localhost" IN ...{

  type master;

  file "localhost.zone";

  allow-update ...{ none; };

  };

  zone "0.0.127.in-addr.arpa" IN ...{

  type master;

  file "named.local";

  allow-update ...{ none; };

  };

  这里是定义出关于本机名称的DNS解释:第一个zone是localhost的正解zone,其服务器种类是master,记录档名称是localhost.zone(在/var/named目录下面),但这个zone不允许客户主机(或服务器)自行更新DNS的记录。而第二个zone则是本机区域的反向解析zone。

  再看下面的两段,这两段是cjh.com域的正向和反向解析。

  zone "cjh.com" IN ...{ //新加cjh.com的域

  type master;

  file "cjh.com.zone";

  allow-update ...{ none; };

  };

zone "9.168.192.in-addr.arpa" IN ...{ //新加域的反向解析

  type master;

  file "named.192.168.9";

  allow-update ...{ none; };

  };

  最后一行是bind 9.x版本的新功能,用来进行区域转移或DNS更新所用的加密处理。

  include "/etc/rndc.key";

  (11)创建/var/named目录。

  # mkdir /var/named

  # cd /var/named

  (12)匿名登录到ftp站点FTP.RS.INTERNIC.NET,获取/domain目录下的named.root文件,将该文件置于/var/named目录下。

  (13)创建localhost.zone文件。

  # vi /var/named/localhost.zone

  $TTL 86400

  $ORIGIN localhost.

  @ 1D IN SOA @ root (

  42 ; serial (d. adams)

3H ; refresh

  15M ; retry

  1W ; expiry

  1D ) ; minimum

  1D IN NS @

  1D IN A 127.0.0.1

  (14)创建named.local文件。

  # vi named.local

  $TTL 86400

  @ IN SOA localhost. root.localhost. (

  2005022700 ; Serial

  28800 ; Refresh

  14400 ; Retry

  3600000 ; Expire

  86400 ) ; Minimum

  IN NS localhost.

  1 IN PTR localhost.

[root@Linux etc]# mkdir /var/named

  //进入/var/named

  [root@Linux etc]# cd /var/named

  //建立localhost.zone文件

  [root@Linux named]#vi localhost.zone

  $TTL 86400

  $ORIGIN localhost.

  @ 1D IN SOA @ root (

  42 ; serial (d. adams)

  3H ; refresh

  15M ; retry

  1W ; expiry

  1D ) ; minimum

  1D IN NS @

  1D IN A 127.0.0.1

  //建立named.local文件

  [root@Linux named]#vi named.local

$TTL 86400

  @ IN SOA localhost. root.localhost. (

  1997022700 ; Serial

  28800 ; Refresh

  14400 ; Retry

  3600000 61.177.252 ; Expire

  86400 ) ; Minimum

  IN NS localhost.

  1 IN PTR localhost.

  

  (15)创建cjh.com.zone文件。

  # vi cjh.zone

  $TTL 1D

  @ IN SOA cjh.com. root.cjh.com. (

  

  1053891162

  3H

  15M

  1W

  1D )

IN NS cjh.com.

  IN MX 5 cjh.com.

  www IN A 192.168.9.9

  

  (16)创建named.192.168.9文件。

  # vi named.192.168.9

  $TTL 86400

  @ IN SOA cjh.com. root.cjh.com.(

  20031001;

  7200;

  3600;

  43200;

  86400);

  @ IN NS cjh.com.

  9 IN PTR dns.cjh.com.

(17)在Solaris 10操作系统中启动DNS服务。

  #svcadm enable /network/dns/server

  查看:

  # svcs -l /network/dns/server

  fmri svc:/network/dns/server:default

  name Internet domain name server (DNS)

  enabled true

  state online

  next_state none

  restarter svc:/system/svc/restarter:default

  contract_id 25

  dependency require_all/none svc:/system/filesystem/minimal (online)

  dependency require_all/none file://localhost/etc/named.conf (online)

  dependency require_any/error svc:/network/loopback (online)

  dependency optional_all/error svc:/network/physical (online)

(18)测试DNS反向解析是否成功。

  # host 192.168.9.9

  9.9.168.192.in-addr.arpa domain name pointer dns.cjh.com.

  (19)测试DNS解析是否成功。

  # nslookup

  > www.cjh.com

  Server: 192.168.9.9

  Address: 192.168.9.9#53

  Name: www.cjh.com

  Address: 192.168.9.9

  >

  出现上面的提示,说明DNS服务已经启动成功。

  应用说明:

  Solaris 10 基本上就已经安装好 Bind 9 DNS Server,所以,跟本就不存在安装的问题。但为什么还要写这编文章呢?在某程度上跟和 Solaris 10 的新功能 Service Management Facility (SMF)有关,而且,这编文章也有助于对 SMF的深入了解。

Solaris 10 以前版本的DNS服务器启动和停止方法是:

  启动 DNS Server 命令:

  /etc/init.d/named start

  停止 DNS Server命令:

  /etc/init.d/named

  Solaris 10版本的DNS服务器启动和停止方法是:

  启动 DNS Server 命令:

  svcadm enable dns/server 或 svcadm enable dns/server:default

  停止 DNS Server命令:

  stop svcadm disable dns/server 或 svcadm disable dns/server:default
二、让DNS 服务器在“牢监”中运行

  所谓“监牢”就是指通过chroot机制来更改某个软件运行时所能看到的根目录,即将某软件运行限制在指定目录中,保证该软件只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。这样即使出现被破坏或被侵入,所受的损伤也较小。将软件chroot化的一个问题是该软件运行时需要的所有程序、配置文件和库文件都必须事先安装到chroot目录中,通常称这个目录为chroot jail(chroot“监牢”)。如果要在“监牢”中运行dns,而事实上根本看不到文件系统中那个真正的目录。因此需要事先创建目录,并将dns文件复制到其中。图-1中的例子,说明了 牢监 中的环境状态

 

图 1 “监牢”环境示意图

  以下是具体步骤:

为 DNS Server 建立监牢目录

  建立 /chroot/dns 目录

  # mkdir /chroot/dns

  建立一个空壳目录架构

  # cd /chroot/dns

  # mkdir -p etc/named var/run

  复制 /etc/named.conf 到监牢中

  # cp /etc/named.conf /chroot/dns/etc/named.conf

  复制 /etc/named 目录中的文件到 Jail 监牢中

  # cp /etc/named/* /chroot/dns/etc/named/

  更改 /chroot/dns/var/run 目录的权限

  # chmod 770 /chroot/dns/var/run

  # chown noaccess:root /chroot/dns/var/run

  为 Solaris 10 建立一个新服务

  原本的 DNS Server Service 名称为 dns/server。

  建立新服务 后,以后要启动旧版本的 DNS服务时,不能只启动 dns/server,而要改为 dns/server:default。

  新 DNS Server Chroot 服务 名称为, dns/server:chroot

  开始建立新 服务

  # cd /var/svc/manifest/network/dns

  # cp server.xml server-chroot.xml

  编辑 server-chroot.xml

寻找

  instance name='default' enabled='false'

  改为

  instance name='chroot' enabled='false' 

  寻找

  exec='/usr/sbin/named'

  改为

  exec='/usr/sbin/named -t /chroot/dns'

  寻找

  privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr,file_dac_read,file_dac_search,sys_resource' />

  改为

  privileges='basic,!proc_session,!proc_info,!file_link_any,net_privaddr,priv_proc_chroot,priv_file_dac_read,file_dac_search,sys_resource' />

  寻找

  user='root'

  改为

  user='noaccess'

  保存文件退出。

  停止原来的 DNS服务

  # svcadm disable dns/server:default

  加入新的 DNS Server Chroot service

  # svccfg import server-chroot.xml

  启动 chroot DNS service

  # svcadm enable dns/server:chroot

  # svcs dns/server

STATE STIME FMRI

  disabled 6:21:03 svc:/network/dns/server:default

  online 6:27:01 svc:/network/dns/server:chroot

  Bind 9 DNS Server 现在已经能够在“监牢” 环境中运行 

三、在Solaris环境下,DNS客户端程序的配置非常容易,它只需要几个简单的步骤就可以完成。

  (1)除了对/etc/inet/hosts文件或NIS/NIS+的主机名映射或者主机名(hostnames)表文件进行检查以外,还必须配置命名服务开关文件(/etc/nsswitch.conf),指定域名解析服务向DNS进行查询。为了确保DNS的正常工作,在/etc/nsswitch.conf文件中必须包括下行的内容:

  hosts: files dns

  这行的意思是如果需要命名服务,首先查找/etc/inet/hosts文件,如果找不到,就到DNS中去查找。

  (2)我们需要将主机的本地域名输入到/etc/defaultdomain文件中。例如,主机www.cjh.net的/etc/defaultdomain文件应有如下的输入项:

  cjh.net

  (3)我们需要在/etc/resolv.conf文件中包含本地域名、本地基本DNS服务器的IP地址,以及辅助的DNS服务器的IP地址。这意味着本地DNS服务器出现故障,我们仍可以通过辅助的NDS服务器来提供最新的外部主机信息,而不必依赖/etc/hosts文件中的数据来解析本地地址。例如,/etc/resolv.conf文件的内容可能是这样:

  domain cjh.net

  nameserver 202.104.0.20

  nameserver 53.58.31.2

  它表明本地域是cjh.net,本地域有两台基本DNS服务器。其中,202.104.0.20为主DNS服务器,53.58.31.2为辅助DNS服务器。

  (4)下面我们可以启动DNS客户端软件了。

  #svcadm enable svc:/network/dns/client

  (5)使用nslookup命令来检查DNS客户端配置是否正确。

  #nslookup

  > www. cjh.net
 

四、升级Solaris 10自带BIND 9.2.4版本到9.3.2的步骤

  如果您正在使用Solaris 10自带的BIND 9.2.4版本,升级步骤如下:

  首先编译源代码同上。

  # cd /usr/sbin

  # mv named named.orig

  # mv named-checkconf named-checkconf.orig

  # mv named-checkzone named-checkzone.orig

  # cp /usr/local/sbin/named .

  # cp /usr/local/sbin/named-checkconf .

  # cp /usr/local/sbin/named-checkzone . 

  检查新安装的 BIND 9 DNS Server 版本 命令如下:

  # /usr/sbin/named -v

  BIND 9.3.2

  从新启动 Chroot Jail 了的 DNS 服务

  # svcadm disable dns/server:chroot

  # svcadm enable dns/server:chroot

  # svcs dns/server

STATE STIME FMRI

  disabled 6:21:03 svc:/network/dns/server:default

  online 6:27:01 svc:/network/dns/server:chroot

  # ps -elf | grep named

  noaccess 133 1 0 20:31:29 ? 0:00 /usr/sbin/named -t /chroot/dns

  新的 Bind 9 DNS Server Version 9.3.2 现在已经安装好了。

  总结:本文介绍了如下内容:

  ? 怎样启动和停止 Bind 9 DNS Server?

  ? 如何设定 Bind 9 DNS Server?

  ? 什么是监牢?

  ? Bind 9 DNS Server 怎样使用 Chroot Jail (保安监牢)功能来防止入侵者进入系统?

  ? 怎样建立新的 SMF Service 来启动 Chroot Jail 后的 DNS Server?

  ? DNS 客户端设置

  ? 如何把 Solaris 10 内的 Bind 9 DNS Server升级到最新版本?

  正如其他的Internet协议一样,DNS由几个Internet的RFC规范(最初是RFC 882、883和973)。不过要理解DNS服务器的工作原理最好的标准还是RFC 1035。你可以在Internet上的好几个地方找到RFC 1035,比如在http://www.crynwr.com/crynwr/rfc1035/就有一个不错的HTML版本。正如你可能想到的那样,RFC具有相当的技术性,你不大可能会对超出DNS服务器一般操作的细节感兴趣。但是如果你想做个服务器管理员,那么就记住RFC吧。在Internet的命名服务中最常用的恐怕就是网络域名服务(DNS)了,所以Solaris 10操作系统主要应用是BIND 9 DNS服务器。本文介绍如何设置和管理DNS服务器。

 

相关文档推荐

新零售行业Agent解决方案.PDF

1742957777  6.72MB 34页 积分5

B2B市场人DeepSeekAI提示词手册.PDF

1742949832  2.93MB 26页 积分6

AIGC如何助力工作和学习.PDF

1742949482 尹健 10.53MB 93页 积分8

DeepSeek政务应用场景与解决方案.PDF

1742949439  3.03MB 34页 积分6

2025年央国企信创数字化研究报告.PDF

1742809441  4.72MB 55页 积分5

2024年中国营销行业AI应用发展研究报告.PDF

1742803952  2.8MB 29页 积分4

AI落地应用最新工具集.PDF

1742450890  1.7MB 8页 积分4

DeepSeek完全实用手册.PDF

1742450791  3.62MB 114页 积分10

离散制造破局之道主数据管理平台重构.PDF

1742450737 詹慧超 4.6MB 37页 积分6

DeepSeek提示词设计、幻觉避免与应用.PDF

1742351308 程希冀 2.5MB 47页 积分6

相关文章推荐