(1)限制名字服務器遞歸查詢功能
關閉遞歸查詢可以使名字服務器進入被動模式,它再向外部的DNS發送查詢請求時,只會回答自己授權域的查詢請求,而不會緩存任何外部的數據,所以不可能遭受緩存中毒攻擊,但是這樣做也有負面的效果,降低了DNS的域名解析速度和效率。
以下語句僅允許172.168.10網段的主機進行遞歸查詢:
allow-recusion {172.168.10.3/24; } |
(2)限制區傳送(zone transfer)
如果沒有限制區傳送,那麼DNS服務器允許對任何人都進行區域傳輸,因此網絡架構中的主機名、主機IP列表、路由器名和路由IP列表,甚至包括各主機所在的位置和硬件配置等情況都很容易被入侵者得到在DNS配置文件中通過設置來限制允許區傳送的主機,從一定程度上能減輕信息泄漏。但是,需要提醒用戶注意的是:即使封鎖整個區傳送也不能從根本上解決問題,因爲攻擊者可以利用DNS工具自動查詢域名空間中的每一個IP地址,從而得知哪些IP地址還沒有分配出去,利用這些閒置的IP地址,攻擊者可以通過IP欺騙僞裝成系統信任網絡中的一臺主機來請求區傳送。
以下語句僅允許IP地址爲172.168.10.1和172.168.10.2的主機能夠同DNS服務器進行區域傳輸:
acl list { 221.3.131.5; 221.3.131.6;
zone "test.com" { type master; file "test.com ";
allow-transfer { list; };
};
}; |
(3)限制查詢(query)
如果任何人都可以對DNS服務器發出請求,那麼這是不能接受的。限制DNS服務器的服務範圍很重要,可以把許多入侵者據之門外。修改BIND的配置文件:/etc/named.conf加入以下內容即可限制只有210.10.0.0/8和211.10.0.0/8網段的查詢本地服務器的所有區信息,可以在options語句裏使用如下的allow-query子句:
options {
allow-query { 210.10.0.0/8; 211.10.0.0/8;};
}; |
(4)分離DNS(split DNS)
採用split DNS(分離DNS)技術把DNS系統劃分爲內部和外部兩部分,外部DNS系統位於公共服務區,負責正常對外解析工作;內部DNS系統則專門負責解析內部網絡的主機,當內部要查詢Internet上的域名時,就把查詢任務轉發到外部DNS服務器上,然後由外部DNS服務器完成查詢任務。把DNS系統分成內外兩個部分的好處在於Internet上其它用戶只能看到外部DNS系統中的服務器,而看不見內部的服務器,而且只有內外DNS服務器之間才交換DNS查詢信息,從而保證了系統的安全性。並且,採用這種技術可以有效地防止信息泄漏。
在BIND 9中可以使用view語句進行配置分離DNS。view語句的語法爲:
view view_name {
match-clients { address_match_list };
[ view_option; ...]
zone_statement; ...
}; |
其中:
◆match-clients:該子句非常重要,它用於指定誰能看到本view。可以在view語句中使用一些選項;
◆zone_statement:該子句指定在當前view中可見的區聲明。如果在配置文件中使用了view語句,則所有的zone語句都必須在view中出現。對同一個zone而言,配置內網的view應該置於外網的view之前。
下面是一個使用view語句的例子,它來自於BIND9的標準說明文檔:
view "internal" { match-clients { our-nets; };
// 匹配內網客戶的訪問
// 對內網客戶允許執行遞歸查詢 zone "example.com" {
// 定義內網客戶可見的區聲明
type master; file "example.com.hosts.internal"; };
};
view "external" { match-clients { any; };
// 匹配 Internet 客戶的訪問 // 對 Internet 客戶不允許執行遞歸查詢 zone "example.com" {
// 定義 Internet 客戶可見的區聲明 type master;
}; |
接下來,需要在example.com.hosts.internal中創建內網客戶可見的區文件,並在example.com.hosts.external中創建Internet客戶可見的區文件。該區文件的編寫可以根據用戶的實際情況,可以參看上面介紹的內容,此處不再贅述。
(5)隱藏BIND的版本信息
通常軟件的漏洞和風險信息是和特定版本相關的,因此版本號是黑客進行攻擊所需要蒐集的最有價值的信息之一。黑客使用dig命令可以查詢BIND的版本號,然後黑客就能夠通過版本號查詢知道這個軟件有那些漏洞,並尋求相應的工具來針對該漏洞進行攻擊。因此,隨意公開BIND版本號是不明智的,具有很大的風險。其實,隱藏BIND版本號比較簡單,只需要修改配置文件/etc/named.conf,在option部分添加version聲明將BIND的版本號信息進行覆蓋即可。使用下面的配置聲明將BIND版本號覆蓋,當有人請求版本信息時,將無法得到有用的版本信息:
options { version “Unkown” }; |
(6)使用非root權限運行BIND
在Linux內核2.3.99以後的版本中,可以以-u選項以非root權限運行BIND。該命令表示以nobody用戶身份運行BIND,使用nobody身份運行能夠降低緩衝區溢出攻擊所帶來的危險。命令如下:
#/usr/local/sbin/named –u nobody |
(7)刪除DNS上不必要的其他服務
刪除DNS機器上不必要的其他服務。網絡服務是造成系統安全的重要原因,常見的DoS攻擊、弱腳本攻擊以及緩衝區溢出攻擊都是由於系統存在網絡服務所引起的。在安裝DNS運行所依賴的操作系統前,就應該確定在系統中運行的服務的最小集合,創建一個DNS服務器系統就不應該安裝Web、POP、gopher、NNTP News等服務。建議不安裝以下軟件包:(1)X-Windows及相關的軟件包;(2)多媒體應用軟件包;(3)任何不需要的編譯程序和腳本解釋語言;(4)任何不用的文本編輯器;(5)不需要的客戶程序;(6)不需要的其他網絡服務。
(8)合理配置DNS的查詢方式
DNS的查詢方式有兩種,遞歸查詢和迭代查詢。合理配置這兩種查詢方式,能夠在實踐中取得較好的效果。
其中,遞歸查詢是最常見的查詢方式,工作方式是:域名服務器將代替提出請求的客戶機(下級DNS服務器)進行域名查詢,若域名服務器不能直接回答,則域名服務器會在域各樹中的各分支的上下進行遞歸查詢,最終將返回查詢結果給客戶機,在域名服務器查詢期間,客戶機將完全處於等待狀態。具體流程示意請見圖1:
圖1 DNS遞歸查詢模式示意
迭代查詢又稱重指引查詢。其工作方式爲:當服務器使用迭代查詢時能夠使其他服務器返回一個最佳的查詢點提示或主機地址,若此最佳的查詢點中包含需要查詢的主機地址,則返回主機地址信息,若此時服務器不能夠直接查詢到主機地址,則是按照提示的指引依次查詢,直到服務器給出的提示中包含所需要查詢的主機地址爲止,一般的,每次指引都會更靠近根服務器(向上),查尋到根域名服務器後,則會再次根據提示向下查找。具體流程示意如圖2所示:
圖2 DNS迭代查詢模式示意
綜合上面兩點,我們可以看出來,遞歸查詢就是客戶機會等待最後結果的查詢,而迭代查詢是客戶機等到的不一定是最終的結果,而可能是一個查詢提示。因而存在如下兩個問題:
◆二級DNS向一級DNS發起遞歸查詢,會對一級DNS造成性能壓力,所有跨域查詢都要經過一級DNS響應給對應二級DNS;
◆二級DNS向一級DNS發起遞歸查詢,再由一級向歸屬DNS發起遞歸的模式查詢響應會有一定延時;
因此,有很多流量很大的DNS服務器是禁止客戶機使用遞歸查詢,用這種方式來減輕服務器的流量。
(9)使用dnstop監控DNS流量
在維護DNS服務器時,用戶往往希望知道到底是哪些用戶在使用DNS服務器,同時也希望能對DNS狀態查詢做一個統計,以及時地知道DNS的工作情況和狀態。在傳統的方式下,用戶通常使用的是tcpdump等開源工具來進行抓包並通過查看53端口的流量來查看DNS數據包。由於tcpdump並沒有針對DNS流量進行特殊定製,因此使用起來可能不是非常方便。因此,用戶可以使用專用於DNS的dnstop工具查詢DNS服務器狀態。
dnstop是一種非常優秀的開源軟件,用戶可以到網站http://dns.measurement-factory.com/tools/dnstop/src/上進行下載使用,目前該軟件的最新版本爲:dnstop-20090128.tar.gz。
由於該軟件依賴tcpdump和pcap抓包庫(libpcap)對網絡上傳輸的數據包進行截獲和過濾,所以用戶需要確保系統安裝相應軟件後才能正常安裝和使用dnstop。通常情況下,這兩種必須的庫都已經在系統中預裝好了,使用下面的命令安裝dnstop即可:
(1)解壓縮源代碼安裝包
#tar vxfz ddnstop-20090128.tar.gz |
(2)切換到解壓目錄,並使用configure命令生成Makefile文件
#cd dnstop-20040309 #./configure |
(3)使用make命令進行安裝
#make |
安裝成功後,可以查看通過相應的網絡接口來監控DNS網絡流量,如下所示:
#./dnstop -s eth0 0 new queries, 6 total queries Tue Mar 26 19:35:23 2008 Sources count % ---------------- --------- ------ 172.96.0.13 4 66.7 172.96.0.14 1 16.7 172.96.0.15 1 16.7 |