Bind9-提供 Domain Name 與 IP 對應的服務

| |
[2010/09/11 10:23 | 分类: linux | by hero ]
Bind9-提供 Domain Name 與 IP 對應的服務
內容

   1. 前言
   2. 實作環境
   3. 安裝及設定
         1. 步驟1.本機反解範例檔案 (localhost.rev)
         2. 步驟2.修改 DNS 設定檔 (named.conf)
               1. 步驟2-1.安全性設定 - 隱藏 BIND DNS 版本
               2. 步驟2-2.安全性設定 - 存取控制清單 ACLs
               3. 步驟2-3.限制來源查詢要求 (allow-query)
               4. 步驟2-4.限制來源查詢要求 (allow-recursion)
               5. 步驟2-5.限制特定 Zone 查詢要求 (allow-query)
               6. 步驟2-6.安全性設定 - Zone Transfer 限制
               7. 步驟2-7.進階性設定 - 代詢伺服器機制
         3. 步驟3.建立 named.weithenn.for 檔案 (Forward)
         4. 步驟4.修改服務設定檔 (rc.conf)
         5. 步驟5.修改本機 DNS 查詢設定檔 (resolv.conf)
         6. 步驟6.啟動 DNS 服務
   4. 安全性設定測試
         1. 測試1.隱藏 BIND DNS 版本
         2. 測試2.Zone Transfer 限制
   5. 參考
   6. Me FAQ

前言

DNS,Domain Name Service 主要目地為解決 Domain Name 與 IP Address 之間相互的對應問題,在網路世界間中的溝通其實就是使用 IP Address 來溝通 (就像是人類使用的身份證),但一連串的數字這樣對人類來說太過於麻煩,因此便出現 Domain Name Service 服務來將 IP Address 轉換成人類可方便閱讀的 Domain Name,簡單來說就是例如: 您輸入的 Yahoo 網址 http://tw.yahoo.com 轉成 IP Address 以便連結到 Yahoo 的網頁伺服器,關於網域名稱服務可參考站內文章 DNS 伺服器的原理與運作流程

FreeBSD 5.3-RELEASE 起內建 Bind9 不但安全性相對提高,並也把 Chroot 功能給加了進來,比較不習慣的可能就是設定檔的路徑

/etc/namedb/               //原本設定檔實際路徑 (系統自動幫您連結至 Chroot 功能新路徑 /var 下)
/var/named/etc/namedb/     //Bind9 設定檔的實際路徑

實作環境

    * FreeBSD 6.x-RELEASE
          o FreeBSD 6.1、6.2-RELEASE
    * FreeBSD 5.x-RELEASE
          o FreeBSD 5.3、5.4-RELEASE
    * BIND 9.3.x
          o BIND 9.3.0、9.3.3

安裝及設定
步驟1.本機反解範例檔案 (localhost.rev)

執行下列指令產生本機反解範例檔案 localhost.rev,產生的範例檔案 (localhost.rev 及 localhost-v6.rev) 將產生於 /var/named/etc/namedb/master 目錄下。

#cd /var/named/etc/namedb/                          //切換路徑                
#sh make-localhost                                  //產生範例檔

步驟2.修改 DNS 設定檔 (named.conf)

修改 DNS 設定檔 named.conf

#vi /var/named/etc/namedb/named.conf                //編輯 named.conf 內容如下

步驟2-1.安全性設定 - 隱藏 BIND DNS 版本

為何要隱藏您的 BIND DNS 版本呢? 原因在於有心人士可以透過先瞭解您 DNS 主機所運作的 BIND 版本來尋找相關漏洞攻擊程式,因此在 ISC BIND 建議下可透過設定來隱藏 BIND 系統版本。

