云太真
(上海政法學(xué)院計(jì)算機(jī)教學(xué)部,上海201701)
網(wǎng)絡(luò)通訊及安全
校園網(wǎng)智能DNS配置實(shí)踐與日志分析
云太真
(上海政法學(xué)院計(jì)算機(jī)教學(xué)部,上海201701)
根據(jù)校園網(wǎng)普遍多出口的現(xiàn)狀和服務(wù)器訪問存在網(wǎng)絡(luò)瓶頸的現(xiàn)實(shí),利用bind9提供的view視圖進(jìn)行了DNS配置,對DNS的常見攻擊手法進(jìn)行了防范,利用Linux命令對DNS的日志進(jìn)行了分析。
DNS;BIND;校園網(wǎng);DNS配置;DNS安全
Abstract:Campus network often have multi exports,leading to external users access server bottlenecks.This article uses the view instruction provided by BIND9 to configure the DNS,and to guard against the common DNS attack methods.Finally,the DNS logs are analyzed using the Linux command.
Key words:DNS;BIND;Campus network;DNS configuration;DNS security
DNS是校園網(wǎng)基礎(chǔ)服務(wù)之一,對網(wǎng)絡(luò)性能和安全有很重要的影響。Bind是最常用的DNS服務(wù)器軟件,支持智能解析?;谛@網(wǎng)應(yīng)用實(shí)際和目前Dos攻擊泛濫的現(xiàn)狀,本文基于建立在Centos系統(tǒng)中的Bind軟件,針對校園網(wǎng)多出口的現(xiàn)狀進(jìn)行了配置,討論了應(yīng)對Dos攻擊的對策和DNS日志的分析方法。
目前的高校校園網(wǎng),除了接入CERNET以外,普遍還接入了電信、聯(lián)通等廣域網(wǎng),主要原因是CERNET資源有限,互聯(lián)網(wǎng)上多數(shù)資源位于電信、聯(lián)通的范圍,而這些廣域網(wǎng)之間的互聯(lián)存在“瓶頸”限制[1]。CERNET的國際出口雖然屢次升級,但仍不能滿足需求。而其他網(wǎng)絡(luò)不能提供EDU域名,這就迫使多數(shù)高校必須同時接入多個網(wǎng)絡(luò),結(jié)構(gòu)如圖1所示。
圖1 校園網(wǎng)鏈路拓?fù)鋱D
另一方面,由于歷史原因,高校接入CERNET,可以獲得比較多的IPv4地址,而電信、聯(lián)通的IP地址資源非常緊張,所以只能分配給接入單位少量IP地址,主要用于接入、NAT地址轉(zhuǎn)換、地址映射等。校園網(wǎng)通常采取的對策是,服務(wù)器、內(nèi)部網(wǎng)絡(luò)接入使用CERNET分配的地址,這些機(jī)器訪問教育網(wǎng)資源,通過教育網(wǎng)線路時,采用路由方式;訪問電信或聯(lián)通的資源通過電信、聯(lián)通出口時,采用NAT地址轉(zhuǎn)換方式。
由于這些廣域網(wǎng)之間資源的不對稱,通過電信、聯(lián)通網(wǎng)絡(luò)訪問教育網(wǎng)資源,或通過教育網(wǎng)線路訪問電信、聯(lián)通資源,都會降低用戶的網(wǎng)絡(luò)體驗(yàn)。為了保證這一點(diǎn),學(xué)校網(wǎng)絡(luò)通常根據(jù)目的地(例如CERNET地址列表[2])使用路由的方法,這樣就保證了校園網(wǎng)內(nèi)部訪問外部資源的順暢進(jìn)行。
但是反過來,當(dāng)外部電信用戶訪問學(xué)校網(wǎng)站等資源的時候,情況就發(fā)生了變化。雖然學(xué)校有多個出口,但是用戶的目的地址是教育網(wǎng)地址,用戶的數(shù)據(jù)報(bào)文必然沿著電信到教育網(wǎng)走進(jìn)來,然后必須沿相反方向反饋回?cái)?shù)據(jù),這就無法保證外部用戶的訪問體驗(yàn),如圖2所示。
為了解決這個問題,就需要采用智能DNS解析的辦法,通常利用BIND提供的VIEW指令,根據(jù)用戶來源IP地址的不同,解析成不同的ip地址。同時,在出口路由器上進(jìn)行IP地址映射,將部分外部用戶訪問最頻繁的服務(wù)器的教育網(wǎng)地址映射為電信地址,這個服務(wù)器可以同時被教育網(wǎng)用戶和電信網(wǎng)用戶用不同的IP地址訪問,并且路徑最短,不跨越電信、教育網(wǎng)通道。這樣,地址映射和智能DNS的配置結(jié)合起來,就滿足了外網(wǎng)用戶訪問的性能要求[3]。
圖2 廣域網(wǎng)用戶訪問校園網(wǎng)資源的路徑
本文基于Centos下自帶的BIND 9.8.2進(jìn)行配置,Centos是個很好的Linux發(fā)行版本,和Redhat保持一致,實(shí)際上比Redhat更容易使用,例如Centos安裝時選擇BIND,就自動實(shí)現(xiàn)了ch?root配置,免去復(fù)雜的配置過程,只要我們配置named.conf和解析域文件就行了。所謂chroot,就是說bind在啟動時是以非root權(quán)限運(yùn)行的,這對服務(wù)器的安全運(yùn)行是很有利的[4]。
本文中的應(yīng)用場景是校園網(wǎng)同時接入教育網(wǎng)和電信,部分服務(wù)器在出口路由器上進(jìn)行了IP地址映射,如下表1。
表1 服務(wù)器IP地址映射表
根據(jù)實(shí)際需要,依據(jù)IP地址的來源把DNS用戶分為三類:校園網(wǎng)內(nèi)部用戶,教育網(wǎng)用戶,其他用戶,目標(biāo)是讓三類用戶看到的解析結(jié)果不一樣。所謂其他用戶,主要是來自電信和其他網(wǎng)絡(luò)地址的用戶,這些用戶IP地址不好確定,所以我們放在最后判斷。
BIND的主要配置文件是/etc目錄下的named.conf文件。該文件由若干節(jié)組成,第一節(jié)是options{.......};第二節(jié)是con?trols{......}。每一節(jié)之間都用{}包含,各節(jié)之間用“;”分開。這里view指令要單獨(dú)設(shè)置一節(jié),本文設(shè)置了三個view節(jié),具體如下
/*for SHUPL networks*/
view"SHUPL-Networks"
{match-clients
{222.204.192.0/20;
192.168.0.0/16;
10.0.0.0/8;
172.16.0.0/12;
};
recursion yes;
allow-query-cache{any;};
//部分代碼省略
zone"shupl.edu.cn"IN
{type master;
file"shupl.edu.cn-inner.db";
};
zone"192.204.222.in-addr.arpa"IN
{type master;
file"192.204.222.in-addr.arpa";
};
};
這是一個針對校園網(wǎng)內(nèi)部用戶解析的view節(jié)。match-cli?ents{}包含的部分是校園網(wǎng)內(nèi)部用戶的IP地址集合,除了CER?NET給出的地址,還有INNA保留地址,校園網(wǎng)有些區(qū)域會使用保留地址,我們假設(shè)校園網(wǎng)NAT位于出口路由器上。
zone"shupl.edu.cn"IN{}部分指出校園網(wǎng)內(nèi)部用戶要求解析shupl.edu.cn域時的解析文件,即“shupl.edu.cn-inner.db”。zone"192.204.222.in-addr.arpa"描述服務(wù)器區(qū)域地址的反向解析,主要是要提供DNS服務(wù)和電子郵件服務(wù)器的反向解析。
下面是192.204.222.in-addr.arpa文件的內(nèi)容
$TTL 86400
@IN SOA shupl.edu.cn.webmaster.shupl.edu.cn.(
80;
60;
60;
36000;
86400)
@ IN NS shupl.edu.cn.
129 IN PTR dns1.shupl.edu.cn.
130 IN PTR dns2.shupl.edu.cn.
146 IN PTR www.shupl.edu.cn.
161 IN PTR mail.shupl.edu.cn.
161 IN PTR smtp.shupl.edu.cn.
161 IN PTR pop3.shupl.edu.cn.
再看針對教育網(wǎng)用戶的view節(jié)的設(shè)置。
/*for CERNET networks*/
view"edu-network"
{match-clients
{10.0.0.0/8;
58.154.0.0/15;
58.192.0.0/12;
59.64.0.0/12;
//此處省略部分代碼
222.192.0.0/12;
};
recursion no;
allow-query-cache{none;};
//此處省略部分代碼
zone"shupl.edu.cn"IN
{type master;
file"shupl.edu.cn-edu.db";
};
zone"192.204.222.in-addr.arpa"IN
{type master;
file"192.204.222.in-addr.arpa";
};
};
這里的match-clients{}中包含的是教育網(wǎng)的IP地址集合[2],注意到這個view中的域解析文件是shupl.edu.cn-edu.db。
針對其他用戶,主要是電信用戶的view配置如下
/*For Other Network except China Education Network*/
view"other"IN
{match-clients{any;};
recursion no;
allow-query-cache{none;};
//此處省略部分代碼
zone"shupl.edu.cn"IN
{type master;
file"shupl.edu.cn-other.db";
};
zone"192.204.222.in-addr.arpa"IN{type master;
file"192.204.222.in-addr.arpa";
};
};
這里的match-clients{any;}實(shí)際上就是匹配所有IP地址,前面的兩個view節(jié)已經(jīng)匹配了內(nèi)部網(wǎng)絡(luò)用戶和教育網(wǎng)用戶,最后剩下的都由這個“other”view節(jié)來處理,對應(yīng)的域解析文件為shupl.edu.cn-other.db。
在/var/named目錄下我們可以看到一些系統(tǒng)默認(rèn)的解析文件,這些是DNS解析的一些默認(rèn)文件,但是這個目錄是chroot假目錄。把這些文件復(fù)制到/var/named/chroot/var/named目錄下,然后再創(chuàng)建shupl.edu.cn-inner.db、shupl.edu.cn-edu.db、shupl.edu.cn-other.db三個解析域文件。
shupl.edu.cn-inner.db文件的大致內(nèi)容如下:
$TTL 86400
$ORIGIN shupl.edu.cn.
@IN SOA dns1.shupl.edu.cn.webmaster.shupl.edu.cn.(
840;serial
10800;refresh
3600;retry
864000;expire
86400);ttl
@ IN NS dns1.shupl.edu.cn.
@ IN NS dns2.shupl.edu.cn.
@ IN MX 20 mail.shupl.edu.cn.
www IN A 222.204.192.146
mail IN A 222.204.192.161
kczx IN A 222.204.192.163
jiaowu IN A 222.204.192.168
shupl.edu.cn-edu.db文件和shupl.edu.cn-inner.db文件在本文中沒有區(qū)別,分開設(shè)置兩個view主要是增加靈活性,例如有些內(nèi)部服務(wù)器進(jìn)行了解析,外網(wǎng)用戶根本也訪問不到,只要在shupl.edu.cn-inner.db里設(shè)置就行了。
shupl.edu.cn-other.db大致內(nèi)容如下
$TTL 86400
$ORIGIN shupl.edu.cn.
@IN SOA dns1.shupl.edu.cn.webmaster.shupl.edu.cn.(
840;serial
10800;refresh
3600;retry
864000;expire
86400);ttl
@ IN NS dns1.shupl.edu.cn.
@ IN NS dns2.shupl.edu.cn.
@ IN MX 20 mail.shupl.edu.cn.
www IN A 116.228.2.212
mail IN A 116.228.2.211
kczx IN A 116.228.2.207
jiaowu IN A 116.228.2.213
這些配置完成以后,重新啟動BIND服務(wù),運(yùn)行命令
service named restart
如果正確重啟了,基本可以說明配置無誤。
然后在三個不同的區(qū)域,即校園網(wǎng)內(nèi)部,教育網(wǎng)用戶和其他用戶處分別進(jìn)行nslookup域名解析測試。測試通過,即說明設(shè)置正確。
DNS是一種無連接服務(wù),客戶端和服務(wù)器之間使用UDP報(bào)文進(jìn)行通信。DNS服務(wù)器不能匿名,甚至也不好禁止PING報(bào)文,以便用戶進(jìn)行連通性測試。DNS是最基礎(chǔ)的網(wǎng)絡(luò)服務(wù)之一,這些特性導(dǎo)致DNS特別容易成為攻擊的目標(biāo),危害很大[5]。
早期對DNS的攻擊,主要是針對BIND軟件本身的漏洞。由于BIND是開源軟件,攻擊者可以仔細(xì)閱讀代碼,找到代碼編寫上的漏洞,針對這些漏洞編寫攻擊工具,然后尋找對應(yīng)版本的DNS進(jìn)行攻擊。BIND的版本可以使用dig工具查詢。
近期對DNS的攻擊,主要是緩存中毒攻擊,方法是利用服務(wù)器所提供的遞歸解析功能,反復(fù)查詢一些不存在的或不常用的域名。DNS遞歸解析的結(jié)果是從其他授權(quán)服務(wù)器里取得的,但是DNS報(bào)文傳輸依靠的是UDP,UDP是一種無連接的數(shù)據(jù)報(bào)文,這就很難保證收到的響應(yīng)報(bào)文真是從權(quán)威服務(wù)器里來的,只能根據(jù)其發(fā)出的查詢ID來判斷,只要回復(fù)的查詢ID和自己發(fā)出的報(bào)文查詢ID相同,就認(rèn)為真的是權(quán)威服務(wù)器發(fā)出的。接著dns服務(wù)器把權(quán)威服務(wù)器的解析交給客戶端,并存入自己的緩存,下次其他客戶端在TTL時間范圍內(nèi)再次請求解析時就把這個結(jié)果直接交給客戶端[6]。這個過程可以用圖3表示
圖3 DNS遞歸查詢原理
攻擊者的應(yīng)對方法是偽造授權(quán)服務(wù)器的響應(yīng)報(bào)文,UDP是一種無連接的報(bào)文,網(wǎng)絡(luò)只檢查目的地址,以便送到合適的路徑上,但是一般不檢查源地址。攻擊者偽造授權(quán)服務(wù)器的響應(yīng)報(bào)文,只要搶在授權(quán)服務(wù)器之前到達(dá),并且查詢ID與服務(wù)器發(fā)出的查詢ID相同,就可以欺騙dns,從而騙過DNS服務(wù)器,使其緩存中增加了一條解析[7],過程見圖4。
圖4 黑客攻擊DNS緩存的基本方法
為了對抗這些攻擊,有必要采取一些措施,就服務(wù)器本身的設(shè)置來說,我們可以采取以下措施:
(1)限制查詢BIND版本
在named.conf中的options節(jié)中加入version指令,如下:
version“I don’t tell you the true version.”
這可以防止dig工具的版本查詢。
(2)限制并發(fā)查詢數(shù)
在named.conf中的options節(jié)中加入version指令,如下:recursive-clients 10000;
目前的服務(wù)器應(yīng)該可以提供同時10000個查詢的能力。限制并發(fā),可以避免服務(wù)器受到過多請求包的沖擊。
(3)只對本地用戶開放遞歸解析
這個要在view節(jié)中進(jìn)行設(shè)置,例如上文中的三個view,"SHUPL-Networks"中有兩條指令:
recursion yes;
allow-query-cache{any;};
這兩條指令是允許遞歸解析,也允許查詢緩存。因?yàn)檫@個區(qū)域的用戶是本地用戶,必須允許遞歸解析。
對于另外兩個view,即”edu-networks”和”other”則是這樣的指令:
recursion no;
allow-query-cache{none;};
這兩條指令禁止了遞歸解析,也禁止查詢緩存。因?yàn)檫@些用戶不是本地用戶,只允許他們迭代解析,畢竟資源有限啊。
Linux運(yùn)行過程中,會產(chǎn)生大量日志信息,其中也包含了BIND的運(yùn)行信息,尤其是解析錯誤。從linux日志中將bind日志取出,可以使用這樣的命令
grep named/var/log/messages>dns-log.txt
其中/var/log/messages是Linux操作系統(tǒng)的日志文件,grep named則從這個文件中查找到包含named字樣的行,通常bind進(jìn)程的名字是named。最后將查找結(jié)果導(dǎo)出到文本文件中。
打開dns-log.txt這個文本文件,我們可以看到里面都是dns查詢的錯誤信息,正常合法的查詢請求這里是沒有的,從這些日志中我們可以看到bind的運(yùn)行情況。
這里,注意到query(cache)都是非法查詢dns cache的記錄,這些記錄極有可能是一些攻擊記錄。我們想把這些IP地址都搜索出來,可以使用這樣的命令
grep cache dns-log.txt|sed-nr's/(^|.*[^0-9])(([0-9]+.){3}[0-9]+).*/2/p'>dns-cache.txt
中間的sed命令也可以這樣:
grep-Po"d{1,3}.d{1,3}.d{1,3}.d{1,3}"
注意到這樣的查詢?nèi)罩纠锩嬗姓虿樵兊模灿蟹聪虿樵兊?,我們需要把反向查詢的去掉,所以命令可以變成這樣
grep cache dns-log.txt|grep-v in-addr|sed-nr's/(^|.*[^0-9])(([0-9]+.){3}[0-9]+).*/2/p'>ip.txt
有時候我們需要專門查看反向解析的ip來源,可以這樣
grep cache dns-log.txt|grep in-addr|sed-nr's/(^|.*[^0-9])(([0-9]+.){3}[0-9]+).*/2/p'>ip2.txt
這樣抽取以后的文件是把所有非法查詢過cache的IP地址都簡單列出來了,我們還想知道他們的訪問次數(shù),可以用這樣的命令
sort ip.txt|uniq-c>dns-sort-log.txt
最后打開dns-sort-log.txt,如下
1 101.82.73.194
2 101.82.78.116
4 101.83.119.111
4 101.83.138.95
7 101.83.151.253
8 101.83.48.24
1 101.83.66.165
3 101.84.159.202
3 101.84.211.223
785 101.85.208.242
6 101.85.87.138
4 101.89.137.221
12 101.89.150.220
3 101.89.173.28
5 101.90.125.131
//其余部分省略
這個文件中,第一列是訪問次數(shù),后面是IP地址,對于訪問次數(shù)特別多的IP地址,值得進(jìn)一步分析其來源。
根據(jù)目前校園網(wǎng)多出口的現(xiàn)狀,進(jìn)行網(wǎng)絡(luò)優(yōu)化,要考慮外網(wǎng)用戶訪問校園網(wǎng)資源的性能問題,必須根據(jù)用戶來源提供解析。本文基于Centos系統(tǒng)和BIND軟件,進(jìn)行了多出口的智能配置,并根據(jù)目前安全現(xiàn)狀進(jìn)行了加強(qiáng)配置,提供了故障時分析日志的方法。
[1]石幫榮.智能DNS和線路跟隨解析技術(shù)在多出口高校校園網(wǎng)中的應(yīng)用[J].桂林師范高等專科學(xué)校學(xué)報(bào),2014(10).
[2]CERNET IP地址統(tǒng)計(jì)聚類結(jié)果[EB/OL].https://www.nic.edu.cn/RS/ipstat/cernet-ipv4.txt
[3]王艷歌.一種基于智能DNS解析及靜態(tài)地址映射的快速訪問策略[J].科技通報(bào),2012(12).
[4]吳阿亭.在Redhat 7.1下設(shè)置CHROOT DNS[J].微電腦世界,2002(05).
[5]何坤.DDOS對DNS的安全挑戰(zhàn)[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2010(01).
[6]靳沖,郝志宇,吳志剛.DNS緩存投毒攻擊原理與防御策略[J].網(wǎng)絡(luò)與信息安全,2009(11).
[7]程衛(wèi)華.DNS緩存污染的攻擊方式和防御策略[J].電信快報(bào),2015(9).
Campus Network Intelligent DNS Configuration Practice and Log Analysis
YUN Tai-zhen
(Computer Education Department,Shanghai University of Political Science and Law,Shanghai 201701,China)
TP393.18
A
1009-3044(2017)24-0027-04
2017-07-15
云太真,男,河南鞏義人,講師,碩士,主要研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)和軟件工程。