• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Linux DNS and BIND 服務器

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    概述 注意事項 軟件包的來源 安裝軟件包需要注意的問題 編譯和安裝 配置和優化 編譯和優化 清除不必要的文件 配置 Caching-only域名服務器 為簡單的“caching”服務器配置“/etc/named.conf”文件 為簡單的“caching”服務器配置“/var/named/db.127.0.0”

    概述

    注意事項

    軟件包的來源

    安裝軟件包需要注意的問題

    編譯和安裝

    配置和優化

    編譯和優化

    清除不必要的文件

    配置

    Caching-only域名服務器

    為簡單的“caching”服務器配置“/etc/named.conf”文件

    為簡單的“caching”服務器配置“/var/named/db.127.0.0”文件

    為簡單的“caching”服務器配置“/var/named/db.cache”文件

    主域名服務器

    為主域名服務器配置“/etc/named.conf”文件

    為主域名服務器和輔域名服務器配置“/var/named/db.127.0.0”文件

    為主域名服務器和輔域名服務器配置“/var/named/db.208.164.186”文件

    為主域名服務器配置“/var/named/db.openarch”文件

    為主域名服務器和輔域名服務器配置“/var/named/db.cache”文件

    二級域名服務器(輔域名服務器)

    為二級域名服務器配置“/etc/named.conf”文件

    為所有名稱服務器配置“/etc/rc.d/init.d/named”腳本文件

    加強BIND/DNS安全性

    限制BIND運行于“虛”根(chroot)環境下。

    清理工作

    區帶(Zone)轉移

    允許查詢

    轉發限制

    參考文獻

    DNS管理工具

    DNS用戶工具

    安裝到系統中的文件

    概述
    安裝完所有必要的系統安全軟件之后,下一步要考慮如何提高和調整服務器的網絡性能。DNS對IP網絡通訊來說是最重要的網絡服務,因為所有的Linux客戶機(client)至少都要配置成具有緩沖(caching)能力。為本地的客戶端計算機建立緩沖服務可以降低主域名服務器(primary server)的負荷。一臺“caching only”的域名服務器可以進行域名解析并把結果記錄下來下次還要用到這個域名的時候就不要花很長時間解析了。這可以在很大程度上縮短下次域名解析的時間。

    因為安全方面的問題,保證在企業內部網的主機和企業外部的主機之間不存在DNS這一點十分重要。如果只用IP地址連接企業外部的主機,當然就更安全了。

    在我們的配置和安裝中我們以非“root”用戶在“chrooted”環境中運行BIND/DNS。我們提供了三種不同的配置:1)簡單的“caching only”域名服務器(客戶端);2)輔域名服務器(secondary server);3)主域名服務器(primary server)。

    配置簡單的“caching only”域名服務的服務器是不會用來做主/輔域名服務器的,只有主域名服務器或輔域名服務器才需要配置主域名或輔域名服務。通常情況下只有一臺服務器作為主域名服務器,另一臺服務器作為輔域名服務器,其它的服務器都作為簡單的“caching only”客戶端域名服務器。

     

    上面是我們在這本書中介紹的DNS的配置的圖示。我們在不同的服務器上使用了不同的設置(caching only DNS、主DNS和輔DNS)。在實際情況中有很多種可能存在,所以要根據需要和網絡結構來配置。

    注意事項
    下面所有的命令都是Unix兼容的命令。

    源路徑都為“/var/tmp”(當然在實際情況中也可以用其它路徑)。

    安裝在RedHat Linux 6.1下測試通過。

    要用“root”用戶進行安裝。

    bind的版本號是8.2.2-patchlevel5。

    軟件包的來源
    bind主頁:。

    下載:bind-contrib.tar.gz, bind-doc.tar.gz, bind-src.tar.gz。

    安裝軟件包需要注意的問題
    最好在編譯前和編譯后都做一張系統中所有文件的列表,然后用“diff”命令去比較它們,找出其中的差別并知道到底把軟件安裝在哪里。只要簡單地在編譯之前運行一下命令“find /* >dns1”,在編譯和安裝完軟件之后運行命令“find /* > dns2”,最后用命令“diff dns1 dns2 > dns”找出變化。

    編譯和安裝
    把軟件包(tar.gz)解壓縮:

    [root@deep /]# mkdir /var/tmp/bind
    [root@deep /]# cp bind-contrib.tar.gz /var/tmp/bind/
    [root@deep /]# cp bind-doc.tar.gz /var/tmp/bind/
    [root@deep /]# cp bind-src.tar.gz /var/tmp/bind/

    我們創建了一個名為“bind”的目錄,用來處理tar文檔。

    轉到新的“bind”目錄(cd /var/tmp/bind),解壓tar文件:

    [root@deep bind]# tar xzpf bind-contrib.tar.gz
    [root@deep bind]# tar xzpf bind-doc.tar.gz
    [root@deep bind]# tar xzpf bind-src.tar.gz

    配置和優化
    編輯“Makefile.set”文件(vi /src/port/linux/Makefile.set),并加入:

    CC=egcs -D_GNU_SOURCE
    CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-
    frame-pointer -fno-exceptions’
    DESTBIN=/usr/bin
    DESTSBIN=/usr/sbin
    DESTEXEC=/usr/sbin
    DESTMAN=/usr/man
    DESTHELP=/usr/lib
    DESTETC=/etc
    DESTRUN=/var/run
    DESTLIB=/usr/lib/bind/lib
    DESTINC=/usr/lib/bind/include
    LEX=flex -8 -I
    YACC=yaclearcase/" target="_blank" >cc -d
    SYSLIBS=-lfl
    INSTALL=install
    MANDIR=man
    MANROFF=cat
    CATEXT=$$N
    PS=ps -p
    AR=ar crus
    RANLIB=:

    第一行說明我們用的gcc編譯器的名字是egcs,第二行是優化參數?!癉ESTLIB=”這一行說明bind所需的庫函數目錄,“DESTING=”說明bind的“include”目錄在哪里。

    編譯和優化
    輸入下面的命令:

    [root@deep bind]# make -C src
    [root@deep bind]# make clean all -C src SUBDIRS=../doc/man
    [root@deep bind]# make install -C src
    [root@deep bind]# make install -C src SUBDIRS=../doc/man

    “make”命令把所有的源文件都編譯成二進制文件,接著“make install”把二進制文件和相關的配置文件安裝到相應的目錄中。

    [root@deep bind]# strip /usr/bin/addr
    [root@deep bind]# strip /usr/bin/dig
    [root@deep bind]# strip /usr/bin/dnsquery
    [root@deep bind]# strip /usr/bin/host
    [root@deep bind]# strip /usr/bin/nslookup
    [root@deep bind]# strip /usr/bin/nsupdate
    [root@deep bind]# strip /usr/bin/mkservdb
    [root@deep bind]# strip /usr/sbin/named
    [root@deep bind]# strip /usr/sbin/named-xfer
    [root@deep bind]# strip /usr/sbin/ndc
    [root@deep bind]# strip /usr/sbin/dnskeygen
    [root@deep bind]# strip /usr/sbin/irpd
    [root@deep bind]# mkdir /var/named

    “strip”命令去掉目標文件中的所有符號信息。這樣二進制程序就會小一些,可以提高一點程序的性能?!癿kdir”命令創建一個“/var/named”目錄。

    清除不必要的文件
    [root@deep /]# cd /var/tmp
    [root@deep tmp]# rm -rf bind/

    這些命令刪除用來編譯和安裝BIND/DNS的源文件。

    配置
    不同服務器的配置文件是不相同的,要根據需求和網絡結構的實際情況來決定??赡茉诩依镏灰惭b一個“caching only”的DNS服務器,在公司里就可能要安裝主DNS、輔DNS和“caching only”DNS。

    可以到這去下載“floppy.tgz”文件:。把“floppy.tgz”文件解開之后,可以在相應的目錄下發現我們在這本書中介紹的所有軟件的配置文件。這樣就沒有必要手工重新生成這些文件,或者用拷貝粘貼的方法把它們粘貼到配置文件中去。不管是打算自己動手生成配置文件還是拷貝現成的,你都要學會自己修改配置文件并且把配置文件拷貝到正確的目錄下。下面將具體說明。

    為了運行“caching only”域名服務器,必須創建或者拷貝下面的文件到相應的目錄下:

    l 把“named.conf”文件拷貝到“/etc”目錄下

    l 把“db.127.0.0”文件拷貝到“/var/named”目錄下

    l 把“db.cache”文件拷貝到“/var/named”目錄下

    l 把“named”腳本文件拷貝到“/etc/rc.d/init.d”目錄下

    為了運行主域名服務器,必須創建或者拷貝下面的文件到相應的目錄下:

    l 把“named.conf”文件拷貝到“/etc”目錄下

    l 把“db.127.0.0”文件拷貝到“/var/named”目錄下

    l 把“db.cache”文件拷貝到“/var/named”目錄下

    l 把“db.208.164.186”文件拷貝到“/var/named”目錄下

    l 把“db.openarch”文件拷貝到“/var/named”目錄下

    l 把“named”腳本文件拷貝到“/etc/rc.d/init.d”目錄下

    為了運行輔域名服務器,必須創建或者拷貝下面的文件到相應的目錄下:

    l 把“named.conf”文件拷貝到“/etc”目錄下

    l 把“db.127.0.0”文件拷貝到“/var/named”目錄下

    l 把“db.cache”文件拷貝到“/var/named”目錄下

    l 把“named”腳本文件拷貝到“/etc/rc.d/init.d”目錄下

    可以把“floppy.tgz”解壓之后,找到上面列出來的文件,并拷貝到相應的目錄下,或者用拷貝粘貼的方法從本書中直接粘貼出。

    Caching-only域名服務器
    “caching-only”域名服務器處除了對“0.0.127.in-addr.arpa”有效,對其它的域都是無效的?!癱aching-only”域名服務器能夠在區域(zone)內或在區域外查找域名,就像主域名服務器和輔域名服務器那樣。所不同的是當“caching-only”域名服務器開始在區域內查找域名的時候,只查詢本區域的一臺主域名服務器或輔域名服務器就結束了。

    用來建立簡單的“caching-only”域名服務器所需的文件為:

    l named.conf

    l db.127.0.0

    l db.cache

    l named 腳本

    為簡單的“caching”服務器配置“/etc/named.conf”文件
    只要不作為主域名服務器和輔域名服務器,可以在網絡上的其它服務器上使用這一個配置。為本地的客戶端計算機建立簡單的“caching”服務器可以減輕主域名服務器的負荷。許多撥號上網的用戶也是因為這個原因使用這種配置。

    創建“named.conf”文件(touch /etc/named.conf),在文件中加入這些行:

    options {
    directory "/var/named";
    forwarders { 208.164.186.1; 208.164.186.2; };
    forward only;
    };
    //
    // a caching only nameserver config
    zone "." in {
    type hint;
    file "db.cache";
    };
    zone "0.0.127.in-addr.arpa" in {
    type master;
    file "db.127.0.0";
    };

    在“forwarders”這一行,“208.164.186.1”和“208.164.186.2”是主域名服務器和輔域名服務器的IP地址。也可以用ISP提供的DNS服務器或者其它的DNS服務器。

    為了提高BIND/DNS服務器的安全性,需要防止當主/輔域名服務器當機或者沒有反應的時候,“caching”域名服務器會試圖查詢其它服務器。在“named.conf”文件中設置了“forward only”這個參數,可以防止這種情況的發生,也就是當“forwarders”中定義的域名服務器沒有反應的時候,域名服務器不會去查詢其它服務器。

    為簡單的“caching”服務器配置“/var/named/db.127.0.0”文件
    只要不作為主域名服務器和輔域名服務器,可以在網絡上的其它服務器上使用這一個配置?!癲b.127.0.0”文件包括自轉(loopback)網絡。在“/var/named”目錄下創建下面的文件。

    創建“db.127.0.0”文件(touch /var/named/db.127.0.0),在文件中加入下面這些行:

    $TTL 345600
    @ IN SOA localhost. root.localhost. (
    00 ; Serial
    86400 ; Refresh
    7200 ; Retry
    2592000 ; Expire
    345600 ) ; Minimum
    IN NS localhost.
    1 IN PTR localhost.

    為簡單的“caching”服務器配置“/var/named/db.cache”文件
    在啟動DNS服務器之前必須要有一個“db.cache”文件的拷貝,把這個文件拷貝到“/var/named”目錄下?!癲b.cache”告訴服務器根區域(root zone)在哪里。

    用下面的命令在其它的Unix計算機上創建“db.cache”文件,或這從RedHat Linux源代碼的光盤中拷貝一個。

    用下面的命令生成一個新的“db.cache”文件:

    [root@deep]# dig @.aroot-servers.net . ns > db.cache

    不要忘了吧“db.cache”文件拷貝到需要這個文件的服務器的“/var/named”目錄學。

    注意:內部網的地址,如“192.168.1/24”因為安全問題不能出現在DNS的配置文件中。還有一點很重要,就是在企業網內的主機和外部主機之間不能存在DNS。

    主域名服務器
    主域名服務器從文件中讀取區域數據,這些數據對整個區域來說都是具有權威性的。

    為了建立主域名服務器所必須的文件是:

    l named.conf

    l db.127.0.0

    l db.208.164.186

    l db.openarch

    l db.cache

    l named script

    為主域名服務器配置“/etc/named.conf”文件
    在作為主域名的服務器中使用這樣的配置。編譯完DNS之后,比較為服務器建立主域名。我們用“openarch.com”作為力爭,假定其IP地址為:208.164.186.0。為了實現這個目的在“/etc/named.conf”文件中加入這幾行:

    options {
    directory "/var/named";
    fetch-glue no;
    recursion no;
    allow-query { 208.164.186/24; 127.0.0/8; };
    allow-transfer { 208.164.186.2; };
    transfer-format many-answers;
    };
    // These files are not specific to any zone
    zone "." in {
    type hint;
    file "db.cache";
    };
    zone "0.0.127.in-addr.arpa" in {
    type master;
    file "db.127.0.0";
    };
    // These are our primary zone files
    zone "openarch.com" in {
    type master;
    file "db.openarch";
    };
    zone "186.164.208.in-addr.arpa" in {
    type master;
    file "db.208.164.186";
    };

    “fetch-glue no”與“recursion no”選項一起使用以防止服務器的緩沖區增長的過大以至崩潰。禁止遞歸選項將你的服務器設成被動模式,它不會代理其它名稱服務器和解釋器而發送請求。禁止遞歸的名稱服務器因為不會發送請求因此不會緩存任何數據,也就很難被欺騙。這是一個安全特性。

    在“allow-query”行中“208.164.186/24”和“127.0.0/8”表示本服務器允許向其請求的IP地址。

    在“allow-query”行中“208.164.186.2”表示本服務器允許接收區帶轉移的IP地址。你必須確保只有輔域名服務器才可以接收你的區帶轉移。這些信息往往被一些IP欺騙程序所利用。

    注意:“named.conf”文件中選項 “recursion no”,“allow-query”和“allow-transfer”是一些安全方面的特性。

    為主域名服務器和輔域名服務器配置“/var/named/db.127.0.0”文件
    本配置文件適用于主域名服務器和輔域名服務器。 “db.127.0.0”文件包括回環網絡的設置,是主機用于將信息流直接導向本地的特殊地址。在“/var/named/”目錄中創建下列文件。

    創建“db.127.0.0”文件(touch /var/named/db.127.0.0)并加上如下幾行:

    ; Revision History: April 22, 1999 -
    ; Start of Authority (SOA) records.
    $TTL 345600
    @ IN SOA deep.openarch.com. admin.mail.openarch.com. (
    00 ; Serial
    86400 ; Refresh
    7200 ; Retry
    2592000 ; Expire
    345600 ) ; Minimum
    ; Name Server (NS) records.
    NS deep.openarch.com.
    NS mail.openarch.com.
    ; only One PTR record.
    1 PTR localhost.

    為主域名服務器和輔域名服務器配置“/var/named/db.208.164.186”文件
    本配置文件適用于主域名服務器。文件“db.208.164.186”用于映射主機名和IP地址。在“/var/named/”中創建下列文件:

    創建“db.208.164.186”文件(touch /var/named/db.208.164.186)并加入:

    ; Revision History: April 22, 1999 -
    ; Start of Authority (SOA) records.
    $TTL 345600
    @ IN SOA deep.openarch.com. admin.mail.openarch.com. (
    00 ; Serial
    86400 ; Refresh
    7200 ; Retry
    2592000 ; Expire
    345600 ) ; Minimum
    ; Name Server (NS) records.
    NS deep.openarch.com.
    NS mail.openarch.com.
    ; Addresses Point to Canonical Names (PTR) for Reverse lookups
    1 PTR deep.openarch.com.
    2 PTR mail.openarch.com.
    3 PTR .

    為主域名服務器配置“/var/named/db.openarch”文件
    本配置文件適用于主域名服務器。文件“db.openarch”用于映射主機名和IP地址。在“/var/named/”中創建下列文件:

    創建“db.openarch”文件(touch /var/named/db.openarch)并加入:

    ; Revision History: April 22, 1999 -
    ; Start of Authority (SOA) records.
    $TTL 345600
    @ IN SOA deep.openarch.com. admin.mail.openarch.com. (
    00 ; Serial
    86400 ; Refresh
    7200 ; Retry
    2592000 ; Expire
    345600 ) ; Minimum
    ; Name Server (NS) records.
    NS deep.openarch.com.
    NS mail.openarch.com.
    ; Mail Exchange (MX) records.
    MX 0 mail.openarch.com.
    ; Address (A) records.
    localhost A 127.0.0.1
    deep A 208.164.186.1
    mail A 208.164.186.2
    www A 208.164.186.3
    ; Aliases in Canonical Name (CNAME) records.
    ;www CNAME deep.openarch.com.

    為主域名服務器和輔域名服務器配置“/var/named/db.cache”文件
    在你開始啟動DNS服務器之前你必須在“/var/named/”目錄中擁有文件“db.cache”。 “db.cache”文件告訴你的服務器你的服務器的“根”區帶的位置。

    用以下的命令從其它的UNIX主機上(你的主域名服務器)或者從你的Red Hat Linux CD-ROM 發行源盤獲取一份拷貝。

    [root@deep]# dig @.aroot-servers.net . ns > db.cache

    獲取文件之后不要忘記把db.cache拷貝到你的DNS服務器“/var/named/”目錄下。

    二級域名服務器(輔域名服務器)
    二級域名服務器平時可以分擔主域名服務器的負載。當主服務器當機時接管主服務器的工作。二級域名服務器可以從網絡上接收別的域名服務器傳來的數據(通常是主域名服務器)。這個過程叫區帶轉移。

    建立一個二級域名服務器所需的文件包括:

    l named.conf

    l db.127.0.0

    l db.cache

    l named script

    為二級域名服務器配置“/etc/named.conf”文件
    本配置文件適用于二級域名服務器。你必須修改二級域名服務器主機上的“named.conf”文件。把除了“0.0.127.in-addr.arpa”以外每次出現的“primary”改為“secondary”并添上主域名服務器和其IP地址的記錄。

    創建“named.conf”文件(touch /etc/named.conf)并加上如下幾行:

    options {
    directory "/var/named";
    fetch-glue no;
    recursion no;
    allow-query { 208.164.186/24; 127.0.0/8; };
    allow-transfer { 208.164.186.1; };
    transfer-format many-answers;
    };
    // These files are not specific to any zone
    zone "." in {
    type hint;
    file "db.cache";
    };
    zone "0.0.127.in-addr.arpa" in {
    type master;
    file "db.127.0.0";
    };
    // These are our slave zone files
    zone "openarch.com" in {
    type slave;
    file "db.openarch";
    masters { 208.164.186.1; };
    };
    zone "186.164.208.in-addr.arpa" in {
    type slave;
    file "db.208.164.186";
    masters { 208.164.186.1; };
    };

    以上設置此域名服務器為區帶“openarch.com”二級域名服務器,而且它應該與“208.164.186.1”主機所保存的區帶信息保持一致。

    二級域名服務器不必從網絡上獲取所有的db文件;總括文件,“db.127.0.0”和 “db.cache”,與主域名服務器相同,所以只須在二級域名服務器中保留一份本地拷貝。

    從主域名服務器中拷貝“db.127.0.”文件到二級域名服務器。

    從主域名服務器中拷貝“db.cache”文件到二級域名服務器。

    為所有名稱服務器配置“/etc/rc.d/init.d/named”腳本文件
    本配置文件適用于所有類型的名稱服務器(緩存、主、輔名稱服務器)。配置“/etc/rc.d/init.d/named”腳本文件用以啟動和停止DNS/BIND服務器守護進程。

    創建“named”腳本文件 (touch /etc/rc.d/init.d/named) 并添加:

    #!/bin/sh
    #
    # named This shell script takes care of starting and stopping
    # named (BIND DNS server).
    #
    # chkconfig: - 55 45
    # description: named (BIND) is a Domain Name Server (DNS)
    # that is used to resolve host names to IP addresses.
    # probe: true
    # Source function library.
    . /etc/rc.d/init.d/functions
    # Source networking configuration.
    . /etc/sysconfig/network
    # Check that networking is up.
    [ ${NETWORKING} = "no" ] && exit 0
    [ -f /usr/sbin/named ] || exit 0
    [ -f /etc/named.conf ] || exit 0
    RETVAL=0
    # See how we were called.
    case "$1" in
    start)
    # Start daemons.
    echo -n "Starting named: "
    daemon named
    RETVAL=$?
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/named
    echo
    ;;
    stop)
    # Stop daemons.
    echo -n "Shutting down named: "
    killproc named
    RETVAL=$?
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/named
    echo
    ;;
    status)
    /usr/sbin/ndc status
    exit $?
    ;;
    restart)
    $0 stop
    $0 start
    ;;
    reload)
    /usr/sbin/ndc reload
    exit $?
    ;;
    probe)
    # named knows how to reload intelligently; we don want linuxconf
    # to offer to restart every time
    /usr/sbin/ndc reload >/dev/null 2>&1 || echo start
    exit 0
    ;;
    *)
    echo "Usage: named {start|stop|status|restart}"
    exit 1
    esac
    exit $RETVAL

    好了,現在更改腳本的缺省權限使其可以執行:

    [root@deep]# chmod 700 /etc/rc.d/init.d/named

    通過執行以下命令創建BIND/DNS到rc.d的符號鏈接:

    [root@deep]# chkconfig --add named

    BIND/DNS腳本不會在下次重起機器的時候自動啟動named守護進程。你可以通過執行以下命令使它成為缺省設置:

    [root@deep]# chkconfig --level 345 named on

    執行以下命令手工啟動DNS服務器:

    [root@deep]# /etc/rc.d/init.d/named start

    加強BIND/DNS安全性
    限制BIND運行于“虛”根(chroot)環境下。
    本部分側重于防止BIND被黑客當作攻擊運行它的主機系統的切入點。BIND要完成一項相當復雜和大型的功能,因此其安全方面的潛在漏洞出現的概率就比較高。事實上,人們已經發現BIND中的缺陷可以讓一個遠程的用戶在一臺運行BIND的主機上獲取根的訪問權限。

    BIND可以作為非根用戶運行,這樣可以把風險降到最低,可以把損害限制在一個普通用戶在本地Shell所能造成的惡劣后果之內。當然,允許匿名訪客用戶也會極大影響大多數DNS系統的安全性,因此有必要采用進一步措施來對付它——在“虛”根環境中運行BIND。

    采用“虛”根環境最主要的優勢在于它可以限制守護進程所能見到的文件系統在“虛”根之內。而且,因為這個“虛”根僅須支持BIND,“虛”根內所須的程序就非常有限。最為重要的是沒有必要讓轉換為根用戶的程序運行,可以避免通過獲取根用戶權限的辦法來打破“虛”根的限制。

    注意:“named”程序必須位于你的PATH環境變量所列出的目錄之內。如果你是根用戶,而且已經安裝了BIND,這肯定不成問題。在其他情況下,我們假定你的named程序位于“/usr/sbin/named”。

    找出支持運行“named”所須的共享庫文件,這些文件需要拷進“虛”根之內。

    [root@deep]# ldd /usr/sbin/named
    libc.so.6 => /lib/libc.so.6 (0x40017000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

    記下上面所列之文件,過一會兒會用到它們。

    第一步:

    為運行“named”添加一個新的用戶名和用戶組。這是非常重要的,因為以根用戶運行BIND會使“虛”根毫無意義。而用一個現存的用戶帳號容易造成服務之間互相訪問對方資源,不利于多層次的安全性。

    下面是用戶和組id的例子,檢查一下“/etc/passwd”和“/etc/group”兩個文件找出尚未使用的用戶和組id,我們將采用53。

    [root@deep]# groupadd -g 53 named
    [root@deep]# useradd -g 53 -u 53 named

    第二步:

    設置“虛”根環境。首先創建一個“虛”根目錄。我們將選擇“/chroot/named”,因為我們將它設立在隔離的文件系統內以防止文件系統遭到攻擊。在早些時候我們的安裝過程中為這個目的創建了一個特別的分區“/chroot”。

    [root@deep]# /etc/rc.d/init.d/named stop (僅當named守護進程在運行時)
    [root@deep]# mkdir -p /chroot/named

    接著,如下創建其余的目錄:

    [root@deep]# mkdir /chroot/named/dev
    [root@deep]# mkdir /chroot/named/lib
    [root@deep]# mkdir /chroot/named/etc
    [root@deep]# mkdir -p /chroot/named/usr/sbin
    [root@deep]# mkdir -p /chroot/named/var/run

    拷貝主要配置文件,帶區文件,named,named-xfer程序:

    [root@deep]# cp /etc/named.conf /chroot/named/etc/
    [root@deep]# mkdir /chroot/named/var/named
    [root@deep]# cd /var/named ; cp -a . /chroot/named/var/named/
    [root@deep]# mknod /chroot/named/dev/null c 1 3
    [root@deep]# chmod 666 /chroot/named/dev/null
    [root@deep]# cp /usr/sbin/named /chroot/named/usr/sbin/
    [root@deep]# cp /usr/sbin/named-xfer /chroot/named/usr/sbin/

    重要提示:目錄“/chroot/named/var/named”及其目錄內的所有文件的屬主必須設成二級域名服務器下名字為“named”的進程,并且只有二級域名服務器可以進行區帶轉移,而你自己不能直接操作。

    欲使目錄“/chroot/named/var/named”及其目錄內的所有文件的屬主設成二級域名服務器下名字為“named”的進程,執行以下命令:

    [root@deep]# chown -R named.named /chroot/named/var/named/

    為“named.conf”設置不可更改位:

    [root@deep]# cd /chroot/named/etc/
    [root@deep]# chattr +i named.conf

    拷貝前面查找出的共享庫文件到“虛”根下的lib目錄:

    [root@deep]# cp /lib/libc.so.6 /chroot/named/lib/
    [root@deep]# cp /lib/ld-linux.so.2 /chroot/named/lib/

    拷貝“localtime” and “nsswitch.conf”文件到“虛”根下以使日志文件的條目符合當地時間:

    [root@deep]# cp /etc/localtime /chroot/named/etc/
    [root@deep]# cp /etc/nsswitch.conf /chroot/named/etc/

    為“nsswitch.conf”設置不可更改位:

    [root@deep]# cd /chroot/named/etc/
    [root@deep]# chattr +i nsswitch.conf

    具有“+i”屬性的文件不能被修改:它不能被刪除和改名,不能創建到這個文件的鏈接,不能向這個文件寫入數據。只有超級用戶才能設置和清除這個屬性。

    第三步:

    告訴syslogd守護進程新的“虛” 根服務。

    通常情況下,進程通過“/dev/log”向syslogd發送消息。由于虛” 根的限制,這種通信被禁止。因此syslogd需要改為監聽“/chroot/named/dev/log”。我們可以通過編輯syslog的啟動腳本來設定新的監聽地點。

    編輯syslog腳本(vi +24 /etc/rc.d/init.d/syslog)作如下改動:

    daemon syslogd -m 0

    改為:

    daemon syslogd -m 0 -a /chroot/named/dev/log

    第四步:

    編輯“named”腳本(vi /etc/rc.d/init.d/named) 作如下改動:

    [ -f /usr/sbin/named ] || exit 0

    改為:

    [ -f /chroot/named/usr/sbin/named ] || exit 0

    [ -f /etc/named.conf ] || exit 0

    改為:

    [ -f /chroot/named/etc/named.conf ] || exit 0

    daemon named

    改為:

    daemon /chroot/named/usr/sbin/named -t /chroot/named/ -unamed -gnamed

    l “-t”設定named在“虛” 根環境下啟動。

    l “-u”規定運行進程的用戶。

    l “-g”規定運行進程的組。

    Red Hat的啟動腳本的daemon()函數不允許規定替代的PID文件。但這不會影響named初始化腳本的啟動和停止,因為它們是從“虛” 根以外調用的。

    在8.2版本的BIND中“ndc”命令已經編譯成二進制代碼,以致在本設置中,發行版的ndc沒有實際用途??梢灾匦戮幾gBIND源文件進行彌補。

    必須明白這些設置僅對ndc有效。如果你需要一個新的named及named xfer,應該采用原來的設置。

    為了實現這一點,在源文件的頂層目錄中。

    對于ndc:

    [root@deep]# cp bind-src.tar.gz /vat/tmp
    [root@deep]# cd /var/tmp/
    [root@deep]# tar xzpf bind-src.tar.gz
    [root@deep]# cd src
    [root@deep]# cp port/linux/Makefile.set port/linux/Makefile.set-orig

    編輯“Makefile.set”文件(vi port/linux/Makefile.set)并做如下改動:

    CC=egcs -D_GNU_SOURCE
    CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions
    DESTBIN=/usr/bin
    DESTSBIN=/chroot/named/usr/sbin
    DESTEXEC=/chroot/named/usr/sbin
    DESTMAN=/usr/man
    DESTHELP=/usr/lib
    DESTETC=/etc
    DESTRUN=/chroot/named/var/run
    DESTLIB=/usr/lib/bind/lib
    DESTINC=/usr/lib/bind/include
    LEX=flex -8 -I
    YACC=yacc -d
    SYSLIBS=-lfl
    INSTALL=install
    MANDIR=man
    MANROFF=cat
    CATEXT=$$N
    PS=ps -p
    AR=ar crus
    RANLIB=:

    更改Makefile前后所帶來的變化是我們改變了“DESTSBIN=”, “DESTEXEC=”, 和 “DESTRUN=”三行,使其指向正確的“虛” 根路徑。經過修改后,ndc程序知道到那里去尋找“named”。

    [root@deep]# make clean
    [root@deep]# make
    [root@deep]# cp bin/ndc/ndc /usr/sbin/
    [root@deep]# cp: overwrite `/usr/sbin/ndc? y
    [root@deep]# strip /usr/sbin/ndc

    我們重新編譯二進制文件,并把編譯“ndc”程序的結果拷貝到“/usr/sbin”目錄下覆蓋老版本。我們沒有忘記為提高性能而優化代碼。

    重建一下“named”二進制文件是一個不錯的主意,這樣可以確?!皀amed”和“ndc”具有相同的版本號。

    對于named:

    [root@deep]# cd /var/tmp/src
    [root@deep]# cp port/linux/Makefile.set-orig port/linux/Makefile.set
    [root@deep]# cp: overwrite `port/linux/Makefile.set`? y

    編輯“Makefile.set”文件(vi port/linux/Makefile.set)并做如下改動:

    CC=egcs -D_GNU_SOURCE
    CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-
    frame-pointer -fno-exceptions
    DESTBIN=/usr/bin
    DESTSBIN=/usr/sbin
    DESTEXEC=/usr/sbin
    DESTMAN=/usr/man
    DESTHELP=/usr/lib
    DESTETC=/etc
    DESTRUN=/var/run
    DESTLIB=/usr/lib/bind/lib
    DESTINC=/usr/lib/bind/include
    LEX=flex -8 -I
    YACC=yacc -d
    SYSLIBS=-lfl
    INSTALL=install
    MANDIR=man
    MANROFF=cat
    CATEXT=$$N
    PS=ps -p
    AR=ar crus
    RANLIB=:

    [root@deep]# rm -f .settings
    [root@deep]# make clean
    [root@deep]# make
    [root@deep]# cp bin/named/named /chroot/named/usr/sbin
    [root@deep]# cp: overwrite `/chroot/named/usr/sbin/named? y
    [root@deep]# cp bin/named-xfer/named-xfer /chroot/named/usr/sbin
    [root@deep]# cp: overwrite `/chroot/named/usr/sbin/named-xfer? y
    [root@deep]# strip /chroot/named/usr/sbin/named
    [root@deep]# strip /chroot/named/usr/sbin/named-xfer

    因為編譯系統可以緩存變量,我們可以刪除“.settings”文件。運行“make clean”命令可以確保沒有過時的垃圾殘留。編譯完“named”,“named-xfer”之后拷貝這兩個文件到“虛” 根目錄之下,并且不要忘記優化代碼以提高程序性能。

    刪除不必要的目錄和文件

    [root@deep]# rm -f /usr/sbin/named
    [root@deep]# rm -f /usr/sbin/named-xfer
    [root@deep]# rm -f /etc/named.conf
    [root@deep]# rm -rf /var/named/

    我們從“/usr/sbin”中刪除了“named”,“named-xfer”文件,因為我們已經可以讓“虛”根目錄之下程序拷貝來完成同樣的這些日常工作。對于“named.conf”文件和“/var/named”目錄,如法炮制。

    第五步:

    測試以下“虛”根環境下的配置情況!重新啟動“syslogd”守護進程:

    [root@deep]# /etc/rc.d/init.d/syslog restart

    啟動“虛”根環境下的新的BIND:

    [root@deep]# /etc/rc.d/init.d/named start

    核查以下以確信named正在采用新的參數運行。

    [root@deep]# ps auxw | grep named

    named 11446 0.0 1.2 2444 1580 ? S 23:09 0:00 /chroot/named/usr/sbin/named -t /chroot/named/ -unamed -gnamed

    第一列應該是“named”,表示運行這個程序的屬主。最后一列應該為“named -t /chroot/named/ -unamed -gnamed”。

    清理工作
    [root@deep]# rm -rf /var/tmp/bind/

    注意:出于安全考慮,在企業內部網和外部主機之間不要架設DNS。如果僅僅通過IP地址將企業內部網同外界聯系起來將極大的提高系統的安全性。

    區帶(Zone)轉移
    限制區帶轉移。

    限制區帶轉移可以預防:

    l 他人“借用”域名服務器。

    l 黑客列出區帶的內容。

    以下是一個“named.conf”文件之中包括“allow-transfer”選項的例子:

    options {
    allow-transfer { 208.164.186.2; };
    };

    以上限制了那些二級域名服務器可以從這臺域名服務器上獲取區帶信息。限制區帶轉移需注意:不僅要在主域名服務器上限制區帶轉移,在二級域名服務器也要限制區帶轉移。

    允許查詢
    限制域名服務器所接受的查詢可以規定:

    l 允許使用本域名服務器的IP地址范圍。

    l 它們可以查詢的區帶。

    以下是一個“named.conf”文件之中包括“allow-query”選項的例子:

    options {
    allow-query { 208.164.186/24; 127.0.0/8; };
    };

    以上規定了能夠向本臺域名服務器發出請求的IP地址范圍。特別的,對于運行在Internet防火墻之內的用戶而言,他們有一種對于外部世界隱藏其名字空間的要求,然而同時他們又要給有限的授權用戶提供域名服務。

    轉發限制
    你可能需要在你的轉發服務器宕機或沒有應答的時候不要嘗試站點之外的轉發器?!癴orward only”選項可以實現這一功能。

    以下是一個named.conf文件之中包括“forward only”選項的例子:

    options {
    forwarders { 205.151.222.250; 205.151.222.251; };
    forward-only;
    };

    在“forwarder”一行中,“205.151.222.250”和“205.151.222.251” 分別代表你的ISP及另外的DNS服務器的IP地址。

    參考文獻
    為了獲取更詳細的信息,可以閱讀以下手冊頁:

    $ man dnsdomainname (1) - show the systems DNS domain name
    $ man dnskeygen (1) - generate public, private, and shared secret keys for DNS Security
    $ man dnsquery (1) - query domain name servers using resolver
    $ man named (8) - Internet domain name server (DNS)

    DNS管理工具
    以下這些命令,是我們日常維護工作時經常要用到的。但是還有許許多多的命令我們沒有列出,請閱讀以下手冊頁和其他的參考文獻,以便能夠得到更加詳細的信息。

    dig

    “db.cache”文件規定了“根”區帶服務器的位置。它必須定期更新。雖然“根”區帶服務器不會經常變動,但有時確實它會變。每隔一到兩個月檢查一下“db.cache”文件是一個不錯的實踐經驗。

    用以下命令為你的DNS服務器查詢一下新的“db.cache”文件:

    [root@deep]# dig @.aroot-servers.net . ns > db.cache

    獲取“db.cache”文件后拷貝它到 “/var/named/” 目錄下。

    [root@deep]# cp db.cache /var/named/

    其中@.aroot-servers.net是你用來請求“根”區帶信息文件(db.cache)服務器,而“db.cache”文件是你的新“db.cache”文件的名稱。

    ndc

    這個命令允許系統管理員控制域名服務器的運行情況。如果沒有命令輸入,ndc將給出提示符,直到遇到文件結束符EOF為止。

    在你的終端上鍵入ndc及help可以看到各種命令。

    [root@deep]# ndc
    [root@deep]# ndc help

    DNS用戶工具
    以下這些命令,是我們日常維護工作時經常要用到的。但是還有許許多多的命令我們沒有列出,請閱讀以下手冊頁和其他的參考文獻,以便能夠得到更加詳細的信息。

    nslookup

    nslookup是一個用來查詢Inernet域名服務器的實用程序。nslookup有兩種運行模式:交互式和非交互式運行模式。交互式運行模式允許用戶通過域名服務器檢索各種主機,并可以打印出主機名稱列表。非交互式運行模式用來打印所請求的某個主機或域的特定的信息。

    進入“nslookup”交互式運行模式,運行下面的命令:

    [root@deep]# nslookup (鍵入 help 獲取有關 nslookup命令的詳細信息).
    Default Server: deep.openarch.com
    Address: 208.164.186.3

    進入nslookup非交互式運行模式,運行下面的命令:

    [root@deep]# nslookup

    非交互式運行模式用于我們已知所要查詢的主機IP地址或主機名稱的時候,它們通常作為“nslookup”命令的第一個參數,第二個參數通常為域名服務器的IP地址或主機名稱。

    dnsquery

    dnsquery程序提供了一個通過調用BIND解釋庫來訪問域名服務器的通用界面。應用這個程序的目的是作為“nslookup”程序的補充和替代。

    通過解釋器訪問域名服務器,使用命令:

    [root@deep]# dnsquery <-n nameserver>

    例如:

    [root@deep]# dnsquery -n localhost 192.168.1.2

    其中<-n nameserver>代表查詢中所用的域名服務器,它可以是IP地址的形式w.x.y.z或域名兩種形式(缺省在“/etc/resolv.conf”文件中指定)代表Internet上的主機或域的名字。

    host

    “host”程序用于檢索Internet上的主機信息。它從遍布在世界各地的互相連接在一起的服務器來獲取這些信息。缺省情況下,它僅完成域名和IP地址之間的轉換。然而,“-t”及“-a”兩個選項用于查詢存儲在域服務器內的主機的所有信息。

    通過域服務器查找主機名稱,用以下命令:

    [root@deep]# host

    例如:

    [root@deep]# host deep.openarch.com

    其中表示即可以是FDQN,例如(deep.openarch.com),域名,例如 (openarch.com),主機名稱,例如(deep),也可以是IP地址,例如(192.168.1.1)。

    為查詢主機的所有信息,使用命令:

    [root@deep]# host <-a domain names >

    例如:

    [root@deep]# host -a openarch.com

    其中表示域名,例如(openarch.com)。這個選項用于找出域服務器內關于這臺主機的所有信息。

    為獲取全域的列表,使用下列命令:

    [root@deep]# host <-l domain names >

    例如:

    [root@deep]# host -l openarch.com

    其中表示域名,例如(openarch.com)。這個選項用于獲取整個域(openarch.com)以主記錄格式保存的區帶數據,服務器內關于這臺主機的所有信息。

    注意:“-l”是通過先進行一次完全的區帶轉移而后過濾出你所需要的信息來實現的。此項命令只有在必要時才可使用。

    安裝到系統中的文件
    > /etc/rc.d/init.d/named
    > /etc/rc.d/rc0.d/K45named
    > /etc/rc.d/rc1.d/K45named
    > /etc/rc.d/rc2.d/K45named
    > /etc/rc.d/rc3.d/K45named
    > /etc/rc.d/rc4.d/K45named
    > /etc/rc.d/rc5.d/K45named
    > /etc/rc.d/rc6.d/K45named
    > /etc/named.conf
    > /usr/bin/addr
    > /usr/bin/nslookup
    > /usr/bin/dig
    > /usr/bin/dnsquery
    > /usr/bin/host
    > /usr/bin/nsupdate
    > /usr/bin/mkservdb
    > /usr/lib/bind
    > /usr/lib/bind/include
    > /usr/lib/bind/include/arpa
    > /usr/lib/bind/include/arpa/inet.h
    > /usr/lib/bind/include/arpa/nameser.h
    > /usr/lib/bind/include/arpa/nameser_compat.h
    > /usr/lib/bind/include/isc
    > /usr/lib/bind/include/isc/eventlib.h
    > /usr/lib/bind/include/isc/misc.h
    > /usr/lib/bind/include/isc/tree.h
    > /usr/lib/bind/include/isc/logging.h
    > /usr/lib/bind/include/isc/heap.h
    > /usr/lib/bind/include/isc/memcluster.h
    > /usr/lib/bind/include/isc/assertions.h
    > /usr/lib/bind/include/isc/list.h
    > /usr/lib/bind/include/isc/dst.h
    > /usr/lib/bind/include/isc/irpmarshall.h
    > /usr/lib/bind/include/netdb.h
    > /usr/lib/bind/include/resolv.h
    > /usr/lib/bind/include/res_update.h
    > /usr/lib/bind/include/irs.h
    > /usr/lib/bind/include/irp.h
    > /usr/lib/bind/include/hesiod.h
    > /usr/lib/bind/include/sys
    > /usr/lib/bind/include/net
    > /usr/lib/bind/lib
    > /usr/lib/bind/lib/libbind.a
    > /usr/lib/bind/lib/libbind_r.a
    > /usr/lib/nslookup.help
    > /usr/man/man1/dig.1
    > /usr/man/man1/host.1
    > /usr/man/man1/dnsquery.1
    > /usr/man/man1/dnskeygen.1
    > /usr/man/man3/hesiod.3
    > /usr/man/man3/gethostbyname.3
    > /usr/man/man3/inet_cidr.3
    > /usr/man/man3/resolver.3
    > /usr/man/man3/getnetent.3
    > /usr/man/man3/tsig.3
    > /usr/man/man3/getaddrinfo.3
    > /usr/man/man3/getipnodebyname.3
    > /usr/man/man5/resolver.5
    > /usr/man/man5/irs.conf.5
    > /usr/man/man5/named.conf.5
    > /usr/man/man7/hostname.7
    > /usr/man/man7/mailaddr.7
    > /usr/man/man8/named.8
    > /usr/man/man8/ndc.8
    > /usr/man/man8/named-xfer.8
    > /usr/man/man8/named-bootconf.8
    > /usr/man/man8/nslookup.8
    > /usr/man/man8/nsupdate.8
    > /usr/sbin/ndc
    > /usr/sbin/named
    > /usr/sbin/named-xfer
    > /usr/sbin/irpd
    > /usr/sbin/dnskeygen
    > /usr/sbin/named-bootconf
    > /var/named

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>