BIND配置文件詳解(一)

本文檔摘錄自《BIND9管理員手冊》,若是有不對或者不清楚的地方,請你們告訴我,謝謝!
 
BIND配置文件詳解(一)
 
BIND配置文件語法介紹
BIND配置文件語法介紹
logging 和options 語句只在每一個配置中出現一次。
 
1.acl語句
acl 語句的定義和使用
acl 語句給一個地址匹配表賦予了一個象徵名稱。它的名字來自於地址匹配列表的最基本功能:訪問控制表列(ACLs)。
注意,一個地址表名必須首先在acl中定義了,而後才能在別處使用;提早調用是不容許的。
acl acl-name { address_match_list };
下列ACLs 組成:
acls
localhost 和localnets 的ACLs 目前不支持IPV6(也就是說,localhost不匹配主機的IPV6地址,localnets不匹配連上IPV6 網絡的主機),由於缺少肯定本地IPV6 主機地址的標準方法。
 
2.controls語句
控制語句 controls 的定義和使用
controls {
inet ( ip_addr | * ) [ port ip_port ] allow { address_match_list }
keys { key_list };
[ inet ...; ]
};
controls 語句定義了系統管理員使用的,有關本地域名服務器操做的控制通道。這些控制通道被rndc用來發送命令,並從域名服務器中檢索非DNS的結果。
 
inet 控制通道是一個監聽在ip_addr(能夠是ipv4或ipv6地址)地址上的ip_port端口的TCP socket。ip_addr 是「*」的話,則說明是一個ipv4的通配符;容許接受系統上的任何IPV4地址上的用戶鏈接。要想監聽全部ipv6地址上的鏈接,則應該使用「::」做爲ip_addr。若是僅想在本地主機上使用rndc,建議使用loopback 地址(127.0.0.1 或::1)以得到最大安全性。
 
allow和keys子語用來限制經過控制通道發出命令的能力。根據address_match_list中的定義,來監控控制通道上的用戶鏈接。address_match_list中的key_id成員則被忽略,反之則根據key_list來單獨的表示。每一個在key_list中的key_id都容許用來鑑別經過控制通道傳送的命令和響應,這些服務器和用戶端之間的命令和響應都通過了數字簽名的技術處理。全部通過控制通道的命令都必須使用設置的密匙進行加密。若是沒有設置controls語句,named就會創建一個默認控制通道,監聽loopback地址127.0.0.1 和對應的IPV6地址::1。當有一個controls 語句,但沒有key子句時,named將會試着從文件/etc/rndc.key(或者任意在BIND編譯時設定的sysconfdir)中讀取命令通道密匙。用rndc-confgen –a 命令,建立一個rndc.key文件。
 
rndc.key是用來簡化從BIND8系統上的升級過程,由於BIND8 在它的命令通道中沒有使用數字簽名,也就沒有key子句。這樣,在BIND9安裝後執行rndc-confgen –a 命令,BIND9就能夠繼續使用和BIND8同樣的配置文件,並仍然使用相似於BIND8中的ndc同樣的工做方式。既然rndc.key 的特性只是用於兼容BIND8配置文件,因此它的配置就沒有什麼高難度。
 
當用戶想修改加密的信息時,固然不能簡單的修改密匙名稱和加密程度,而應該用用戶本身的密匙來生成新的rndc.conf文件。rndc.key文件也有本身的讀取權限設置,只有文件的全部者(運行named的用戶)能夠訪問。若是用戶要求能有更多的用戶可以使用rndc,則生成rndc.conf文件時,將文件屬組的權限置爲可讀,並將這些用戶納入這個組就能夠了。
要想禁止掉命令通道,則使用一條空controls語句:controls { }; 便可。
 
3.include語句
include語句的定義和使用
include 文件名;
include語句經過容許對配置文件的讀或寫,來簡化對配置文件的管理。例如,它能夠包含多個只能由域名服務器讀取的私人密匙(private key)。
 
