DNS 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
sudo chown named:named -R /var/log/namedlog
~ 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 (是否有安裝)
如果是~~
那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/
來修改該目錄的權限。