转: http://www.weithenn.org/cgi-bin/wiki.pl?Bind9-%E6%8F%90%E4%BE%9B_Domain_Name_%E8%88%87_IP_%E5%B0%8D%E6%87%89%E7%9A%84%E6%9C%8D%E5%8B%99
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 設定檔的實際路徑
執行下列指令產生本機反解範例檔案 localhost.rev,產生的範例檔案 (localhost.rev 及 localhost-v6.rev) 將產生於 /var/named/etc/namedb/master 目錄下。
#cd /var/named/etc/namedb/ //切換路徑 #sh make-localhost //產生範例檔
修改 DNS 設定檔 named.conf
#vi /var/named/etc/namedb/named.conf //編輯 named.conf 內容如下
為何要隱藏您的 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 版本時顯示的文字內容
我們可以利用設定存取控制清單 (ACL,Access Control List,) 功能來限制外來對 Domain 的查詢要求並且配合 Allow-Query 參數來限制所有或特定 Zone 的查詢要求。
acl "dns1.weithenn.org" { 61.60.59.58; };
acl "dns2.weithenn.org" { 61.60.59.57; };
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; };
};
允許哪些來源可以使用 DNS Server 進行遞迴查詢動作。簡單說就是透過這台 DNS 來查詢任何資料,包含不是該 DNS 主機負責的 Zone 也代為查詢,您應該不想讓別人用您的 DNS Server 去探查別人的 DNS 主機資訊吧?
options {
allow-recursion { 127.0.0.1/32; 61.60.59.58/32; };
};
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 的查詢要求
};
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 使用
};
代詢伺服器 (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 版本
建議您可複製剛才建立的反解範例檔案 localhost.rev 再進行修改可避免 keyin 錯誤。
#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 版本
修改 /etc/rc.conf 中加入下列的設定以便在系統重新開機時時會啟動 DNS 服務
#vi /etc/rc.conf //編輯rc.conf內容如下 named_enable="YES" //啟動 named 服務 named_flags="-u bind" //採用 bind 這個帳號來啟動 DNS 服務 (安全性設定)
修改本機 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
請鍵入如下指令啟動 DNS 服務
#/etc/rc.d/named start //啟動 DNS 服務
stop //停止 DNS 服務
restart //重新啟動 DNS 服務
rcvar //顯示應該填入 rc.conf 的內容
reload //重新讀取 DNS 設定檔
status //顯示目前 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" //隱藏版本失敗
檢測方式 (以 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]
[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]
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 //修改後
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 設定檔的實際路徑
執行下列指令產生本機反解範例檔案 localhost.rev,產生的範例檔案 (localhost.rev 及 localhost-v6.rev) 將產生於 /var/named/etc/namedb/master 目錄下。
#cd /var/named/etc/namedb/ //切換路徑 #sh make-localhost //產生範例檔
修改 DNS 設定檔 named.conf
#vi /var/named/etc/namedb/named.conf //編輯 named.conf 內容如下
為何要隱藏您的 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 版本時顯示的文字內容
我們可以利用設定存取控制清單 (ACL,Access Control List,) 功能來限制外來對 Domain 的查詢要求並且配合 Allow-Query 參數來限制所有或特定 Zone 的查詢要求。
acl “dns1.weithenn.org” { 61.60.59.58; }; acl “dns2.weithenn.org” { 61.60.59.57; };
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; }; };
允許哪些來源可以使用 DNS Server 進行遞迴查詢動作。簡單說就是透過這台 DNS 來查詢任何資料,包含不是該 DNS 主機負責的 Zone 也代為查詢,您應該不想讓別人用您的 DNS Server 去探查別人的 DNS 主機資訊吧?
options { allow-recursion { 127.0.0.1/32; 61.60.59.58/32; }; };
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 的查詢要求 };
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 使用 };
代詢伺服器 (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 版本
建議您可複製剛才建立的反解範例檔案 localhost.rev 再進行修改可避免 keyin 錯誤。
#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 版本
修改 /etc/rc.conf 中加入下列的設定以便在系統重新開機時時會啟動 DNS 服務
#vi /etc/rc.conf //編輯rc.conf內容如下 named_enable=”YES” //啟動 named 服務 named_flags=”-u bind” //採用 bind 這個帳號來啟動 DNS 服務 (安全性設定)
修改本機 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
請鍵入如下指令啟動 DNS 服務
#/etc/rc.d/named start //啟動 DNS 服務 stop //停止 DNS 服務 restart //重新啟動 DNS 服務 rcvar //顯示應該填入 rc.conf 的內容 reload //重新讀取 DNS 設定檔 status //顯示目前 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″ //隱藏版本失敗
檢測方式 (以 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]
[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]
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 服務
#/etc/rc.d/named restart //修改完成後重新啟動 DNS 服務

Categories
Tag Cloud
Blog RSS
Comments RSS
Last 50 Posts
Back
Back
Void « Default
Life
Earth
Wind
Water
Fire
Light 