4. key語句
key語句的定義和使用
key key_id {
algorithm string;
secret string;
};
key 語句定義了一個用於TSIG的共享密匙。
key 語句能夠出如今配置文件的開始或者在一個view語句中。定義在開始的key語句能夠在全部視圖中應用。在controls語句中使用的key必須事先定義在文件的開始。
key_id,也叫作密匙名,是確認一個域名的惟一密匙。能夠在一個「server」語句中使用,使得發給這個服務器的請求都會用這個密匙進行加密,或者用於確認來自於地址匹配列表中的主機的請求,是否已經用這個名字、算法和secret的密匙進行了加密。
algorithm_id 是一個標記安全/鑑定的字符串。目前惟一由TSIG鑑別支持的算法是hmac-md5。secret_string 是算法要使用的機密級,是一個64位編碼的字符串。
 
5.logging語句
日誌logging語句的定義和使用
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 or no; ]
[ print-severity yes or no; ]
[ print-time yes or no; ]
}; ]
[ category category_name {
channel_name ; [ channel_name ; … ]
}; ]
...
};
logging語句爲域名服務器設定了一個多樣性的logging選項。它的channel短語對應於輸出方式、格式選項和分類級別,它的名稱能夠與category短語一塊兒定義多樣的日誌信息。
 
只用一個logging語句就能夠用來定義多個channel和category。若是沒有logging 語句的話,logging設置就是:
logging {
category "unmatched" { "null"; };
category "default" { "default_syslog"; "default_debug"; };
};
 
在BIND9中,logging的配置只有在整個配置文件被讀取後才被執行。而在BIND8中,logging部分被讀取後就開始執行了。當服務器啓動時,全部在配置文件中關於語法錯誤的logging信息都轉到缺省通道(channel)中,或者使用」-g」選項,指定轉成標準錯誤。
 
A.channel 短語
全部日誌會輸出到一個或多個channel中;你能夠定義全部你想要的通道。每一個通道的定義必須包括一個目的字句,用來肯定所選的相關通道的信息,將會被輸出到一個文件,或者到一個特殊的syslog工具,或者到一個標準錯誤流,或者被忽略。它也能夠隨意的限制通道能接受的信息級別(默認值info),定義是否包含一個由named產生的時間標記,或者是否包含分類的名稱、級別等(默認是不包含任何內容)。
目的子句爲null時,會使全部發送給通道的信息被丟棄;那樣的話,其餘通道選項就沒有意義了。
目的子句爲file 時,會使通道的內容輸出到一個磁盤文件。它能夠包含這個文件的大小和該文件能夠保存多少個版本。
若是使用versions日誌文件選項,named就會自動保留多個版本的日誌文件。例如,若是選擇保存文件lamers.log的三個老版本,那麼在它被打開的時候lamers.log.1被改名爲lamers.log.2,lamers.log.0 被改名爲lamers.log.1 ,lamers.log 被改名爲lamers.log.0。也能夠設置version unlimited,這樣就沒有備份版本的限制了。
若是對日誌文件設置了size選項,那麼僅當此文件超過了設定的大小時,系統就會進行改名。默認狀況下不儲存備份文件;全部存在的日誌文件被簡單進行追加。文件的size 選項用來限制日誌的增加。若是文件超過了限制,又沒有versions選項,則named 就會中止寫入文件。若是保留了備份版本,則備份文件如上所述進行滾動命名,而後開始建立一個新的文件。若是沒有versions選項,也沒有其它的機制來刪除或減少日誌文件,則系統就不會有數據繼續寫入日誌中。默認狀態是不限制文件的大小的。
size 和versions 選項的使用例子:
channel "an_example_channel" {
file "example.log" versions 3 size 20m;
print-time yes;
print-category yes;
};
syslog 目的子句是把通道指向系統日誌。它的參數是一個syslog的前綴,如syslog幫助中所述。syslog是怎樣處理帶有這些前綴的信息,能夠參考syslog.conf 的幫助信息。
severity子句象syslog中的」priorites」同樣工做,惟一區別的是用戶能夠直接寫入一個文件,而不是使用syslog寫入一個文件。不到嚴重級的信息將不會被通道選擇;高嚴重級的信息將會被接受。
若是用戶正在使用syslog,那麼syslog.conf 的優先級也會決定什麼會最終經過。例如,將channel facility和severity定義成daemon和debug,就不會只記錄經過syslog.conf的daemon.warning信息,後者會使severity是info和notice的信息被丟棄。若是狀況相反,named就會只記錄warning或更高級別的信息,而syslogd則會記錄來自於通道的全部信息。
stderr目的子句將通道輸出到服務器的標準錯誤流。它用於服務器在前臺運行的狀況下,例如,當處於debug模式的時候,服務器能提供豐富的調試信息。若是服務器的全局debug級別(globe debug level)大於0,debug 模式將被激活。全局debug級別能夠經過在啓動named時設置「-d」參數加一個正數,或運行rndc trace來設置。若是要關閉debug模式,則將全局debug 級別設置成0,或運行rndc notrace。服務器中全部的debug信息有一個debug級別,高調試級給出更詳細的輸出。
例如,指定調試嚴重級別的通道:
channel "specific_debug_level" {
file "foo";
severity debug 3;
};
上例中,服務器在處於debug模式的時候都會收到3級和比3級小的級別的調試信息,全局的調試級別在這裏不起做用。dynamic嚴重級別的通道將使用服務器全局debug級別決定打印哪些信息。
若是使用了print-time參數,則日期和時間也將會記錄下來。print-time也能夠針對syslog的通道進行設置,但由於syslog也打印日期和時間,因此通常來說,這沒有什麼意義。若是設置了print-category 參數,則信息的分類也會記錄下來。若是設置了print-severity參數,則信息的嚴重級別也會記錄下來。print-xxx 選項能夠進行多重組合,單輸出格式都是這個順序:時間、分類、嚴重級別。
 
