周鳴愛
(賽迪研究院網(wǎng)絡(luò)安全研究所,北京 100846)
域名管理系統(tǒng)(Domain Name System,DNS)域名解析是互聯(lián)網(wǎng)基礎(chǔ)中非常重要的一部分,將域名轉(zhuǎn)換成IP地址,這樣通過域名可以方便地訪問到網(wǎng)站。域名解析就是將域名轉(zhuǎn)換成IP的過程,解析過程由DNS服務(wù)器完成。DNS作為將域名和IP地址相互映射的分布式數(shù)據(jù)庫(kù),是互聯(lián)網(wǎng)重要的基礎(chǔ)設(shè)施之一,幾乎大部分的網(wǎng)絡(luò)想要正常運(yùn)行,都需要依靠DNS。因此,DNS服務(wù)器一旦發(fā)生故障,即使E-mail或Web網(wǎng)站此時(shí)能夠正常運(yùn)行,用戶也無(wú)法使用。
在互聯(lián)網(wǎng)中超過95%的DNS服務(wù)器的搭建都是基于BIND域名解析服務(wù),為保障解析服務(wù)安全,BIND服務(wù)程序已提供了對(duì)TSIG(RFC 2845)加密機(jī)制的支持。TSIG加密機(jī)制主要是通過密碼編碼方式對(duì)Zone Transfer(區(qū)域信息傳輸)保護(hù),即保證DNS服務(wù)器間傳送區(qū)域信息的安全。針對(duì)企業(yè)內(nèi)網(wǎng)自建DNS服務(wù)器網(wǎng)絡(luò)環(huán)境可變性較大,技術(shù)人員流動(dòng)性較強(qiáng)的特點(diǎn),本文結(jié)合多因素認(rèn)證,提出了一種新的DNS安全加密認(rèn)證的實(shí)踐方案。
域名與由一串?dāng)?shù)字構(gòu)成的IP地址相比,更容易記憶和理解,用戶對(duì)網(wǎng)絡(luò)資源進(jìn)行訪問時(shí),一般情況下都是通過域名訪問,但是在互聯(lián)網(wǎng)中計(jì)算機(jī)之間身份的相互識(shí)別只能是基于IP地址,并且數(shù)據(jù)在互聯(lián)網(wǎng)中的傳輸,也必須通過外網(wǎng)IP實(shí)現(xiàn)。
DNS技術(shù)的出現(xiàn),方便了用戶對(duì)網(wǎng)絡(luò)資源的訪問,該技術(shù)主要是對(duì)域名和IP地址的對(duì)應(yīng)關(guān)系進(jìn)行管理和解析,即在獲取到用戶輸入的IP地址或域名后,自動(dòng)查找與之具有映射關(guān)系的域名或IP地址,簡(jiǎn)而言之,就是進(jìn)行正向解析和反向解析,所謂正向解析即查找到與輸入域名相對(duì)應(yīng)的IP地址;反向解析即查找與IP地址相對(duì)應(yīng)的域名。有了DNS技術(shù),用戶只需在瀏覽器中輸入方便記憶的域名,就可以訪問到自己想訪問的網(wǎng)站,其中DNS域名解析中的正向解析技術(shù)是最為常用工作模式。
從工作形式上來(lái)看DNS域名解析服務(wù)包括主服務(wù)器、從服務(wù)器和緩存服務(wù)器,其中主服務(wù)器負(fù)責(zé)維護(hù)特定區(qū)域內(nèi)IP地址和域名的對(duì)應(yīng)關(guān)系,主服務(wù)器在該區(qū)域內(nèi)具有唯一性。從服務(wù)器主要是作為主服務(wù)器的備機(jī),從服務(wù)器會(huì)從主服務(wù)器中獲取域名和IP地址的映射關(guān)系并維護(hù)。緩存服務(wù)器主要是從其他域名解析服務(wù)器獲取IP地址和域名的對(duì)應(yīng)關(guān)系,提高非第一次查詢效率。
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,IP地址和域名對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(kù)越來(lái)越龐大,因此DNS域名解析服務(wù)器使用樹形結(jié)構(gòu)來(lái)記錄IP地址和域名的映射關(guān)系,從而形成了一個(gè)樹形結(jié)構(gòu)的分布式數(shù)據(jù)庫(kù)系統(tǒng),如圖1所示。
在通常情況下,在瀏覽器中輸入網(wǎng)址域名時(shí),最后的根域(.)不需要輸入,通常頂級(jí)域表示的是國(guó)家或組織形式,如edu表示政府機(jī)構(gòu)組織;com表示商業(yè)公司;cn表示中國(guó)。二級(jí)域名表示公司或者組織。三級(jí)域名表示的是公司或組織內(nèi)部的主機(jī)名稱。因此通過一個(gè)完整的域名可以精確的定位全球唯一一臺(tái)主機(jī)。這種結(jié)構(gòu)的優(yōu)勢(shì)在于全球所有的域名信息不需要都由根域服務(wù)器來(lái)管理,只有頂級(jí)域信息由根域服務(wù)器管理,二級(jí)域信息由頂級(jí)域服務(wù)器管理。依此類推,實(shí)行分層管理。
圖1 DNS域名解析服務(wù)器樹形目錄結(jié)構(gòu)
BIND—伯克利因特網(wǎng)名稱域,其全稱為Berkeley Internet Name Domain Service,在全世界范圍內(nèi)是使用安全、更廣泛、高效且可靠的域名解析服務(wù)程序。Internet中超過50%的DNS服務(wù)器的架設(shè)都使用的是BIND。作為互聯(lián)網(wǎng)基礎(chǔ)設(shè)施服務(wù)的DNS域名解析服務(wù)有著至關(guān)重要的作用,因此為確保整個(gè)服務(wù)器的安全,BIND服務(wù)程序在生產(chǎn)環(huán)境中安裝部署時(shí)應(yīng)加上chroot擴(kuò)展包即牢籠機(jī)制。這樣,將BIND服務(wù)程序文件操作范圍限制在自身配置文件范圍內(nèi),具體步驟有三。
(1)首先需要查看是否存在chroot擴(kuò)展包
查看所有rpm包信息,包括可更新的和可安裝的
[root@MiWiFi-R3-srv ~]# yum list | grep bind-chroot
b in d -ch ro o t.x86 _ 6 4 32:9.11.4-16.P2.el7_8.6 @updates
[root@MiWiFi-R3-srv ~]# 1.37.1-9.el7 base。
(2)有安裝源,直接安裝
[root@MiWiFi-R3-srv ~]# yum install bindchroot。
(3)查看是否安裝成功
[root@MiWiFi-R3-srv ~]# rpm -qa | grep bind
bind-libs-9.11.4-16.P2.el7_8.6.x86_64
bind-9.11.4-16.P2.el7_8.6.x86_64
bind-export-libs-9.11.4-16.P2.el7.x86_64
bind-license-9.11.4-16.P2.el7_8.6.noarch
bind-libs-lite-9.11.4-16.P2.el7_8.6.x86_64
bind-chroot-9.11.4-16.P2.el7_8.6.x86_64。
在通常情況下,若想要提供全面的DNS查詢服務(wù),就需在本地機(jī)器上存儲(chǔ)相關(guān)的域名數(shù)據(jù)庫(kù),但是若在某個(gè)配置文件中記錄所有的IP地址和域名對(duì)應(yīng)關(guān)系,這個(gè)文件將會(huì)非常龐大,程序的執(zhí)行效率將會(huì)下降,且之后的維護(hù)和修改也必將會(huì)非常混亂困難。為此,在BIND服務(wù)程序中,有三個(gè)至關(guān)重要的配置文件。
第一個(gè)是/etc/named.conf主配置文件:該配置文件加上空行和注釋信息一共只有58行,實(shí)際的有效行數(shù)大概只有30行,BIND服務(wù)程序的運(yùn)行主要由這30行左右的參數(shù)進(jìn)行定義。
第二個(gè)是/etc/named.rfc1912.zones區(qū)域配置文件:該文件用于存儲(chǔ)IP地址信息和域名映射關(guān)系所在的位置,就如同書籍目錄一樣,記錄著每一個(gè)IP地址及與其相對(duì)應(yīng)的域名所在的具體位置,如果要進(jìn)行修改或查看操作時(shí),可依據(jù)該位置查到相關(guān)文件。
第三個(gè)是/var/named數(shù)據(jù)配置文件目錄,該目錄存儲(chǔ)了IP地址信息和域名真實(shí)映射關(guān)系的數(shù)據(jù)配置文件。
BIND服務(wù)程序在Linux系統(tǒng)中的名稱為named,為了使服務(wù)器上的所有IP地址都能夠提供DNS域名解析服務(wù),且為了使任何人都可以發(fā)送DNS查詢請(qǐng)求給服務(wù)器,需要修改主配置文件,在/etc目錄中找到該文件,然后將第11行的地址和第17行的地址修改為any:
[root@MiWiFi-R3-srv ~]# vi /etc/named.conf 1
11 listen-on port 53 { any; };
17 allow-query { any; }。
如上所述,/etc/named.rfc1912.zones區(qū)域配置文件保存了IP地址和域名映射關(guān)系的所在位置。該文件定義了保存域名和IP地址解析規(guī)則文件的位置和服務(wù)類型等內(nèi)容,并不包含詳細(xì)的域名、IP地址映射關(guān)系相關(guān)信息。
DNS域名解析服務(wù),作為互聯(lián)網(wǎng)基礎(chǔ)設(shè)施的重要服務(wù),為了使域名查詢服務(wù)能夠快速、穩(wěn)定且不間斷,保障DNS域名解析服務(wù)的正常非常重要。從服務(wù)器的作用主要是負(fù)載均衡和備份解析記錄,在域名解析服務(wù)中,從服務(wù)器會(huì)從主服務(wù)器上獲取指定區(qū)域數(shù)據(jù)文件。因此,部署從服務(wù)器不僅能夠使主服務(wù)的負(fù)載壓力降低,還能夠使用戶的查詢效率提高。在本次部署中,主服務(wù)器和從服務(wù)器的IP地址和操作系統(tǒng)信息如表1所示。
從服務(wù)器的部署步驟有三。
(1)修改主服務(wù)器的/etc/named.rfc1912.zones區(qū)域配置文件中的allow-update{允許更新的主機(jī)IP地址信息}參數(shù),使主服務(wù)器同意從服務(wù)器的更新請(qǐng)求,最后重新啟動(dòng)主服務(wù)器DNS服務(wù)程序。
表1 主服務(wù)器和從服務(wù)器的IP地址和操作系統(tǒng)信息
[root@MiWiFi-R3-srv ~]]# vim /etc/named.rfc1912.zones
zone "saidi.com" IN {
type master;
file "saidi.com.zone";
allow-update { 192.168.199.20; };
};
zone "199.168.192.in-addr.arpa" IN {
type master;
file "192.168.199.arpa";
allow-update { 192.168.199.20; };
};
[root@MiWiFi-R3-srv ~]]# systemctl restart named。
(2)修改從服務(wù)器的/etc/named.rfc1912.zones區(qū)域配置文件,將從服務(wù)器想要獲取的區(qū)域信息和對(duì)應(yīng)的主服務(wù)器的IP地址信息填寫在該文件中。在該步驟中,需要注意此時(shí)服務(wù)類型type為slave不是master。master參數(shù)后邊的IP地址信息為主服務(wù)器IP,file參數(shù)后邊為從服務(wù)器同步的數(shù)據(jù)配置文件保存位置。最后,重新啟動(dòng)從服務(wù)器DNS服務(wù)程序。
[root@MiWiFi-R3-srv ~]]# vim /etc/named.rfc1912.zones
zone "saidi.com" IN {
type slave;
masters { 192.168.199.199; };
file "slaves/saidi.com.zone";
};
zone "199.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.199.199; };
file "slaves/192.168.199.arpa";
};
[root@MiWiFi-R3-srv ~]]# systemctl restart named
(3)結(jié)果驗(yàn)證。在通常情況下,重啟從服務(wù)器的DNS服務(wù)程序后,從服務(wù)器上的數(shù)據(jù)配置文件就會(huì)自動(dòng)從主服務(wù)器上同步過來(lái),且數(shù)據(jù)配置文件會(huì)放在上一步中所配置的目錄下。然后,將從服務(wù)器的網(wǎng)絡(luò)參數(shù),即DNS地址修改為從服務(wù)器的IP地址,這樣從服務(wù)器提供的DNS域名解析服務(wù)就可以使用了。最后,通過nslookup命令可以查看解析結(jié)果。
[root@MiWiFi-R3-srv ~]]# cd /var/named/slaves
[root@MiWiFi-R3-srv ~ slaves]# ls
192.168.199.arpa saidi.com.zone
[root@MiWiFi-R3-srv ~ slaves]# nslookup
> www.saidi.com
Server: 192.168.199.20
Address: 192.168.199.20#53
Name: www.saidi.com
使用BIND提供域名解析服務(wù)
Address: 192.168.199.199
> 192.168.199.199
Server: 192.168.199.20
Address: 192.168.199.20#53
199.199.168.192.in-addr.arpa name = www.saidi.com.
199.199.168.192.in-addr.arpa name =ns.saidi.com.
199.199.168.192.in-addr.arpa name = mail.saidi.com.
DNS域名解析服務(wù)的重要性不言而喻,在使用DNS域名解析服務(wù)器時(shí),一個(gè)域一般會(huì)需要多個(gè)服務(wù)器,因此就會(huì)出現(xiàn)數(shù)據(jù)在不同NDS服務(wù)間的同步問題,主從服務(wù)架構(gòu)的方式很好地解決了該問題。然而,在一般情況下,DNS間的Zone Transfer(區(qū)域信息傳輸)都是通過明文傳輸?shù)?,這種傳輸方式是非常危險(xiǎn)的,為了保障解析服務(wù)安全,BIND服務(wù)程序使用TSIG(Transaction SIGnature)加密機(jī)制為數(shù)據(jù)安全傳輸提供保障。
該實(shí)驗(yàn)依然使用表1(主服務(wù)器和從服務(wù)器的IP地址和操作系統(tǒng)信息表)中的兩臺(tái)服務(wù)器。具體步驟如下。
以上實(shí)驗(yàn)在從服務(wù)器上部署好BIND服務(wù)程序并重啟后,在從服務(wù)器上可以看到從主服務(wù)器上同步到的數(shù)據(jù)配置文件:
[root@MiWiFi-R3-srv ~]]# ls -al /var/named/slaves/
total 12
drwxrwx---. 2 named named 54 Jun 7 16:02 .
drwxr-x---. 6 root named 4096 Jun 7 15:58 ..
-rw-r--r--. 1 named named 432 Jun 7 16:02 192.168.199.arpa
-rw-r--r--. 1 named named 439 Jun 7 16:02 saidi.com.zone。
(1)在主服務(wù)器中生成密鑰。生成安全的DNS服務(wù)密鑰的命令為:dnssec-keygen,使用格式為dnssec-keygen[參數(shù)],dnssec-keygen命令常用參數(shù)說(shuō)明如表2所示。
參考表2中的常用參數(shù)說(shuō)明,使用命令生成一個(gè)128位主機(jī)名稱為master-slave的HMAC-MD5算法的密鑰文件。然后,在當(dāng)前目錄中就會(huì)找到私鑰文件和公鑰文件,之后會(huì)需要將私鑰文件中KEY寫入到傳輸配置文件中,因此找到文件后要記錄私鑰中Key后邊的參數(shù)值。
[root@MiWiFi-R3-srv ~]]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
Kmaster-slave.+157+46845
[root@MiWiFi-R3-srv ~]]# ls -al Kmasterslave.+157+46845.*
-rw-------. 1 root root 56 Jun 7 16:06 Kmaster-slave.+157+46845.key
-rw-------. 1 root root 165 Jun 7 16:06 Kmaster-slave.+157+46845.private
[root@MiWiFi-R3-srv ~]]# cat Kmasterslave.+157+46845.private
Private-key-format: v1.3
Algorithm: 157 (HMAC_MD5)
Key: 1XEEL3tG5DNLOw+1WHfE3Q==
Bits: AAA=
Created: 20170607080621
Publish: 20170607080621
Activate: 20170607080621
(2)操作主服務(wù)器創(chuàng)建密鑰認(rèn)證文件。在該步驟中主要進(jìn)行的操作,是把BIND服務(wù)程序中用來(lái)保存配置文件的目錄中上一步中生成的加密算法、密鑰名稱及私鑰加密字符串,寫入到傳輸配置文件transfer.key中。出于安全考慮,把文件所在的組改成named,縮小文件權(quán)限,最后將該文件硬鏈接到/etc目錄中。
[root@MiWiFi-R3-srv ~]]# cd /var/named/chroot/etc/
[root@MiWiFi-R3-srv ~ etc]# vim transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "1XEEL3tG5DNLOw+1WHfE3Q==";
};
[root@MiWiFi-R3-srv ~]]# chown root:named transfer.key
[root@MiWiFi-R3-srv ~]]# chmod 640 transfer.key。
[root@MiWiFi-R3-srv ~]]# ln transfer.key /etc/transfer.key
(3)打開并加載BIND服務(wù)程序的密鑰驗(yàn)證功能。在該步驟中,先要在主服務(wù)器的配置文件中加載密鑰驗(yàn)證文件,然后修改文件,使只有帶有master-slave密鑰認(rèn)證的DNS服務(wù)器才可以同步數(shù)據(jù)配置文件。
[root@MiWiFi-R3-srv ~]]# vim /etc/named.conf
9 include "/etc/transfer.key";
18 allow-transfer { key master-slave; };
[root@MiWiFi-R3-srv ~]]# systemctl restart named。
完成以上三個(gè)步驟后,DNS主服務(wù)器基于TSIG的安全加密傳輸就已經(jīng)完全配置好了。然后,刪除掉DNS從服務(wù)器從主服務(wù)器中同步的所有數(shù)據(jù)配置文件,重啟BIND服務(wù)程序,發(fā)現(xiàn)此時(shí)從服務(wù)器不能自動(dòng)同步數(shù)據(jù)配置文件。
[root@MiWiFi-R3-srv ~]]# rm -rf /var/named/slaves/*
[root@MiWiFi-R3-srv ~]]# systemctl restart named
[root@MiWiFi-R3-srv ~]]# ls /var/named/slaves/。
(4)為了使從服務(wù)器支持密鑰驗(yàn)證,對(duì)其進(jìn)行配置。配置方法和配置DNS主服務(wù)器的方法相近,均需要?jiǎng)?chuàng)建密鑰認(rèn)證文件,創(chuàng)建的位置仍在BIND服務(wù)程序的配置文件目錄中。創(chuàng)建完成后設(shè)置相應(yīng)的權(quán)限,最后把該文件做一個(gè)硬鏈接到/etc目錄中。
[root@MiWiFi-R3-srv ~]]# cd /var/named/chroot/etc
[root@MiWiFi-R3-srv ~ etc]# vim transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "1XEEL3tG5DNLOw+1WHfE3Q==";
};
[root@MiWiFi-R3-srv ~ etc]# chown root:named transfer.key
[root@MiWiFi-R3-srv ~ etc]# chmod 640 transfer.key
[root@MiWiFi-R3-srv ~ etc]# ln transfer.key/etc/transfer.key。
(5)操作從服務(wù)器,打開并加載其密鑰驗(yàn)證功能。此操作也是在主配置文件中加載密鑰認(rèn)證文件,然后將主服務(wù)器的IP地址和密鑰名稱依據(jù)指定格式進(jìn)行配置。但是,需要注意密鑰名稱等參數(shù)位置要適當(dāng),不能太靠前,這樣能夠避免BIND服務(wù)程序不會(huì)因?yàn)槲醇虞d完預(yù)設(shè)參數(shù)而報(bào)錯(cuò),一般情況下寫在第43行左右即可。
[root@MiWiFi-R3-srv ~ etc]# vim /etc/named.conf
9 include "/etc/transfer.key";
43 server 192.168.199.199
44 {
45 keys { master-slave; }。
(6)驗(yàn)證是否能夠同步數(shù)據(jù)配置文件。主從DNS服務(wù)器的BIND服務(wù)程序都已經(jīng)完全配置好,且匹配了相同的密鑰認(rèn)證文件。重啟BIND服務(wù)程序后,看到能夠成功的同步數(shù)據(jù)配置文件。
[root@MiWiFi-R3-srv ~]]# systemctl restart named
[root@MiWiFi-R3-srv ~]]# ls /var/named/slaves/
192.168.199.arpa saidi.com.zone。
大部分企業(yè)一般會(huì)自己搭建DNS服務(wù)器,但是這樣不利于密鑰的安全保存,對(duì)于密鑰的安全性會(huì)存在嚴(yán)重的安全隱患,因?yàn)槠髽I(yè)內(nèi)部的機(jī)房和設(shè)備具有不穩(wěn)定性,而且可能人員流動(dòng)性也會(huì)比較大,假若離職的員工存儲(chǔ)了相關(guān)的密鑰文件信息,如果再在公司外部自己搭建了DNS從服務(wù)器,完全可以通過同步公司內(nèi)部信息,盜取公司CDN域名信息。鑒于上述這種企業(yè)DNS主從服務(wù)器的類似問題,可通過使用多因素認(rèn)證(MFA)來(lái)提高DNS服務(wù)器的安全性,因?yàn)槠渚哂兴膫€(gè)優(yōu)勢(shì)。
(1)Authing具有一個(gè)獨(dú)特的功能,即微信小程序“終端認(rèn)證功能”。采用手機(jī)接收小程序發(fā)送的動(dòng)態(tài)口令方式,實(shí)現(xiàn)“多因素認(rèn)證”,可以使賬戶安全系數(shù)提升到99.99%。
(2)可以對(duì)不同的成員、角色、組織設(shè)置再次驗(yàn)證規(guī)則。
(3)能夠智能識(shí)別每次登錄用戶的安全級(jí)別,然后基于此設(shè)置不同的登錄驗(yàn)證策略。
(4)能夠根據(jù)應(yīng)用的重要級(jí)別,對(duì)不同的應(yīng)用設(shè)置對(duì)應(yīng)級(jí)別的二次驗(yàn)證啟動(dòng)規(guī)則。
通過多因素認(rèn)證(MFA)相結(jié)合,它能夠在用戶名和密碼之外再增加一個(gè)保護(hù)層,如新地址登錄、異地登錄要求手機(jī)短信驗(yàn)證碼驗(yàn)證、銀行的電子密碼器等方式,當(dāng)有新的從DNS服務(wù)器進(jìn)行同步時(shí),應(yīng)進(jìn)行多因素的二次認(rèn)證,以此來(lái)確保從DNS服務(wù)器的“合法性”,如圖2所示。
表2 dnssec-keygen命令常用參數(shù)說(shuō)明
圖2 認(rèn)證過程
隨著科技的不斷發(fā)展,大數(shù)據(jù)、人工智能、區(qū)塊鏈等新技術(shù)的出現(xiàn),業(yè)務(wù)越來(lái)越依賴于數(shù)據(jù)。數(shù)據(jù)逐漸成為整個(gè)企業(yè)的命脈,大量數(shù)據(jù)需要在不同機(jī)器、設(shè)備間傳輸,數(shù)據(jù)的安全性問題不僅要考慮到數(shù)據(jù)被截獲的問題,還需要高度關(guān)注數(shù)據(jù)傳輸過程中接收人驗(yàn)證的問題,以避免因數(shù)據(jù)安全問題給企業(yè)造成嚴(yán)重的經(jīng)濟(jì)損失。