201311180204DNS Server 開啟 Log 記錄檔 - BIND

 這是個怪問題,為何要特別講「開啟 DNS (Bind) 的紀錄檔呢?」一般服務的紀錄(Log) 是由 rsyslog 在 /etc/rsyslog.conf 登記哪些項目要被LOG,但 BIND 是直接在 /etc/named.conf 去記載,另一個原因是DNS的查詢記錄會成長的非常的快,沒多久就可能撐爆你的 root partition。

所以DNS相安無事的時候,你 named.conf 的 log 片段可能為
 

logging {
             category lame-servers { null; };
}; 

 

但是當你需要查詢 DNS 的 Query 紀錄時,你就必須增加 log 的設定片段,當然底下的四個項目,你不要全用當然也可以
 

logging
{
    channel default-log {
        file "/var/log/named_default.log" versions 10 size 200m;
        severity info;
        print-time yes;
    };
    channel lamer-log {
        file"/var/log/named_lamer.log" versions 3 size 100m;
        severity info;
        print-severity yes;
        print-time yes;
        print-category yes;
    };
    channel query-log {
        file "/var/log/named_query.log" versions 10 size 1000m;
        severity info;
        print-time yes;
    };
    channel security-log {
        file"/var/log/named_security.log" versions 3 size 100m;
        severity info;
        print-severity yes;
        print-time yes;
        print-category yes;
    };
    category lame-servers { lamer-log; };
    category security{ security-log;};     category queries { query-log;};
    category default { default-log;};
};

 

當中的 log 種類為

> lamer 是用來記錄在本DNS上查不到的記錄
18-Nov-2013 09:53:04.277 lame-servers: info: FORMERR resolving 'ib.sin1.geoadnxs.com/AAAA/IN': 64.208.141.11#53 

security 用來記錄拒絕存取之類
18-Nov-2013 09:53:35.097 security: info: client 1.160.178.176#63736: query (cache) 'imgcdn.ptvcdn.net/A/IN' denied 

default  用來記錄BIND啟動記錄及 zone transfer 的狀態
18-Nov-2013 13:05:31.862 client 140.156.116.37#49152: update 'ntu.edu.tw/IN' denied 

query 用來記錄 client 透過此  DNS 的所有紀錄
18-Nov-2013 09:52:59.137 client 140.156.16.199#61234: query: bbcore.cloudapp.net IN A + 

 

設定的屬性說明

>> size 一個檔案的大小
>> severity 所擷取的Log 等級
>> print-severity 是否顯示 Log 的等級
>> print-category 是否顯示 Log 的等級
>> print-time 是否顯示Log的日期及時間

 

設定完 /etc/named.conf 只要重新載入設定檔就OK了,你可以使用

sudo /etc/init.d/named restart

 

正常重新啟動 named 後,表示你的 /etc/named.conf 沒改錯,但要去觀察一下剛剛指定的 /var/log 下是否產生了對應的 log 檔,

若有錯的話會在 /var/log/messages 有類似這樣的紀錄

Nov 18 09:26:14 dns3 named[31839]: isc_log_open '/var/log/named_query.log' failed: permission denied

這時 named 是正常執行的,只是無法寫入 log 檔

你可以視需要 touch 這個記錄檔,再用 chmod / chown 給予 named 寫入的權限

 

後記:為避免發生

 

Nov 21 14:32:15 dns named[32294]: unable to rename log file '/var/log/security-log' to '/var/log/security-log.0': permission denied

這種 permission denied 問題,你可以在 /var/log 下另外建立一個目錄,然後把這個目錄

sudo mkdir /var/log/namedlog
sudo chown named:named -R 
/var/log/namedlog
 
這樣 logrotate 跟 named 把 log 做 rename 就不會有權限問題

~ End

[20140429 更新]   參考:http://www.zytrax.com/books/dns/ch7/logging.html 

Log 的格式

logging {
   [ channel channel_name {
     ( file path name
         [ versions ( number | unlimited ) ]
         [ size size_spec ]
       | syslog syslog_facility
       | stderr
       | null );
     [ severity (critical | error | warning | notice |
                 info | debug [ level ] | dynamic ); ]
     [ print-category yes | no; ]
     [ print-severity yes | no; ]
     [ print-time yes | no; ]
   }; ]
   [ category category_name {
     channel_name ; [ channel_name ; ... ]
   }; ]
   ...
};

 

[20150319 更新]
如果你在設定完 LOG 選項,然後啟動 named 會得到類似底下的錯誤
Mar 19 11:05:04 DNS1 named[4793]: isc_stdio_open '/var/log/named/default-log' failed: file not found
Mar 19 11:05:04 DNS1 named[4793]: isc_stdio_open '/var/log/named/lamer-log' failed: file not found
Mar 19 11:05:04 DNS1 named[4793]: isc_stdio_open '/var/log/named/query-log' failed: file not found
Mar 19 11:05:04 DNS1 named[4793]: isc_stdio_open '/var/log/named/security-log' failed: file not found
Mar 19 11:05:04 DNS1 named[4793]: isc_log_open '/var/log/named/default-log' failed: file not found

明明已經在 /var/log/named/  建立了目錄與相關的LOG空檔案,並且 chown named.named -R /var/log/named/  ,但怎麼還是在 /var/log/messages 中顯示找不到檔案呢?

==>>> 這時請回想你是否有啟用  bind-chroot  (是否有安裝)


### bind-chroot  chroot 的問題 ###

如果是~~
那LOG的記錄檔位置,應該要變成 /var/named/chroot/var/log/named  ,但是 named 不會自動建立 chroot 下的 log 下你自訂的記錄檔位置,只要把你預先建立的那些空記錄檔,移動到這就OK了。
sudo mkdir /var/named/chroot/var/log/
sudo mv /var/log/named/   /var/named/chroot/var/log/

如果是 selinux 的問題(關閉 selinux 就能寫入),可以嘗試以
chcon -R system_u:object_r:named_cache_t /var/named/chroot/var/log/named/
來修改該目錄的權限。

 ------20160219 更新--------------------------------------------------------

如果你在執行「chcon」時發生,即使給了 chmod 777 還是一樣無法寫入「DNS named[1864]: unable to rename log file '/var/log/named/query-log' to '/var/log/named/query-log.0': permission denied」
# sudo chcon -R system_u:object_r:named_cache_t /var/named/chroot/var/log/named/
chcon: failed to change context of ‘default-log’ to ‘system_u:object_r:named_cache_t’: 不適用的引數
chcon: failed to change context of ‘security-log’ to ‘system_u:object_r:named_cache_t’: 不適用的引數

不用懷疑,那就是 selinux 權限的問題,解決方法為:

sudo service named stop
sudo chcon -R system_u:object_r:named_cache_t /var/named/chroot/var/log/named/
sudo service named start

問題就是這些 log file 被 named 咬住了,要先停止 named 才能修改檔案的 selinux 權限

若還是不行就,就是把 selinux 關掉改完再打開

setenforce 0
sudo chcon -R system_u:object_r:named_cache_t /var/named/chroot/var/log/named/
setenforce 1

~End

回應
關鍵字
Google Search
Google
累積 | 今日
loading......
平均分數:0 顆星
投票人數:0
我要評分:
Google