options {
        directory       "/etc/namedb";
        pid-file        "/var/run/named/pid";
        dump-file       "/var/dump/named_dump.db";   //將資料庫內容 Dump 出來路徑 (執行rndc dumpdb)
        statistics-file "/var/stats/named.stats";    //統計資訊路徑 (執行rndc stats)
        version         "None of your business";     //當別人查詢您的 BIND 版本時顯示的文字內容

步驟2-2.安全性設定 - 存取控制清單 ACLs

我們可以利用設定存取控制清單 (ACL,Access Control List,) 功能來限制外來對 Domain 的查詢要求並且配合 Allow-Query 參數來限制所有或特定 Zone 的查詢要求。

acl "dns1.weithenn.org" { 61.60.59.58; };
acl "dns2.weithenn.org" { 61.60.59.57; };

步驟2-3.限制來源查詢要求 (allow-query)

DNS Server 僅回應列表中 IP Address 的查詢要求,這裡的 allow-query 限制為針對 DNS Server

options {
          allow-query { 168.95.192.1/32; 168.95.1.1/32; dns1.weithenn.org; dns2.weithenn.org; };
};

步驟2-4.限制來源查詢要求 (allow-recursion)

允許哪些來源可以使用 DNS Server 進行遞迴查詢動作。簡單說就是透過這台 DNS 來查詢任何資料,包含不是該 DNS 主機負責的 Zone 也代為查詢,您應該不想讓別人用您的 DNS Server 去探查別人的 DNS 主機資訊吧?

options {
          allow-recursion { 127.0.0.1/32; 61.60.59.58/32; };
};

步驟2-5.限制特定 Zone 查詢要求 (allow-query)

DNS Server 僅回應列表中 IP Address 的查詢要求,這裡的 allow-query 限制為針對區域 (Zone),當您設定限制所有或特定 Zone 的查詢要求時,其特定 Zone 設定優先權將大為限制所有查詢要求。

zone "weithenn.org" {
        type master;
        file "master/named.weithenn.for";
        allow-query { dns2.weithenn.org; };        //僅回應這個 IP 的查詢要求
};

步驟2-6.安全性設定 - Zone Transfer 限制

DNS 架構下常需透過更新 Zone File 動作來更新 DNS Master 及 DNS Slave 間 Zone File 的資料,在信任網域下將 Zone File 資料列出是 OK 的,但若是能由外界進行查詢您 Zone 資料時將會演變為具有危險的行為,想想若有人知道您 Zone File 設定都一清二楚那他即可針對特定主機進行攻擊行為,因此限制您的 Zone Transfer 將更顯重要。比較常被忘記的部份為會記得設定 DNS Master 其 allow-transfer 對象為 DNS Slave,但別忘記了 DNS Slave 必須設定 allow-transfer { "none"; }; 避免您的 Zone File 從 DNS Slave 端被傳送出去這是比較容易被忘記的設定。

zone "weithenn.org" {
        type master;
        file "master/named.weithenn.for";
        allow-transfer { 61.60.59.57; };           //僅此 IP 能 Zone Transfer 此 Zone File
        allow-transfer { dns2.weithenn.org; };     //可配合 ACLs 使用
};

步驟2-7.進階性設定 - 代詢伺服器機制

代詢伺服器 (Forwarders) 機制為當您為您的站台指派代詢伺服器後,那麼所有對外的 DNS 查詢都會先送到您所指定的代詢伺服器,讓代詢伺服器利用快取資訊幫您快速回應 DNS 查詢,在台灣我們可設定全台最大的 DNS 快取伺服器其設定內容如下:

forwarders {
                168.95.192.1;
                168.95.1.1;
};

設定好 named.conf 後可利用 BIND 9 新增加的指令 named-checkconf 來檢查 named.conf 設定檔語法是否正確,若語法正確則執行完指令後將不會有任何訊息,若語法有錯會顯示錯誤訊息及行數。

/usr/sbin/named-checkconf                        //檢查 named.conf 語法是否有錯
                           -v                     //顯示 named-checkconf 版本

步驟3.建立 named.weithenn.for 檔案 (Forward)

建議您可複製剛才建立的反解範例檔案 localhost.rev 再進行修改可避免 keyin 錯誤。

    * SOA: 為標準區域中的第一筆記錄,之後括號 () 內為與次要 DNS 溝通的相關資訊,其數值單位為 (秒)
          o Serial: 區域版本編號
          o Refresh: 同步更新時間
          o Retry: 重試同步時間
          o Expire: 同步到期時間
          o Minimum: 最小快取存活時間

#vi /var/named/etc/namedb/master/named.weithenn.for   //建立正解檔內容如下
$TTL      86400
@       IN      SOA     user.weithenn.org. hostmaster.weithenn.org. (
                                      2005042601 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
               IN      NS      gateway
               IN      A       61.60.59.58
gateway       IN      A       61.60.59.58
www           IN      A       61.60.59.58
mail          IN      A       61.60.59.58  
@             IN      MX  10  mail

設定好 named.weithenn.for 後可利用 BIND 9 新增加的指令 named-checkzone 來檢查 named.weithenn.for 設定檔語法是否正確,若語法正確則執行完指令後將不會有任何訊息,若語法有錯會顯示錯誤訊息及行數。

/usr/sbin/named-checkzone weithenn.org named.weithenn.for         //檢查語法是否有錯
/usr/sbin/named-checkzone -d weithenn.org named.weithenn.org      //開啟除錯功能
                           -v                                      //顯示 named-checkconf 版本

步驟4.修改服務設定檔 (rc.conf)

修改 /etc/rc.conf 中加入下列的設定以便在系統重新開機時時會啟動 DNS 服務

#vi /etc/rc.conf                                                  //編輯rc.conf內容如下
named_enable="YES"                                                //啟動 named 服務  
named_flags="-u bind"                                             //採用 bind 這個帳號來啟動 DNS 服務 (安全性設定)

步驟5.修改本機 DNS 查詢設定檔 (resolv.conf)

修改本機 DNS 查詢設定檔 /etc/resolv.conf 加上 Domain Name 及本機 IP Address,關於此設定檔詳細內容可參考站內文章 resolv.conf

#vi /etc/resolv.conf                                              //修改設定檔加入如下三行
domain weithenn.org
nameserver 127.0.0.1                                              
nameserver 61.60.59.58

步驟6.啟動 DNS 服務

請鍵入如下指令啟動 DNS 服務

#/etc/rc.d/named start                                            //啟動 DNS 服務
                  stop                                             //停止 DNS 服務
                  restart                                          //重新啟動 DNS 服務
                  rcvar                                            //顯示應該填入 rc.conf 的內容
                  reload                                           //重新讀取 DNS 設定檔
                  status                                           //顯示目前 DNS 狀態

安全性設定測試

剛才上面的安全性設定完成後,我們測試一下剛才的安全性設定是否生效
測試1.隱藏 BIND DNS 版本

透過下列指令來測試是否無法查詢到 BIND 版本 (DNS_Server就是您要測那一台的 domain name 或是 IP 也可以),不過隱藏 BIND DNS 版本不代表就絕對安全,只是讓攻擊者無法馬上得知您的 BIND DNS 版本 (好讓他方便找該版本漏洞)。

#dig -t txt -c chaos VERSION.BIND DNS_Server

若設定正確則可看到回應 VERSION.BIND 就是您填入的內容,若沒設定好當然版本就被順利查詢到啦。

;; ANSWER SECTION:
VERSION.BIND.           0       CH      TXT     "None of your business" //隱藏版本成功
VERSION.BIND.           0       CH      TXT     "9.3.0"                 //隱藏版本失敗

測試2.Zone Transfer 限制

檢測方式 (以 nslookup 為例 )

#nslookup                                                               //進入 nslookup 交談模式
>server weithenn.org                                                    //指定以 weithenn.org 為 NS 做查詢
Default Server: weithenn.org
Address: 61.60.59.58    
>ls -d weitenn.org                                                      //檢查是否限制無法查尋 Zone File
[weithenn.org] ***
  Can't list domain weitenn.org: Unspecified error

參考

[FreeBSD Handbook-BIND9 and FreeBSD]

[FreeBSD 使用手册-BIND9 和 FreeBSD]

[ DNS系統的強化與保護]

[BIND - logging file not found - LinuxQuestions.org]

[サーバ設定手順・パソコントラブル解決・エラー解決・コマンド集・プログラミング/「GOBU」(ゴブ)]

[DNS/BIND Issue: “named: the working directory is not writable” | Slaptijack]

[named: the working directory is not writable - The FreeBSD Forums]
Me FAQ

Q1.logging channel 'security_log' file '/var/log/named/dns-security.log': file not found?

Error Message:

啟動 DNS 服務後,在系統訊息中看見如下錯誤訊息

#tail /var/log/messages
Jul 14 13:21:06 ms1 named[59648]: starting BIND 9.4.3-P2 -u bind -t /var/named -u bind
Jul 14 13:21:06 ms1 named[59648]: command channel listening on 127.0.0.1#953
Jul 14 13:21:06 ms1 named[59648]: the working directory is not writable
Jul 14 13:21:06 ms1 named[59648]: logging channel 'default_log' file '/var/log/named/dns-default.log': file not found
Jul 14 13:21:06 ms1 named[59648]: logging channel 'lamer_log' file '/var/log/named/dns-lamer.log': file not found
Jul 14 13:21:06 ms1 named[59648]: logging channel 'query_log' file '/var/log/named/dns-query.log': file not found
Jul 14 13:21:06 ms1 named[59648]: logging channel 'security_log' file '/var/log/named/dns-security.log': file not found
Jul 14 13:21:06 ms1 named[59648]: isc_log_open '/var/log/named/dns-default.log' failed: file not found
Jul 14 13:21:07 ms1 named[59648]: isc_log_open '/var/log/named/dns-query.log' failed: file not found
Jul 14 13:21:13 ms1 named[59648]: isc_log_open '/var/log/named/dns-lamer.log' failed: file not found

Ans:

原因在於設定檔中指定的路徑並非實體路徑,而是相對於 Chroot 服務的相對路徑,可看到 DNS 執行序為 -t /var/named 配合 named.conf 中指定的相對路徑才是最後 Log 寫入路徑。

#ps aux |grep named
bind     59648  0.0  0.5 20724 16852  ??  Ss    1:21PM   0:00.12 /usr/sbin/named -u bind -t /var/named -u bind

而 named.conf 設定檔中內容如下

logging {
    category lame-servers { lamer_log; };                            //在本DNS上查不到的記錄(遞迴查詢)
    category security{ security_log;};                               //安全記錄
    category queries { query_log;};                                  //查詢記錄
    category default {default_log;};                                 //BIND啟動記錄
    channel default_log {
        file "/var/log/named/dns-default.log" versions 10 size 20m;  //此 Log 寫入路徑為 /var/named/var/log/named/dns-default.log (修改前)
        file "/var/log/dns-default.log" versions 10 size 20m;        //此 Log 寫入路徑為 /var/named/var/log/dns-default.log (修改後)
        severity info;
    };

Q2.the working directory is not writable?

Error Message:

啟動 DNS 服務後,在系統訊息中看見如下錯誤訊息

#tail /var/log/messages
Jul 14 15:18:01 ms1 named[64145]: starting BIND 9.4.3-P2 -t /var/named -u bind
Jul 14 15:18:01 ms1 named[64145]: command channel listening on 127.0.0.1#953
Jul 14 15:18:01 ms1 named[64145]: the working directory is not writable

Ans:

若您確定在 /var/named 下權限設定正確 (owner bind) 後啟動 DNS 服務仍看到錯誤訊息,請依如下步驟進行修改後再重新啟動 DNS 服務即可解決。

#vi /etc/mtree/BIND.chroot.dist
/set type=dir uname=root gname=wheel mode=0755             //預設值
/set type=dir uname=bind gname=wheel mode=0755             //修改後
#/etc/rc.d/named restart                                   //修改完成後重新啟動 DNS 服務

首頁 最新文章 FreeBSD 筆記 Linux 筆記 Windows 筆記 隨機文章 關於本站 遊山玩水
沙子地方 翔賀香腸 刊登廣告 刊登廣告 刊登廣告
本頁是唯讀的 參閱其他版本 管理 Oddmuse
最後編輯於 2009-07-22 11:14 CST 由 Weithenn

搜尋:
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com
Tags:
評論(0) | 引用(0) | 閱讀(4614)
發表評論
暱稱 [註冊]
密碼 訪客無需密碼
網址
電郵
開啟HTML 開啟UBB 開啟表情 隱藏 記住我