下面是一個當三個打印選項都設置的例子:
28-Feb-2000 15:05:32.863 general: notice: running
下面是named 提早定義的四個通道,用於指定缺省的日誌。
channel "default_syslog" {
syslog daemon; // 發送給syslog 的daemon facility
severity info; //只發送此優先級和更高優先級的信息
};
channel "default_debug" {
file "named.run"; // 寫入工做目錄下的named.run 文件。注意:若是服務器用-f 參數啓動,則"named.run"會被stderr 所替換。
severity dynamic; // 按照服務器當前的debug 級別記錄日誌
};
channel "default_stderr"{
stderr; //寫到stderr
severity info; //只發送此優先級和更高優先級的信息
};
channel "null" {
null; // 丟棄全部發到此通道的信息
};
default_debug 通道有特殊的性質:只有當服務器的debug級別非0的時候,它才產生輸出。通常來講,它會在服務器的工做目錄中寫入named.run文件。
由於安全緣由,當在命令行選項中使用了「-u」參數後,只有當named使用了新的UID
後,named.run文件纔會產生,以root身份啓動和運行的named所產生的debug信息將會被丟棄。若是用戶須要獲得這些輸出,則必須使用「-g」參數運行服務器,並從新將標準錯誤定向到一個文件中去。
一旦定義好一個通道,它就不能被從新定義。這樣就不能修改內置的通道,可是能夠通
過把分類指向你已經定義的通道,來修改默認的日誌記錄。
 
B. category 短語
這裏存在許多分類,用戶可根據須要定義想看到或不想看到的日誌。若是你不將某個分 類指定到某些通道的話,那麼在這個分類的日誌信息就會被髮送到default分類通道中。如 果用戶沒有設定缺省的分類,下列"default"則會被系統使用:
category "default" { "default_syslog"; "default_debug"; };
 
做爲一個例子,假定你要在文件中記錄安全事件,但您也要保留缺省的日誌文件。最 好按照下面配置:
channel "my_security_channel" {
file "my_security_file";
severity info;
};
category "security" {
"my_security_channel";
"default_syslog";
"default_debug";
};
爲了丟棄一個分類中的全部信息,能夠設定null 通道:
category "xfer-out" { "null"; };
category "notify" { "null"; };
 
下面是可用的分類和相關的簡明描述,之後的BIND版本中會包含更多的分類。
aaaaaaa
相關文章
相關標籤/搜索