BIND配置文件詳解(一)

http://yuanbin.blog.51cto.com/363003/108572


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
 
 

發佈了27 篇原創文章 · 獲贊 5 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章