DNS解析与域名服务安全防护策略
企業(yè)開源 DNS 服務(wù)應(yīng)用概述
在 Internet 上域名與 IP 地址之間是一一對應(yīng)的,域名雖然便于人們記憶,但機(jī)器之間只能互相認(rèn)識 IP 地址,它們之間的轉(zhuǎn)換工作稱為域名解析,域名解析需要由專門的域名解析服務(wù)器來完成,DNS 就是進(jìn)行域名解析的服務(wù)器。DNS 是域名系統(tǒng) Domain Name System 的縮寫,該系統(tǒng)用于命名組織到域?qū)哟谓Y(jié)構(gòu)中的計算機(jī)和網(wǎng)絡(luò)服務(wù)。DNS 命名用于 Internet 等 TCP/IP 網(wǎng)絡(luò)中,通過用戶友好的名稱查找計算機(jī)和服務(wù)。當(dāng)用戶在應(yīng)用程序中輸入 DNS 名稱時,DNS 服務(wù)可以將此名稱解析為與之相關(guān)的其他信息,如 IP 地址。因為,用戶在上網(wǎng)時輸入的網(wǎng)址,是通過域名解析系解析找到相對應(yīng)的 IP 地址,這樣才能上網(wǎng)。其實,域名的最終指向是 IP。
DNS 是一個分層級的分散式名稱對應(yīng)系統(tǒng),看起來有點像電腦的目錄樹結(jié)構(gòu)。在最頂端的是一個“.”(root),然后其下分為好幾個基本類別名稱,如 com、org、edu 等。再下面是組織名稱,如 sun、yale 等。繼而是主機(jī)名稱,如 eng、cs、ntu 等。如圖 1 所示的 DNS 域名空間的分層結(jié)構(gòu):
圖 1.DNS 域名空間的分層結(jié)構(gòu)
值得一提的是,因為當(dāng)初 Internet 是從美國發(fā)起的,所以當(dāng)時并沒有國域名稱。但隨著后來 Internet 的蓬勃發(fā)展,DNS 也加進(jìn)了諸如 cn、jp、au 等國域名稱。所以一個完整的 DNS 名稱就好像是這樣的 www.xyz.com.cn 而整個名稱對應(yīng)的就是一個 IP 地址了。在開始的時候 root 下面只有六個組織類別:
- edu:教育學(xué)術(shù)單位
- org:組織機(jī)構(gòu)
- net:網(wǎng)路通訊單位
- com:公司企業(yè)
- gov:政府機(jī)關(guān)
- mil:軍事單位
不過自從組織類別名稱開放以後各種各樣五花八門的名稱也相繼出現(xiàn),但無論如何取名的規(guī)則最好量適合網(wǎng)站性質(zhì)。除了原來的類別資料由美國的 NIC(Network Information Center)管理之外,其它在國域以下的類別分別由該國的 NIC 管理。
DNS 系統(tǒng)的組成
DNS 系統(tǒng)基于客戶機(jī) / 服務(wù)器模式,從概念上說它主要由三個部分組成:
(1)域名空間:域名空間中的記錄標(biāo)識一組主機(jī)并提供它們的有關(guān)信息。域中的每一個節(jié)點都有它的有關(guān)信息的數(shù)據(jù)庫。查詢命令試圖從這個數(shù)據(jù)庫中提取適當(dāng)?shù)男畔ⅰ:唵蔚卣f,域名空間是所有不同類型信息的列表,這些信息是域名、IP 地址、郵件別名和那些在 DNS 系統(tǒng)中能查到的內(nèi)容。
(2)域名服務(wù)器:保持并維護(hù)域名空間中的數(shù)據(jù)的程序。每個域名服務(wù)器含有一個域名空間子集的完整信息,并保存其它有關(guān)部分的信息。一個域名服務(wù)器擁有它控制范圍的完整信息。控制的信息按區(qū)進(jìn)行劃分,區(qū)可以分布在不同的域名服務(wù)器上,以便為每個區(qū)提供服務(wù)。每個域名服務(wù)器都知道所有負(fù)責(zé)其他區(qū)的域名服務(wù)器。如果來了一個請求,它請求給定域名服務(wù)器負(fù)責(zé)的那個區(qū)的信息,那么這個域名服務(wù)器只是簡單地返回信息。但是,如果請求是不同區(qū)的信息,那么這個域名服務(wù)器就要與控制該區(qū)的相應(yīng)服務(wù)器聯(lián)系。
(3)解析器:解析器是簡單的程序或子程序庫,它從服務(wù)器中提取信息以響應(yīng)對域名空間內(nèi)主機(jī)的查詢。
DNS 是一個很復(fù)雜的概念,下表列出了常用的 DNS 術(shù)語:
- 域:代表網(wǎng)絡(luò)一部分的邏輯實體或組織。
- 域名:主機(jī)名的一部分,它代表包含這個主機(jī)的域。它可以和域交換使用。
- 主機(jī):網(wǎng)絡(luò)上的一臺計算機(jī)。
- 節(jié)點:網(wǎng)絡(luò)上的一臺計算機(jī)。
- 域名服務(wù)器:提供 DNS 服務(wù)的計算機(jī),它將 DNS 名字轉(zhuǎn)化為 IP 地址。
- 解析:把一個域名轉(zhuǎn)化為與其相應(yīng)的 IP 地址的過程。
- 解析器:從域名服務(wù)器中提取 DNS 信息的程序或庫子程序。
- 反向解析:將給出的 IP 地址轉(zhuǎn)化為其相應(yīng)的 DNS 名字。
- 欺騙:使網(wǎng)絡(luò)看上去好象具有不同的 IP 地址或域名的行為。
DNS 服務(wù)器的類型
DNS 域名服務(wù)器是用來存儲主機(jī) - 域名映射信息的,這些服務(wù)器具體又可以分為 3 類:
(1)主 DNS 服務(wù)器(primary name server):它是特定域所有信息的權(quán)威性信息源。它從域管理員構(gòu)造的本地磁盤文件中加載域信息,該文件(區(qū)文件)包含著該服務(wù)器具有管理權(quán)的一部分域結(jié)構(gòu)的最精確信息。主服務(wù)器是一種權(quán)威性服務(wù)器,因為它以絕對的權(quán)威去回答對其管轄域的任何查詢。
(2)輔助 DNS 服務(wù)器(secondary name server):它可從主服務(wù)器中復(fù)制一整套域信息。區(qū)文件是從主服務(wù)器中復(fù)制出來的,并作為本地磁盤文件存儲在輔助服務(wù)器中。這種復(fù)制稱為“區(qū)文件復(fù)制”。在輔助域名服務(wù)器中有一個所有域信息的完整拷貝,可以有權(quán)威地回答對該域的查詢。因此,輔助域名服務(wù)器也稱作權(quán)威性服務(wù)器。配置輔助域名服務(wù)器不需要生成本地區(qū)文件,因為可以從主服務(wù)器中下載該區(qū)文件。
(3)高速緩存服務(wù)器(caching-only server):可運行域名服務(wù)器軟件,但是沒有域名數(shù)據(jù)庫軟件。它從某個遠(yuǎn)程服務(wù)器取得每次域名服務(wù)器查詢的結(jié)果,一旦取得一個,就將它放在高速緩存中,以后查詢相同的信息時就用它予以回答。高速緩存服務(wù)器不是權(quán)威性服務(wù)器,因為它提供的所有信息都是間接信息。對于高速緩存服務(wù)器只需要配置一個高速緩存文件,但最常見的配置還包括一個回送文件,這或許是最常見的域名服務(wù)器配置。
DNS 的工作原理
DNS 基于 C/S(Client/Server,客戶機(jī) / 服務(wù)器)模式,因而分為 Client 和 Server 兩種角色。Client 扮演詢問的角色,也就是向 Server 詢問一個 Domain Name,而 Server 必須要回答此 Domain Name 所對應(yīng)的真正 IP 地址。而當(dāng)?shù)氐?DNS 先會查自己的資料庫。如果自己的資料庫沒有,則會往該 DNS 上所設(shè)的其他 DNS 進(jìn)行求助詢問,依此得到答案之后,將收到的答案存起來,并回答客戶。
DNS 服務(wù)器會根據(jù)不同的授權(quán)區(qū)(Zone),記錄所屬該網(wǎng)域下的各名稱資料,這個資料包括網(wǎng)域下的次網(wǎng)域名稱及主機(jī)名稱。在每一個名稱服務(wù)器中都有一個高速緩存區(qū)(Cache),這個 高速緩存區(qū)的主要目的是將該名稱服務(wù)器所查詢出來的名稱及相對的 IP 地址記錄在高速緩存區(qū)中,這樣當(dāng)下一次還有另外一個客戶端到次服務(wù)器上去查詢相同的名稱時,服務(wù)器就不用在到別臺主機(jī)上去尋找,而直接可以從緩存區(qū)中找到該名稱記錄資料,傳回給客戶端,以加速客戶端對名稱查詢的速度。
舉個例子,當(dāng) DNS 客戶端向指定的 DNS 服務(wù)器查詢網(wǎng) Internet 上的某一臺主機(jī)名稱時,DNS 服務(wù)器會先在自己的高速緩存區(qū)中查詢有無該條紀(jì)錄,如果找到該條名稱記錄后,會從 DNS 服務(wù)器直接將所對應(yīng)到的 IP 地址傳回給客戶端;如果查不到,則再次在本地資料庫中找尋用戶所指定的名稱;如果 DNS 服務(wù)器在高速緩存區(qū)中和本地資料記錄都查不到時,服務(wù)器才會向別的 DNS 服務(wù)器查詢所要的名稱。例如,本地的 DNS 服務(wù)器會向最接近(比如屬于同一個 IP 地址段或者同一個 ISP)的 DNS 服務(wù)器去要求幫忙找尋該名稱的 IP 地址。在另一臺服務(wù)器上也有相同的動作的查詢,當(dāng)查詢到后會回復(fù)原本要求查詢的服務(wù)器,該 DNS 服務(wù)器在接收到另一臺 DNS 服務(wù)器查詢的結(jié)果后,先將所查詢到的主機(jī)名稱及對應(yīng) IP 地址記錄到高速緩存區(qū)中,最后在將所查詢到的結(jié)果回復(fù)給客戶端。這樣就成功地完成了一次標(biāo)準(zhǔn)的 DNS 查詢 - 應(yīng)答過程。
開源 DNS 服務(wù)構(gòu)建面臨的主要安全威脅分析
DNS 由于受當(dāng)時條件限制,其系統(tǒng)設(shè)計存在很多缺陷:
DNS 面臨的網(wǎng)絡(luò)威脅是指 DNS 在實際的應(yīng)用和部署中,不法用戶或者黑客利用 DNS 協(xié)議或者軟件設(shè)計的漏洞,可以通過網(wǎng)絡(luò)向 DNS 發(fā)起的攻擊,主要包括如下幾種:
實戰(zhàn)一:DNS 服務(wù)安全配置
在使用 DNS 服務(wù)器之前,需要對與之相關(guān)的配置文件進(jìn)行配置,因而首先需要了解這些基本文件,下面列表給出了幾種主要的與 DNS 有關(guān)的文件:
named.conf 主配置文件
在使用 named.conf 進(jìn)行配置時,需要了解如下常用的配置語句,如表 1 所示。
表 1.named.conf 主配文件配置語句說明
| zone | 定義一個區(qū) |
| options | 定義全局配置選項 |
| include | 將其他文件包含到本配置文件中使用 |
| controls | 定義 rndc 命令使用的控制通道 |
| acl | 定義基于 IP 地址的訪問控制 |
| Key | 定義授權(quán)的安全密鑰 |
根據(jù)在實際應(yīng)用中的廣泛程度和重要性,下面我們著重對 option 語句和 zone 聲明的使用進(jìn)行介紹。
使用 option 語句
option 語句的使用語法為:
option { 配置子句 1; 配置子句 2;};在上述語法中,其配置子句常用的主要有如下兩類:
- directory:該子句后接目錄路徑,主要用于定義服務(wù)器區(qū)配置文件的工作目錄,如 /home 等,在 Red Hat Enterprise Linux 5 系統(tǒng)中的默認(rèn)路徑為 /var/named;
- forwarders:該子句后接 IP 地址,定義轉(zhuǎn)發(fā)器;
使用 zone 聲明
區(qū)聲明是主配置文件中非常常用而且是最重要的部分,它一般要說明域名、服務(wù)器類型以及域信息源三個重要部分。它的語法為:
zone “zone_name” IN { type 子句;file 子句; 其他子句;};那么,圍繞上述三個重要部分,區(qū)聲明語句有如下兩類子句:
- type:其主要有如下三種,master(說明一個區(qū)為主域名服務(wù)器)、slave(說明一個區(qū)為輔助域名服務(wù)器)和 hint(說明一個區(qū)為啟動時初始化高速緩存的域名服務(wù)器)。
- file:后接文件路徑,主要說明一個區(qū)的域信息源的路徑。
DNS 服務(wù)器配置實例
為了方便讀者對 DNS 服務(wù)器配置文件的使用有個詳細(xì)的了解,本節(jié)將針對一個實際的配置文件例子來進(jìn)行講解。該配置文件如下所示。我們虛構(gòu)了一個域 feixiang.com 來舉例說明主服務(wù)器的配置,下面是定義 feixiang.com 域的主服務(wù)器的 named.conf 文件:
// generated by named-bootconf.pl options { directory "/var/named"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; }; // a caching only nameserver config // zone "." { type hint; file "named.ca"; }; zone "feixiang.com"{ type master; file "feixiang.com"; }; zone "0.0.127.in-addr.arpa" { type master; file "named.local"; }; zone "198.25.in-addr.arpa"{ type master; file "named.rev"; };上例中第一個 master 告訴我們這是 feixiang.com 域的主服務(wù)器。該域的數(shù)據(jù)是從 named.hosts 文件中加載的。在我們這個例子中,我們將文件名 named.hosts 作為區(qū)文件名。第三個 master 語句指向能將 IP 地址 198.25.0.0 映射為主機(jī)名的文件。它假定本地服務(wù)器是反向域 198.25.in-addr.arpa 的主服務(wù)器,該域的數(shù)據(jù)從文件 named.rev 中加載。
除了定義上述的主文件外,還需要定義如下的區(qū)文件(/var/named/feixiang.com):
$TTL86400 $ORIGIN feixiang.com. @1D IN SOA@ root ( 42; serial (d. adams) 3H; refresh 15M; retry 1W; expiry 1D ); minimum @ IN NS@ @ IN A127.0.0.1 www IN A198.25.25.80 ftp IN A198.25.25.68 web IN CNAMEwww
實戰(zhàn)二:安全使用 DNS 服務(wù)器的高級技巧
配置輔助域名服務(wù)器做到冗余備份
輔助服務(wù)器可從主服務(wù)器中復(fù)制一整套域信息。區(qū)文件是從主服務(wù)器中復(fù)制出來的,并作為本地磁盤文件存儲在輔助服務(wù)器中。這種復(fù)制稱為“區(qū)文件復(fù)制”。在輔助域名服務(wù)器中有一個所有域信息的完整拷貝,可以有權(quán)威地回答對該域的查詢。因此,輔助域名服務(wù)器也稱作權(quán)威性服務(wù)器。配置輔助域名服務(wù)器不需要生成本地區(qū)文件,因為可以從主服務(wù)器中下載該區(qū)文件。
輔助服務(wù)器的配置與主服務(wù)器的配置不同,它使用 slave 語句代替 master 語句。slave 語句指向用作域信息源的遠(yuǎn)程服務(wù)器,以替代本地磁盤文件。下面的 named.conf 文件可以配置 feixiang.com 域的輔助服務(wù)器:
// generated by named-bootconf.pl options { directory "/var/named"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; }; // // a caching only nameserver config // zone "." { type hint; file "named.ca"; }; zone "0.0.127.in-addr.arpa" { type master; file "named.local"; }; zone "feixiang.com"{ type slave; file "named.hosts"; masters {25.198.10.3;}; }; zone "198.25.in-addr.arpa"{ type slave; file "named.rev"; masters {25.198.10.3;}; }; cache . named.ca secondary vbrew.com 25.198.10.3 named.hosts secondary 198.25.in-addr.arpa 25.198.10.3 named.rev primary 0.0.127.in-addr.arpa named.local第一個 slave 語句是使這個服務(wù)器成為 vbrew.com 的輔助服務(wù)器。它告訴 named 從 IP 地址為 25.198.10.3 的服務(wù)器中下載 feixiang.com 的信息,并將其數(shù)據(jù)保存在 /var/named/named.hosts 文件中。如果該文件不存在,named 就創(chuàng)造一個,并從遠(yuǎn)程服務(wù)器中取得區(qū)數(shù)據(jù),然后將這些數(shù)據(jù)寫入新創(chuàng)建的文件中。如果存在該文件,named 就要檢查遠(yuǎn)程服務(wù)器,以了解該遠(yuǎn)程服務(wù)器的數(shù)據(jù)是否不同于該文件中的數(shù)據(jù),如果數(shù)據(jù)有變化,它就下載更新后的數(shù)據(jù),用新數(shù)據(jù)覆蓋該文件的內(nèi)容;如果數(shù)據(jù)沒有變化,named 就加載磁盤文件的內(nèi)容,不必做麻煩的區(qū)轉(zhuǎn)移工作。將一個數(shù)據(jù)庫拷貝到本地磁盤文件中,就不必每次引導(dǎo)主機(jī)時都要轉(zhuǎn)移區(qū)文件;只有當(dāng)數(shù)據(jù)修改時,才進(jìn)行這種區(qū)文件的轉(zhuǎn)移工作。該配置文件中的下一行表示該本地服務(wù)器也是反向域 198.25.in-addr.arpa 的一個輔助服務(wù)器,而且該域的數(shù)據(jù)也從 25.198.10.3 中下載。該反向域的數(shù)據(jù)存儲在 named.rev 中。
配置高速緩存服務(wù)器提高 DNS 服務(wù)器性能
高速緩存服務(wù)器可運行域名服務(wù)器軟件,但是沒有域名數(shù)據(jù)庫軟件。它從某個遠(yuǎn)程服務(wù)器取得每次域名服務(wù)器查詢的結(jié)果,一旦取得一個,就將它放在高速緩存中,以后查詢相同的信息時就用它予以回答。高速緩存服務(wù)器不是權(quán)威性服務(wù)器,因為它提供的所有信息都是間接信息。對于高速緩存服務(wù)器只需要配置一個高速緩存文件,但最常見的配置還包括一個回送文件,這或許是最常見的域名服務(wù)器配置。
配置高速緩存域名服務(wù)器是很簡單的。必須有 named.conf 和 named.ca 文件,通常也要用到 named.local 文件。下面是用于高速緩存服務(wù)器的 named.conf 文件的例子:
// generated by named-bootconf.pl options { directory "/var/named"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; }; // // a caching only nameserver config // // // a caching only nameserver config // zone "." { type hint; file "named.ca"; }; zone "0.0.127.in-addr.arpa" { type master; file "named.local";directory 這一行告訴 named 到哪里去找尋文件。所有其后命名的文件都將是相對于此目錄的。該文件告訴 named 去維持一個域名服務(wù)器響應(yīng)的高速緩存,并利用 named.ca 文件的內(nèi)容去初始化該高速緩存。該高速緩存初始化文件的名字可以是任何名字,但一般使用 /var/named/named.ca。并不是在該文件中使用一個 hint 語句就能使它成為高速緩存配置,幾乎每一種服務(wù)器的配置都要用到 cache 語句,而是因為沒有 master 和 slave 語句才使它成為一個高速緩存配置。
但是,在我們這個例子中卻有一個 master 語句。事實上,幾乎在每一個高速緩存的配置文件中都有這一個語句,它將本地服務(wù)器定義為它自己的回送域的主服務(wù)器,并假定該域的信息存儲在 named.local 文件中。這個回送域是一個 in-addr.arpa 域(in-addr.arpa 域用于指定逆向解析,或 IP 地址到 DNS 名字解析),它將地址 127.0.0.1 映射為名字 localhost。轉(zhuǎn)換自己的回送地址對于大多數(shù)人都是有意義的,因為大多數(shù)的 named.conf 文件都包含這一項。
在大多數(shù)高速緩存服務(wù)器的配置文件中,這種 directory、master 和 hint 語句是唯一使用的語句,但也可以增加其他的語句,forwarders 和 slave 等語句都可以使用。
配置 DNS 負(fù)載均衡防止服務(wù)器宕機(jī)
DNS 負(fù)載均衡技術(shù)是在 DNS 服務(wù)器中為同一個主機(jī)名配置多個 IP 地址,在應(yīng)答 DNS 查詢時,DNS 服務(wù)器對每個查詢將以 DNS 文件中主機(jī)記錄的 IP 地址按順序返回不同的解析結(jié)果,將客戶端的訪問引導(dǎo)到不同的機(jī)器上去,使得不同的客戶端訪問不同的服務(wù)器,從而達(dá)到負(fù)載均衡的目的。
現(xiàn)假設(shè)有三臺服務(wù)器來應(yīng)對 www.feixiang.com 的請求。在采用 Linux 系統(tǒng)上實現(xiàn)起來比較簡單,只需在該域區(qū)文件的數(shù)據(jù)記錄中添加類似下面的資源記錄即可:
web_server1INA210.113.1.1 web_server2INA210.113.1.2 web_server3INA210.113.1.3 wwwINCNAMEweb_server1 wwwINCNAMEweb_server2 wwwINCNAMEweb_server3上述六條資源記錄的具體含義為:在 DNS 服務(wù)器中為 www.feixiang.com 設(shè)定了三臺服務(wù)器響應(yīng)客戶的訪問請求。這三臺服務(wù)器分別為 web_server1、web_server2 和 web_server3,而他們均為 www 服務(wù)器的別名。因此,在訪問 www 服務(wù)器時,DNS 服務(wù)器將依次循環(huán)地將訪問請求均衡到三臺服務(wù)器中去,以達(dá)到負(fù)載均衡的目的。
配置智能 DNS 高速解析
隨著原中國的互聯(lián)網(wǎng)骨干網(wǎng)被一分為二了,北有聯(lián)通、南有電信。從此,細(xì)心的網(wǎng)民可以發(fā)現(xiàn),有些經(jīng)常訪問的網(wǎng)站速度一下子慢了下來,有時候還有訪問不到的情況出現(xiàn)。例如北方地區(qū)的網(wǎng)絡(luò)用戶訪問中國聯(lián)通的服務(wù)器會非常快,而訪問中國電信的服務(wù)器時,感覺非常慢。這種現(xiàn)象不僅影響了網(wǎng)站的訪問量,更嚴(yán)重的是它直接影響了一些經(jīng)營性網(wǎng)站的經(jīng)濟(jì)效益。據(jù)分析,產(chǎn)生這個問題的根本原因是中國電信分家之后,電信與聯(lián)通之間的互連存在問題。雖然信息產(chǎn)業(yè)部已經(jīng)在規(guī)劃南北互通計劃,但在今后相當(dāng)長的一段時期內(nèi),南北方網(wǎng)互連的問題還會長期存在。
智能 DNS 策略解析很好的解決了上面所述的問題。DNS 策略解析最基本的功能是可以智能的判斷訪問網(wǎng)站的用戶,然后根據(jù)不同的訪問者把網(wǎng)站的域名分別解析成不同的 IP 地址。如訪問者是聯(lián)通用戶,DNS 策略解析服務(wù)器會把網(wǎng)站域名對應(yīng)的聯(lián)通 IP 地址解析給這個訪問者。如果用戶是電信用戶,DNS 策略解析服務(wù)器會把網(wǎng)站域名對應(yīng)的電信 IP 地址解析給這個訪問者。
除此之外,智能 DNS 策略解析還可以實現(xiàn)就近訪問機(jī)制。有些用戶在國外和國內(nèi)都放置了服務(wù)器,使用 DNS 策略解析服務(wù)可以讓國外的網(wǎng)絡(luò)用戶訪問國外的服務(wù)器,國內(nèi)的用戶訪問國內(nèi)的服務(wù)器,從而使國內(nèi)外的用戶都能迅速的訪問到網(wǎng)站的服務(wù)器。另外,智能 DNS 策略解析還可以給網(wǎng)站的多個主機(jī)實現(xiàn)負(fù)載均衡,這時來自各地的訪問流量會比較平均的分布到服務(wù)器的每一個主機(jī)上。
下面以一個簡單的例子來說明如何實現(xiàn)智能 DNS 的配置。在配置之前,我們需要使用前面小節(jié)介紹的有關(guān)知識生成針對電信網(wǎng)(telecom_feixiang.com)和聯(lián)通網(wǎng)(cnc_feixiang.com)的區(qū)文件:
// 在 named.conf 文件的options { directory "/var/bind"; }; // 后添加如下控制網(wǎng)段:acl "CNC" { 58.16.0.0/16; 58.17.0.0/17; 58.17.128.0/17; 58.18.0.0/16; 58.19.0.0/16; 58.20.0.0/16; 58.21.0.0/16; 58.22.0.0/15; 58.240.0.0/15; 221.13.128.0/17; 221.14.0.0/15; 221.192.0.0/15; 221.194.0.0/16; 221.195.0.0/16; 221.196.0.0/15; 221.198.0.0/16; 221.207.0.0/18; }; // 修改原來的 dns 配置,讓電信和聯(lián)通訪問不同的配置文件view "view_cnc" { match-clients { CNC;}; zone "." { type hint; file "named.ca"; }; zone "localhost" { type master; file "db.local"; }; zone "0.0.127.in-addr.arpa" { type master; file "127.0.0.zone"; }; zone "feixiang.com" { type master; file "cnc_feixiang.com"; }; zone "10.42.59.in-addr.arpa" { type master; file "59.42.10.zone"; }; zone "110.21.210.in-addr.arpa" { type master; file "210.21.110.zone"; }; }; view "view_any" { match-clients { any; }; zone "." { type hint; file "named.ca"; }; zone "localhost" { type master; file "db.local"; }; zone "0.0.127.in-addr.arpa" { type master; file "127.0.0.zone"; }; zone "feixiang.com" { type master; file "telecom_feixiang.com"; }; zone "10.42.59.in-addr.arpa" { type master; file "59.42.10.zone"; }; zone "110.21.210.in-addr.arpa" { type master; file "210.21.110.zone"; }; };合理配置 DNS 的查詢方式提高效率
DNS 的查詢方式有兩種,遞歸查詢和迭代查詢。合理配置這兩種查詢方式,能夠在實踐中取得較好的效果。
其中,遞歸查詢是最常見的查詢方式,工作方式是:域名服務(wù)器將代替提出請求的客戶機(jī)(下級 DNS 服務(wù)器)進(jìn)行域名查詢,若域名服務(wù)器不能直接回答,則域名服務(wù)器會在域各樹中的各分支的上下進(jìn)行遞歸查詢,最終將返回查詢結(jié)果給客戶機(jī),在域名服務(wù)器查詢期間,客戶機(jī)將完全處于等待狀態(tài)。具體流程示意請見圖 2:
圖 2.DNS 遞歸查詢流程示意
迭代查詢又稱重指引查詢。其工作方式為:當(dāng)服務(wù)器使用迭代查詢時能夠使其他服務(wù)器返回一個最佳的查詢點提示或主機(jī)地址,若此最佳的查詢點中包含需要查詢的主機(jī)地址,則返回主機(jī)地址信息,若此時服務(wù)器不能夠直接查詢到主機(jī)地址,則是按照提示的指引依次查詢,直到服務(wù)器給出的提示中包含所需要查詢的主機(jī)地址為止,一般的,每次指引都會更靠近根服務(wù)器(向上),查尋到根域名服務(wù)器后,則會再次根據(jù)提示向下查找。具體流程示意如圖 3 所示:
圖 3.DNS 迭代查詢流程示意
綜合上面兩點,我們可以看出來,遞歸查詢就是客戶機(jī)會等待最后結(jié)果的查詢,而迭代查詢是客戶機(jī)等到的不一定是最終的結(jié)果,而可能是一個查詢提示。因而存在如下兩個問題:
因此,有很多流量很大的 DNS 服務(wù)器是禁止客戶機(jī)使用遞歸查詢,用這種方式來減輕服務(wù)器的流量。
使用 dnstop 監(jiān)控 DNS 流量
在維護(hù) DNS 服務(wù)器時,用戶往往希望知道到底是哪些用戶在使用 DNS 服務(wù)器,同時也希望能對 DNS 狀態(tài)查詢做一個統(tǒng)計,以及時地知道 DNS 的工作情況和狀態(tài)。在傳統(tǒng)的方式下,用戶通常使用的是 tcpdump 等開源工具來進(jìn)行抓包并通過查看 53 端口的流量來查看 DNS 數(shù)據(jù)包。由于 tcpdump 并沒有針對 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 抓包庫(libpcap)對網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包進(jìn)行截獲和過濾,所以用戶需要確保系統(tǒng)安裝相應(yīng)軟件后才能正常安裝和使用 dnstop。通常情況下,這兩種必須的庫都已經(jīng)在系統(tǒng)中預(yù)裝好了,使用下面的命令安裝 dnstop 即可:
(1)解壓縮源代碼安裝包
#tar vxfz ddnstop-20090128.tar.gz(2)切換到解壓目錄,并使用 configure 命令生成 Makefile 文件
#cd dnstop-20090128 #./configure(3)使用 make 命令進(jìn)行安裝
#make安裝成功后,可以查看通過相應(yīng)的網(wǎng)絡(luò)接口來監(jiān)控 DNS 網(wǎng)絡(luò)流量,如下所示:
#./dnstop -s eth0 0 new queries, 6 total queries Fri Mar 26 20:18:12 2010 Sources count % ---------------- --------- ------ 198.35.0.13 4 66.7 198.35.0.14 1 16.7 198.35.0.15 1 16.7在運行 dnstop 的過程中,可以鍵入 <S>、<D>、<T>、<1>、<2>、<Ctr+R>、<Ctr+X> 等方式以交互方式來顯示不同的信息:
- S:記錄發(fā)送 DNS 查詢的客戶端 IP 地址列表
- D:記錄 DNS 查詢的目的服務(wù)器的 IP 地址表
- T:記錄查詢詳細(xì)類型
- 1:記錄查詢的頂級域名
- 2:記錄查詢的二級域名
- Ctr+R:重新紀(jì)錄
- Ctr+X:退出
更詳細(xì)信息可以使用 dnstop –help 命令進(jìn)行查看。
使用 DNSSEC 技術(shù)保護(hù) DNS 安全
DNSSEC 主要依靠公鑰技術(shù)對于包含在 DNS 中的信息創(chuàng)建密碼簽名。密碼簽名通過計算出一個密碼 hash 數(shù)來提供 DNS 中數(shù)據(jù)的完整性,并將該 hash 數(shù)封裝進(jìn)行保護(hù)。私/公鑰對中的私鑰用來封裝 hash 數(shù),然后可以用公鑰把 hash 數(shù)譯出來。如果這個譯出的 hash 值匹配接收者剛剛計算出來的 hash 樹,那么表明數(shù)據(jù)是完整的。不管譯出來的 hash 數(shù)和計算出來的 hash 數(shù)是否匹配,對于密碼簽名這種認(rèn)證方式都是絕對正確的,因為公鑰僅僅用于解密合法的 hash 數(shù),所以只有擁有私鑰的擁有者可以加密這些信息。
DNSSEC 的功能主要有三個方面:
- 為 DNS 數(shù)據(jù)提供來源驗證,即保證數(shù)據(jù)來自正確的名稱服務(wù)器。
- 為數(shù)據(jù)提供完整性驗證,即保證數(shù)據(jù)在傳輸?shù)倪^程中沒有任何的更改。
- 否定存在驗證,即對否定應(yīng)答報文提供驗證信息,確認(rèn)授權(quán)名稱服務(wù)器上不存在所查詢的資源記錄。DNSSEC 為了實現(xiàn)簽名和簽名的驗證功能,引入了四個新的資源記錄類型:
- DNSKEY:用于存儲驗證 DNS 數(shù)據(jù)的公鑰;
- RRSIG:用于存儲 DNS 資源記錄的簽名信息;
- NSEC:存儲和對應(yīng)的所有者相鄰的下一個資源記錄,主要用于否定存在驗證;
- DS(Delegation Signer,授權(quán)簽名者):用于 DNSKEY 驗證過程,存儲密鑰標(biāo)簽,加密算法和對應(yīng)的 DNSKEY 的摘要信息。
DNSSEC 的工作機(jī)制主要體現(xiàn)在 DNS 工作過程中的以下 2 個方面:
(1)DNS 查詢 / 應(yīng)答:這一步因為使用了未加密和未驗證的 UDP 數(shù)據(jù)包,存在嚴(yán)重的安全漏洞。DNSSEC 在這一步中加入了對數(shù)據(jù)源的驗證和對數(shù)據(jù)完整性的校驗。DNSSEC 要對某個域的數(shù)據(jù)進(jìn)行驗證,客戶端就必須信任這個域的公鑰。由于 DNS 中沒有第三方的公鑰驗證體系,要建立對公鑰的信任,就必須從一個已經(jīng)被信任的名稱服務(wù)器(如根服務(wù)器)開始,由此服務(wù)器驗證其子域的公鑰。然后再由這個子域的公鑰驗證其子域的公鑰,一直到所請求的域的公鑰得到驗證,這個過程稱為建立信任鏈。起始受信任的名稱服務(wù)器的公鑰就被稱為信任錨點。驗證數(shù)據(jù)源以后,下一步驗證應(yīng)答信息本身,它要求應(yīng)答不僅包括請求的資源記錄,還包括驗證這些資源記錄的所需的信息,即一個資源記錄集的數(shù)字簽名,它包含 RRSIG 中。使用信任錨點的 DNS 客戶端就可以通過驗證此數(shù)字簽名來檢查應(yīng)答報文是否真實。為了保證和查詢相應(yīng)的資源記錄的確不存在,而不是在傳輸過程中被刪除,DNSSEC 生成一個特殊的資源類型記錄(NSEC)來檢測域名是否存在。
(2)DNS 域區(qū)傳輸:一個域區(qū)中一般有主域名服務(wù)器和備份域名服務(wù)器,域區(qū)傳輸就是域區(qū)文件從主域名服務(wù)器 copy 到備份域名服務(wù)器上的過程。在這個過程中面臨著數(shù)據(jù)包攔截和更改的危險。DNSSEC 用 TSIG(Transaction Signature,事務(wù)簽名)來驗證請求方的真實身份和保證傳輸內(nèi)容在傳輸過程中被篡改。
因此,DNSSEC 的部署主要有三個步驟:
- 生成公 / 私密鑰對
- 公鑰的發(fā)布及私鑰的存儲
- 域區(qū)的簽署
DNSSEC 也是一種非常優(yōu)秀的開源工具,用戶可以到 http://sourceforge.net/projects/dnssec-tools/files/dnssec-tools/1.5/dnssec-tools-1.5.tar.gz/download 網(wǎng)站上進(jìn)行下載和安裝,目前其最新版本為 dnssec-tools-1.5.tar.gz。安裝的具體步驟如下所示:
(1)解壓縮源代碼安裝包
#tar vxfz dnssec-tools-1.5.tar.gz(2)切換到解壓目錄,并使用 configure 命令生成 Makefile 文件
#cd dnssec-tools-1.5 #./configure(3)使用 make 命令進(jìn)行安裝
#make下面我們通過一個實際的例子來說明如何為名稱是 feixiang.com 的域建立 DNSSEC 配置。使用 DNSSEC 保護(hù) DNS 的步驟如下所示:
(1)為 feixiang.com 域建立一對密鑰。在 /var/named 目錄下,使用如下命令:
#/usr/sbin/dnssec-keygen -a DSA -b 768 -n ZONE feixiang.com這個命令產(chǎn)生一對長度 768 位 DSA 算法的私有密鑰和公共密鑰。
(2)使用如下命令
#/usr/sbin/dnssec-makekeyset -t 1800 -e now+21 Kfeixiang.com.+003+29462建立一個密鑰集合。該命令以 1800 秒的生存時間(time-to-live)建立密鑰集合,有效期限 21 天,并且創(chuàng)建一個文件:feixiang.com.keyset。
(3)使用命令
#/usr/sbin/dnssec-signkey feixiang.com.keyset Kfeixiang.com.+003+29462為密鑰集合簽名。然后建立一個簽名文件:feixiang.com.signedkey。
(4)使用命令
#/usr/sbin/dnssec-signzone -o feixiang.com feixiang.com.signed為區(qū)帶文件簽名。然后建立一個簽名文件:feixiang.com.signed。
(5)替換配置文件 /etc/named.conf 中 feixiang.com 的區(qū)文件部分。如下所示:
zone “feixiang.com” IN { type master; file “feixiang.com.signed”; allow-update { none; }; };
總結(jié)
以上是生活随笔為你收集整理的DNS解析与域名服务安全防护策略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC6.0中使用Activex控件小结
- 下一篇: 建行提示找不到服务器,中国建设银行E路护