Linux下的DNS安全保障十大技巧
原創(chuàng)【51CTO.com獨(dú)家特稿】Linux下的DNS安全保障有十大技巧。
(1)限制名字服務(wù)器遞歸查詢功能
關(guān)閉遞歸查詢可以使名字服務(wù)器進(jìn)入被動(dòng)模式,它再向外部的DNS發(fā)送查詢請(qǐng)求時(shí),只會(huì)回答自己授權(quán)域的查詢請(qǐng)求,而不會(huì)緩存任何外部的數(shù)據(jù),所以不可能遭受緩存中毒攻擊,但是這樣做也有負(fù)面的效果,降低了DNS的域名解析速度和效率。
以下語句僅允許172.168.10網(wǎng)段的主機(jī)進(jìn)行遞歸查詢:
allow-recusion {172.168.10.3/24; } |
(2)限制區(qū)傳送(zone transfer)
如果沒有限制區(qū)傳送,那么DNS服務(wù)器允許對(duì)任何人都進(jìn)行區(qū)域傳輸,因此網(wǎng)絡(luò)架構(gòu)中的主機(jī)名、主機(jī)IP列表、路由器名和路由IP列表,甚至包括各主機(jī)所在的位置和硬件配置等情況都很容易被入侵者得到在DNS配置文件中通過設(shè)置來限制允許區(qū)傳送的主機(jī),從一定程度上能減輕信息泄漏。但是,需要提醒用戶注意的是:即使封鎖整個(gè)區(qū)傳送也不能從根本上解決問題,因?yàn)楣粽呖梢岳肈NS工具自動(dòng)查詢域名空間中的每一個(gè)IP地址,從而得知哪些IP地址還沒有分配出去,利用這些閑置的IP地址,攻擊者可以通過IP欺騙偽裝成系統(tǒng)信任網(wǎng)絡(luò)中的一臺(tái)主機(jī)來請(qǐng)求區(qū)傳送。
以下語句僅允許IP地址為172.168.10.1和172.168.10.2的主機(jī)能夠同DNS服務(wù)器進(jìn)行區(qū)域傳輸:
|
(3)限制查詢(query)
如果任何人都可以對(duì)DNS服務(wù)器發(fā)出請(qǐng)求,那么這是不能接受的。限制DNS服務(wù)器的服務(wù)范圍很重要,可以把許多入侵者據(jù)之門外。修改BIND的配置文件:/etc/named.conf加入以下內(nèi)容即可限制只有210.10.0.0/8和211.10.0.0/8網(wǎng)段的查詢本地服務(wù)器的所有區(qū)信息,可以在options語句里使用如下的allow-query子句:
|
(4)分離DNS(split DNS)
采用split DNS(分離DNS)技術(shù)把DNS系統(tǒng)劃分為內(nèi)部和外部?jī)刹糠?,外部DNS系統(tǒng)位于公共服務(wù)區(qū),負(fù)責(zé)正常對(duì)外解析工作;內(nèi)部DNS系統(tǒng)則專門負(fù)責(zé)解析內(nèi)部網(wǎng)絡(luò)的主機(jī),當(dāng)內(nèi)部要查詢Internet上的域名時(shí),就把查詢?nèi)蝿?wù)轉(zhuǎn)發(fā)到外部DNS服務(wù)器上,然后由外部DNS服務(wù)器完成查詢?nèi)蝿?wù)。把DNS系統(tǒng)分成內(nèi)外兩個(gè)部分的好處在于Internet上其它用戶只能看到外部DNS系統(tǒng)中的服務(wù)器,而看不見內(nèi)部的服務(wù)器,而且只有內(nèi)外DNS服務(wù)器之間才交換DNS查詢信息,從而保證了系統(tǒng)的安全性。并且,采用這種技術(shù)可以有效地防止信息泄漏。
在BIND 9中可以使用view語句進(jìn)行配置分離DNS。view語句的語法為:
|
其中:
◆match-clients:該子句非常重要,它用于指定誰能看到本view。可以在view語句中使用一些選項(xiàng);
◆zone_statement:該子句指定在當(dāng)前view中可見的區(qū)聲明。如果在配置文件中使用了view語句,則所有的zone語句都必須在view中出現(xiàn)。對(duì)同一個(gè)zone而言,配置內(nèi)網(wǎng)的view應(yīng)該置于外網(wǎng)的view之前。
下面是一個(gè)使用view語句的例子,它來自于BIND9的標(biāo)準(zhǔn)說明文檔:
|
接下來,需要在example.com.hosts.internal中創(chuàng)建內(nèi)網(wǎng)客戶可見的區(qū)文件,并在example.com.hosts.external中創(chuàng)建Internet客戶可見的區(qū)文件。該區(qū)文件的編寫可以根據(jù)用戶的實(shí)際情況,可以參看上面介紹的內(nèi)容,此處不再贅述。#p#
(5)隱藏BIND的版本信息
通常軟件的漏洞和風(fēng)險(xiǎn)信息是和特定版本相關(guān)的,因此版本號(hào)是黑客進(jìn)行攻擊所需要搜集的最有價(jià)值的信息之一。黑客使用dig命令可以查詢BIND的版本號(hào),然后黑客就能夠通過版本號(hào)查詢知道這個(gè)軟件有那些漏洞,并尋求相應(yīng)的工具來針對(duì)該漏洞進(jìn)行攻擊。因此,隨意公開BIND版本號(hào)是不明智的,具有很大的風(fēng)險(xiǎn)。其實(shí),隱藏BIND版本號(hào)比較簡(jiǎn)單,只需要修改配置文件/etc/named.conf,在option部分添加version聲明將BIND的版本號(hào)信息進(jìn)行覆蓋即可。使用下面的配置聲明將BIND版本號(hào)覆蓋,當(dāng)有人請(qǐng)求版本信息時(shí),將無法得到有用的版本信息:
|
(6)使用非root權(quán)限運(yùn)行BIND
在Linux內(nèi)核2.3.99以后的版本中,可以以-u選項(xiàng)以非root權(quán)限運(yùn)行BIND。該命令表示以nobody用戶身份運(yùn)行BIND,使用nobody身份運(yùn)行能夠降低緩沖區(qū)溢出攻擊所帶來的危險(xiǎn)。命令如下:
#/usr/local/sbin/named –u nobody |
(7)刪除DNS上不必要的其他服務(wù)
刪除DNS機(jī)器上不必要的其他服務(wù)。網(wǎng)絡(luò)服務(wù)是造成系統(tǒng)安全的重要原因,常見的DoS攻擊、弱腳本攻擊以及緩沖區(qū)溢出攻擊都是由于系統(tǒng)存在網(wǎng)絡(luò)服務(wù)所引起的。在安裝DNS運(yùn)行所依賴的操作系統(tǒng)前,就應(yīng)該確定在系統(tǒng)中運(yùn)行的服務(wù)的最小集合,創(chuàng)建一個(gè)DNS服務(wù)器系統(tǒng)就不應(yīng)該安裝Web、POP、gopher、NNTP News等服務(wù)。建議不安裝以下軟件包:(1)X-Windows及相關(guān)的軟件包;(2)多媒體應(yīng)用軟件包;(3)任何不需要的編譯程序和腳本解釋語言;(4)任何不用的文本編輯器;(5)不需要的客戶程序;(6)不需要的其他網(wǎng)絡(luò)服務(wù)。
(8)合理配置DNS的查詢方式
DNS的查詢方式有兩種,遞歸查詢和迭代查詢。合理配置這兩種查詢方式,能夠在實(shí)踐中取得較好的效果。
其中,遞歸查詢是最常見的查詢方式,工作方式是:域名服務(wù)器將代替提出請(qǐng)求的客戶機(jī)(下級(jí)DNS服務(wù)器)進(jìn)行域名查詢,若域名服務(wù)器不能直接回答,則域名服務(wù)器會(huì)在域各樹中的各分支的上下進(jìn)行遞歸查詢,最終將返回查詢結(jié)果給客戶機(jī),在域名服務(wù)器查詢期間,客戶機(jī)將完全處于等待狀態(tài)。具體流程示意請(qǐng)見圖1:
圖1 DNS遞歸查詢模式示意
迭代查詢又稱重指引查詢。其工作方式為:當(dāng)服務(wù)器使用迭代查詢時(shí)能夠使其他服務(wù)器返回一個(gè)最佳的查詢點(diǎn)提示或主機(jī)地址,若此最佳的查詢點(diǎn)中包含需要查詢的主機(jī)地址,則返回主機(jī)地址信息,若此時(shí)服務(wù)器不能夠直接查詢到主機(jī)地址,則是按照提示的指引依次查詢,直到服務(wù)器給出的提示中包含所需要查詢的主機(jī)地址為止,一般的,每次指引都會(huì)更靠近根服務(wù)器(向上),查尋到根域名服務(wù)器后,則會(huì)再次根據(jù)提示向下查找。具體流程示意如圖2所示:
圖2 DNS迭代查詢模式示意
綜合上面兩點(diǎn),我們可以看出來,遞歸查詢就是客戶機(jī)會(huì)等待最后結(jié)果的查詢,而迭代查詢是客戶機(jī)等到的不一定是最終的結(jié)果,而可能是一個(gè)查詢提示。因而存在如下兩個(gè)問題:
◆二級(jí)DNS向一級(jí)DNS發(fā)起遞歸查詢,會(huì)對(duì)一級(jí)DNS造成性能壓力,所有跨域查詢都要經(jīng)過一級(jí)DNS響應(yīng)給對(duì)應(yīng)二級(jí)DNS;
◆二級(jí)DNS向一級(jí)DNS發(fā)起遞歸查詢,再由一級(jí)向歸屬DNS發(fā)起遞歸的模式查詢響應(yīng)會(huì)有一定延時(shí);
因此,有很多流量很大的DNS服務(wù)器是禁止客戶機(jī)使用遞歸查詢,用這種方式來減輕服務(wù)器的流量。#p#
(9)使用dnstop監(jiān)控DNS流量
在維護(hù)DNS服務(wù)器時(shí),用戶往往希望知道到底是哪些用戶在使用DNS服務(wù)器,同時(shí)也希望能對(duì)DNS狀態(tài)查詢做一個(gè)統(tǒng)計(jì),以及時(shí)地知道DNS的工作情況和狀態(tài)。在傳統(tǒng)的方式下,用戶通常使用的是tcpdump等開源工具來進(jìn)行抓包并通過查看53端口的流量來查看DNS數(shù)據(jù)包。由于tcpdump并沒有針對(duì)DNS流量進(jìn)行特殊定制,因此使用起來可能不是非常方便。因此,用戶可以使用專用于DNS的dnstop工具查詢DNS服務(wù)器狀態(tài)。
dnstop是一種非常優(yōu)秀的開源軟件,用戶可以到網(wǎng)站http://dns.measurement-factory.com/tools/dnstop/src/上進(jìn)行下載使用,目前該軟件的最新版本為:dnstop-20090128.tar.gz。
由于該軟件依賴tcpdump和pcap抓包庫(kù)(libpcap)對(duì)網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包進(jìn)行截獲和過濾,所以用戶需要確保系統(tǒng)安裝相應(yīng)軟件后才能正常安裝和使用dnstop。通常情況下,這兩種必須的庫(kù)都已經(jīng)在系統(tǒng)中預(yù)裝好了,使用下面的命令安裝dnstop即可:
(1)解壓縮源代碼安裝包
#tar vxfz ddnstop-20090128.tar.gz |
(2)切換到解壓目錄,并使用configure命令生成Makefile文件
|
(3)使用make命令進(jìn)行安裝
#make |
安裝成功后,可以查看通過相應(yīng)的網(wǎng)絡(luò)接口來監(jiān)控DNS網(wǎng)絡(luò)流量,如下所示:
|
【編輯推薦】