鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 操作系统维护 > solaris > >

Solaris 10下DNS服务器安全攻略

来源:互联网 作者:佚名 时间:2015-06-03 08:39
DNS服务器是为了网络上的主机提供域名解析的服务的服务器 Solaris 虽然自带了BIND 版本 但它并不是Sun公司的产品 Internet Software Consortium负责BIND软件的更新 我们应当到 网站下载最新版本的BIND软件 因为新的版本的软件可以防止某些漏洞 下面我们来介

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

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

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

  ()为了下载最新的BIND软件我们到 下载本例子下载的是bindtargz

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

  #cd usr/local/src

  # wget targz

  # cp bindtargz

  # cd

  # gzip d bindtargz

  # tar vxf bindtar

  # rm bindtar

  # cd bind

  # /configure

  # make

  # make install

  # cd /usr/sbin

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

  # /usr/local/sbin/rndcconfgen > /etc/nf

  # cat /etc/nf

  输出为

  # Start of nf

  key rndckey {

  algorithm hmacmd;

  secret yxvvfQjdWvf/FowquBg==;

  };

  options {

  defaultkey rndckey;

  defaultserver ;

  defaultport ;

  };

  # End of nf

  # Use with the following in nf adjusting the allow list as needed:

  # key rndckey {

  # algorithm hmacmd;

  # secret yxvvfQjdWvf/FowquBg==;

  # };

  # controls {

  # inet port

  # allow { ; } keys { rndckey; };

  # };

  # End of nf

  ()创建rndckey文件将nf文件中注释部分拷贝生成如下文件

  # vi /etc/rndckey

  key rndckey {

  algorithm hmacmd;

  secret yxvvfQjdWvf/FowquBg==;

  };

  controls {

  inet port \

  allow { ; } keys { rndckey; };\

  };

  检查rndc是否正常工作

  #/usr/local/sbin/named g

  Jan :: starting BIND g

  Jan :: using CPU

  Jan :: loading configuration from /etc/nf

  

  #/usr/local/sbin/rndc status

  ()编辑nf配置文件

  # vi /etc/nf

  第一段的内容如下

  // generated by namedbootconfpl

  options {

  directory /var/named;

  /**//*

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

  * to talk to you might need to uncomment the querysource

  * directive below Previous versions of BIND always asked

  * port by default

  */

  // querysource address * port ;

  };

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

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

  //

  // a caching only nameserver config

  //

  zone IN {

  type hint;

  file namedroot;

  };

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

  zone localhost IN {

  type master;

  file localhostzone;

  allowupdate { none; };

  };

  zone inaddrarpa IN {

  type master;

  file namedlocal;

  allowupdate { none; };

  };

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

  再看下面的两段这两段是域的正向和反向解析

  zone IN { //新加的域

  type master;

  file zone;

  allowupdate { none; };

  };

  zone inaddrarpa IN { //新加域的反向解析

  type master;

  file named;

  allowupdate { none; };

  };

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

  include /etc/rndckey;

  ()创建/var/named目录

  # mkdir /var/named

  # cd /var/named

  ()匿名登录到ftp站点FTPRSINTERNICNET获取/domain目录下的namedroot文件将该文件置于/var/named目录下

  ()创建localhostzone文件

  # vi /var/named/localhostzone

  $TTL

  $ORIGIN localhost

  @ D IN SOA @ root (

   ; serial (d adams)

  H ; refresh

  M ; retry

  W ; expiry

  D ) ; minimum

  D IN NS @

  D IN A

  ()创建namedlocal文件

  # vi namedlocal

  $TTL

  @ IN SOA localhost rootlocalhost (

   ; Serial

   ; Refresh

   ; Retry

   ; Expire

   ) ; Minimum

  IN NS localhost

   IN PTR localhost

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

  //进入/var/named

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

  //建立localhostzone文件

  [root@Linux named]#vi localhostzone

  $TTL

  $ORIGIN localhost

  @ D IN SOA @ root (

   ; serial (d adams)

  H ; refresh

  M ; retry

  W ; expiry

  D ) ; minimum

  D IN NS @

  D IN A

  //建立namedlocal文件

  [root@Linux named]#vi namedlocal

  $TTL

  @ IN SOA localhost rootlocalhost (

   ; Serial

   ; Refresh

   ; Retry

   ; Expire

   ) ; Minimum

  IN NS localhost

   IN PTR localhost

  

  ()创建zone文件

  # vi cjhzone

  $TTL D

  @ IN SOA (

  

  

  H

  M

  W

  D )

  IN NS

  IN MX

  www IN A

  

  ()创建named文件

  # vi named

  $TTL

  @ IN SOA (

  ;

  ;

  ;

  ;

  );

  @ IN NS

   IN PTR

  ()在Solaris 操作系统中启动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

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

  dependency require_all/none file://localhost/etc/nf (online)

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

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

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

  # host

  inaddrarpa domain name pointer

  ()测试DNS解析是否成功

  # nslookup

  >

  Server:

  Address: #

  Name:

  Address:

  >

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

  应用说明

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

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

  启动 DNS Server 命令

  /etc/initd/named start

  停止 DNS Server命令

  /etc/initd/named

  Solaris 版本的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文件复制到其中中的例子说明了 牢监 中的环境状态

  

  图 监牢环境示意图

  以下是具体步骤

  为 DNS Server 建立监牢目录

  建立 /chroot/dns 目录

  # mkdir /chroot/dns

  建立一个空壳目录架构

  # cd /chroot/dns

  # mkdir p etc/named var/run

  复制 /etc/nf 到监牢中

  # cp /etc/nf /chroot/dns/etc/nf

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

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

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

  # chmod /chroot/dns/var/run

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

  为 Solaris 建立一个新服务

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

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

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

  开始建立新 服务

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

  # cp serverxml serverchrootxml

  编辑 serverchrootxml

  寻找

  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_anynet_privaddrfile_dac_readfile_dac_searchsys_resource />

  改为

  privileges=basic!proc_session!proc_info!file_link_anynet_privaddrpriv_proc_chrootpriv_file_dac_readfile_dac_searchsys_resource />

  寻找

  user=root

  改为

  user=noaccess

  保存文件退出

  停止原来的 DNS服务

  # svcadm disable dns/server:default

  加入新的 DNS Server Chroot service

  # svccfg import serverchrootxml

  启动 chroot DNS service

  # svcadm enable dns/server:chroot

  # svcs dns/server

  STATE STIME FMRI

  disabled :: svc:/network/dns/server:default

  online :: svc:/network/dns/server:chroot

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

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

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

  hosts: files dns

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

  ()我们需要将主机的本地域名输入到/etc/defaultdomain文件中例如主机的/etc/defaultdomain文件应有如下的输入项

  

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

  domain

  nameserver

  nameserver

  它表明本地域是本地域有两台基本DNS服务器其中为主DNS服务器为辅助DNS服务器

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

  #svcadm enable svc:/network/dns/client

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

  #nslookup

  > www  

  升级Solaris 自带BIND 版本到的步骤

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

  首先编译源代码同上

  # cd /usr/sbin

  # mv named namedorig

  # mv namedcheckconf namedcheckconforig

  # mv namedcheckzone namedcheckzoneorig

  # cp /usr/local/sbin/named

  # cp /usr/local/sbin/namedcheckconf

  # cp /usr/local/sbin/namedcheckzone  

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

  # /usr/sbin/named v

  BIND

  从新启动 Chroot Jail 了的 DNS 服务

  # svcadm disable dns/server:chroot

  # svcadm enable dns/server:chroot

  # svcs dns/server

  STATE STIME FMRI

  disabled :: svc:/network/dns/server:default

  online :: svc:/network/dns/server:chroot

  # ps elf | grep named

  noaccess :: ? : /usr/sbin/named t /chroot/dns

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

  总结本文介绍了如下内容

  &#; 怎样启动和停止 Bind DNS Server?

  &#; 如何设定 Bind DNS Server?

  &#; 什么是监牢?

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

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

  &#; DNS 客户端设置

  &#; 如何把 Solaris 内的 Bind DNS Server升级到最新版本?

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

网友评论
<