DNS解析与域名服务安全防护策略
企業開源 DNS 服務應用概述
在 Internet 上域名與 IP 地址之間是一一對應的,域名雖然便于人們記憶,但機器之間只能互相認識 IP 地址,它們之間的轉換工作稱為域名解析,域名解析需要由專門的域名解析服務器來完成,DNS 就是進行域名解析的服務器。DNS 是域名系統 Domain Name System 的縮寫,該系統用于命名組織到域層次結構中的計算機和網絡服務。DNS 命名用于 Internet 等 TCP/IP 網絡中,通過用戶友好的名稱查找計算機和服務。當用戶在應用程序中輸入 DNS 名稱時,DNS 服務可以將此名稱解析為與之相關的其他信息,如 IP 地址。因為,用戶在上網時輸入的網址,是通過域名解析系解析找到相對應的 IP 地址,這樣才能上網。其實,域名的最終指向是 IP。
DNS 是一個分層級的分散式名稱對應系統,看起來有點像電腦的目錄樹結構。在最頂端的是一個“.”(root),然后其下分為好幾個基本類別名稱,如 com、org、edu 等。再下面是組織名稱,如 sun、yale 等。繼而是主機名稱,如 eng、cs、ntu 等。如圖 1 所示的 DNS 域名空間的分層結構:
圖 1.DNS 域名空間的分層結構
值得一提的是,因為當初 Internet 是從美國發起的,所以當時并沒有國域名稱。但隨著后來 Internet 的蓬勃發展,DNS 也加進了諸如 cn、jp、au 等國域名稱。所以一個完整的 DNS 名稱就好像是這樣的 www.xyz.com.cn 而整個名稱對應的就是一個 IP 地址了。在開始的時候 root 下面只有六個組織類別:
- edu:教育學術單位
- org:組織機構
- net:網路通訊單位
- com:公司企業
- gov:政府機關
- mil:軍事單位
不過自從組織類別名稱開放以後各種各樣五花八門的名稱也相繼出現,但無論如何取名的規則最好量適合網站性質。除了原來的類別資料由美國的 NIC(Network Information Center)管理之外,其它在國域以下的類別分別由該國的 NIC 管理。
DNS 系統的組成
DNS 系統基于客戶機 / 服務器模式,從概念上說它主要由三個部分組成:
(1)域名空間:域名空間中的記錄標識一組主機并提供它們的有關信息。域中的每一個節點都有它的有關信息的數據庫。查詢命令試圖從這個數據庫中提取適當的信息。簡單地說,域名空間是所有不同類型信息的列表,這些信息是域名、IP 地址、郵件別名和那些在 DNS 系統中能查到的內容。
(2)域名服務器:保持并維護域名空間中的數據的程序。每個域名服務器含有一個域名空間子集的完整信息,并保存其它有關部分的信息。一個域名服務器擁有它控制范圍的完整信息。控制的信息按區進行劃分,區可以分布在不同的域名服務器上,以便為每個區提供服務。每個域名服務器都知道所有負責其他區的域名服務器。如果來了一個請求,它請求給定域名服務器負責的那個區的信息,那么這個域名服務器只是簡單地返回信息。但是,如果請求是不同區的信息,那么這個域名服務器就要與控制該區的相應服務器聯系。
(3)解析器:解析器是簡單的程序或子程序庫,它從服務器中提取信息以響應對域名空間內主機的查詢。
DNS 是一個很復雜的概念,下表列出了常用的 DNS 術語:
- 域:代表網絡一部分的邏輯實體或組織。
- 域名:主機名的一部分,它代表包含這個主機的域。它可以和域交換使用。
- 主機:網絡上的一臺計算機。
- 節點:網絡上的一臺計算機。
- 域名服務器:提供 DNS 服務的計算機,它將 DNS 名字轉化為 IP 地址。
- 解析:把一個域名轉化為與其相應的 IP 地址的過程。
- 解析器:從域名服務器中提取 DNS 信息的程序或庫子程序。
- 反向解析:將給出的 IP 地址轉化為其相應的 DNS 名字。
- 欺騙:使網絡看上去好象具有不同的 IP 地址或域名的行為。
DNS 服務器的類型
DNS 域名服務器是用來存儲主機 - 域名映射信息的,這些服務器具體又可以分為 3 類:
(1)主 DNS 服務器(primary name server):它是特定域所有信息的權威性信息源。它從域管理員構造的本地磁盤文件中加載域信息,該文件(區文件)包含著該服務器具有管理權的一部分域結構的最精確信息。主服務器是一種權威性服務器,因為它以絕對的權威去回答對其管轄域的任何查詢。
(2)輔助 DNS 服務器(secondary name server):它可從主服務器中復制一整套域信息。區文件是從主服務器中復制出來的,并作為本地磁盤文件存儲在輔助服務器中。這種復制稱為“區文件復制”。在輔助域名服務器中有一個所有域信息的完整拷貝,可以有權威地回答對該域的查詢。因此,輔助域名服務器也稱作權威性服務器。配置輔助域名服務器不需要生成本地區文件,因為可以從主服務器中下載該區文件。
(3)高速緩存服務器(caching-only server):可運行域名服務器軟件,但是沒有域名數據庫軟件。它從某個遠程服務器取得每次域名服務器查詢的結果,一旦取得一個,就將它放在高速緩存中,以后查詢相同的信息時就用它予以回答。高速緩存服務器不是權威性服務器,因為它提供的所有信息都是間接信息。對于高速緩存服務器只需要配置一個高速緩存文件,但最常見的配置還包括一個回送文件,這或許是最常見的域名服務器配置。
DNS 的工作原理
DNS 基于 C/S(Client/Server,客戶機 / 服務器)模式,因而分為 Client 和 Server 兩種角色。Client 扮演詢問的角色,也就是向 Server 詢問一個 Domain Name,而 Server 必須要回答此 Domain Name 所對應的真正 IP 地址。而當地的 DNS 先會查自己的資料庫。如果自己的資料庫沒有,則會往該 DNS 上所設的其他 DNS 進行求助詢問,依此得到答案之后,將收到的答案存起來,并回答客戶。
DNS 服務器會根據不同的授權區(Zone),記錄所屬該網域下的各名稱資料,這個資料包括網域下的次網域名稱及主機名稱。在每一個名稱服務器中都有一個高速緩存區(Cache),這個 高速緩存區的主要目的是將該名稱服務器所查詢出來的名稱及相對的 IP 地址記錄在高速緩存區中,這樣當下一次還有另外一個客戶端到次服務器上去查詢相同的名稱時,服務器就不用在到別臺主機上去尋找,而直接可以從緩存區中找到該名稱記錄資料,傳回給客戶端,以加速客戶端對名稱查詢的速度。
舉個例子,當 DNS 客戶端向指定的 DNS 服務器查詢網 Internet 上的某一臺主機名稱時,DNS 服務器會先在自己的高速緩存區中查詢有無該條紀錄,如果找到該條名稱記錄后,會從 DNS 服務器直接將所對應到的 IP 地址傳回給客戶端;如果查不到,則再次在本地資料庫中找尋用戶所指定的名稱;如果 DNS 服務器在高速緩存區中和本地資料記錄都查不到時,服務器才會向別的 DNS 服務器查詢所要的名稱。例如,本地的 DNS 服務器會向最接近(比如屬于同一個 IP 地址段或者同一個 ISP)的 DNS 服務器去要求幫忙找尋該名稱的 IP 地址。在另一臺服務器上也有相同的動作的查詢,當查詢到后會回復原本要求查詢的服務器,該 DNS 服務器在接收到另一臺 DNS 服務器查詢的結果后,先將所查詢到的主機名稱及對應 IP 地址記錄到高速緩存區中,最后在將所查詢到的結果回復給客戶端。這樣就成功地完成了一次標準的 DNS 查詢 - 應答過程。
開源 DNS 服務構建面臨的主要安全威脅分析
DNS 由于受當時條件限制,其系統設計存在很多缺陷:
DNS 面臨的網絡威脅是指 DNS 在實際的應用和部署中,不法用戶或者黑客利用 DNS 協議或者軟件設計的漏洞,可以通過網絡向 DNS 發起的攻擊,主要包括如下幾種:
實戰一:DNS 服務安全配置
在使用 DNS 服務器之前,需要對與之相關的配置文件進行配置,因而首先需要了解這些基本文件,下面列表給出了幾種主要的與 DNS 有關的文件:
named.conf 主配置文件
在使用 named.conf 進行配置時,需要了解如下常用的配置語句,如表 1 所示。
表 1.named.conf 主配文件配置語句說明
| zone | 定義一個區 |
| options | 定義全局配置選項 |
| include | 將其他文件包含到本配置文件中使用 |
| controls | 定義 rndc 命令使用的控制通道 |
| acl | 定義基于 IP 地址的訪問控制 |
| Key | 定義授權的安全密鑰 |
根據在實際應用中的廣泛程度和重要性,下面我們著重對 option 語句和 zone 聲明的使用進行介紹。
使用 option 語句
option 語句的使用語法為:
option { 配置子句 1; 配置子句 2;};在上述語法中,其配置子句常用的主要有如下兩類:
- directory:該子句后接目錄路徑,主要用于定義服務器區配置文件的工作目錄,如 /home 等,在 Red Hat Enterprise Linux 5 系統中的默認路徑為 /var/named;
- forwarders:該子句后接 IP 地址,定義轉發器;
使用 zone 聲明
區聲明是主配置文件中非常常用而且是最重要的部分,它一般要說明域名、服務器類型以及域信息源三個重要部分。它的語法為:
zone “zone_name” IN { type 子句;file 子句; 其他子句;};那么,圍繞上述三個重要部分,區聲明語句有如下兩類子句:
- type:其主要有如下三種,master(說明一個區為主域名服務器)、slave(說明一個區為輔助域名服務器)和 hint(說明一個區為啟動時初始化高速緩存的域名服務器)。
- file:后接文件路徑,主要說明一個區的域信息源的路徑。
DNS 服務器配置實例
為了方便讀者對 DNS 服務器配置文件的使用有個詳細的了解,本節將針對一個實際的配置文件例子來進行講解。該配置文件如下所示。我們虛構了一個域 feixiang.com 來舉例說明主服務器的配置,下面是定義 feixiang.com 域的主服務器的 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 域的主服務器。該域的數據是從 named.hosts 文件中加載的。在我們這個例子中,我們將文件名 named.hosts 作為區文件名。第三個 master 語句指向能將 IP 地址 198.25.0.0 映射為主機名的文件。它假定本地服務器是反向域 198.25.in-addr.arpa 的主服務器,該域的數據從文件 named.rev 中加載。
除了定義上述的主文件外,還需要定義如下的區文件(/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
實戰二:安全使用 DNS 服務器的高級技巧
配置輔助域名服務器做到冗余備份
輔助服務器可從主服務器中復制一整套域信息。區文件是從主服務器中復制出來的,并作為本地磁盤文件存儲在輔助服務器中。這種復制稱為“區文件復制”。在輔助域名服務器中有一個所有域信息的完整拷貝,可以有權威地回答對該域的查詢。因此,輔助域名服務器也稱作權威性服務器。配置輔助域名服務器不需要生成本地區文件,因為可以從主服務器中下載該區文件。
輔助服務器的配置與主服務器的配置不同,它使用 slave 語句代替 master 語句。slave 語句指向用作域信息源的遠程服務器,以替代本地磁盤文件。下面的 named.conf 文件可以配置 feixiang.com 域的輔助服務器:
// 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 語句是使這個服務器成為 vbrew.com 的輔助服務器。它告訴 named 從 IP 地址為 25.198.10.3 的服務器中下載 feixiang.com 的信息,并將其數據保存在 /var/named/named.hosts 文件中。如果該文件不存在,named 就創造一個,并從遠程服務器中取得區數據,然后將這些數據寫入新創建的文件中。如果存在該文件,named 就要檢查遠程服務器,以了解該遠程服務器的數據是否不同于該文件中的數據,如果數據有變化,它就下載更新后的數據,用新數據覆蓋該文件的內容;如果數據沒有變化,named 就加載磁盤文件的內容,不必做麻煩的區轉移工作。將一個數據庫拷貝到本地磁盤文件中,就不必每次引導主機時都要轉移區文件;只有當數據修改時,才進行這種區文件的轉移工作。該配置文件中的下一行表示該本地服務器也是反向域 198.25.in-addr.arpa 的一個輔助服務器,而且該域的數據也從 25.198.10.3 中下載。該反向域的數據存儲在 named.rev 中。
配置高速緩存服務器提高 DNS 服務器性能
高速緩存服務器可運行域名服務器軟件,但是沒有域名數據庫軟件。它從某個遠程服務器取得每次域名服務器查詢的結果,一旦取得一個,就將它放在高速緩存中,以后查詢相同的信息時就用它予以回答。高速緩存服務器不是權威性服務器,因為它提供的所有信息都是間接信息。對于高速緩存服務器只需要配置一個高速緩存文件,但最常見的配置還包括一個回送文件,這或許是最常見的域名服務器配置。
配置高速緩存域名服務器是很簡單的。必須有 named.conf 和 named.ca 文件,通常也要用到 named.local 文件。下面是用于高速緩存服務器的 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 去維持一個域名服務器響應的高速緩存,并利用 named.ca 文件的內容去初始化該高速緩存。該高速緩存初始化文件的名字可以是任何名字,但一般使用 /var/named/named.ca。并不是在該文件中使用一個 hint 語句就能使它成為高速緩存配置,幾乎每一種服務器的配置都要用到 cache 語句,而是因為沒有 master 和 slave 語句才使它成為一個高速緩存配置。
但是,在我們這個例子中卻有一個 master 語句。事實上,幾乎在每一個高速緩存的配置文件中都有這一個語句,它將本地服務器定義為它自己的回送域的主服務器,并假定該域的信息存儲在 named.local 文件中。這個回送域是一個 in-addr.arpa 域(in-addr.arpa 域用于指定逆向解析,或 IP 地址到 DNS 名字解析),它將地址 127.0.0.1 映射為名字 localhost。轉換自己的回送地址對于大多數人都是有意義的,因為大多數的 named.conf 文件都包含這一項。
在大多數高速緩存服務器的配置文件中,這種 directory、master 和 hint 語句是唯一使用的語句,但也可以增加其他的語句,forwarders 和 slave 等語句都可以使用。
配置 DNS 負載均衡防止服務器宕機
DNS 負載均衡技術是在 DNS 服務器中為同一個主機名配置多個 IP 地址,在應答 DNS 查詢時,DNS 服務器對每個查詢將以 DNS 文件中主機記錄的 IP 地址按順序返回不同的解析結果,將客戶端的訪問引導到不同的機器上去,使得不同的客戶端訪問不同的服務器,從而達到負載均衡的目的。
現假設有三臺服務器來應對 www.feixiang.com 的請求。在采用 Linux 系統上實現起來比較簡單,只需在該域區文件的數據記錄中添加類似下面的資源記錄即可:
web_server1INA210.113.1.1 web_server2INA210.113.1.2 web_server3INA210.113.1.3 wwwINCNAMEweb_server1 wwwINCNAMEweb_server2 wwwINCNAMEweb_server3上述六條資源記錄的具體含義為:在 DNS 服務器中為 www.feixiang.com 設定了三臺服務器響應客戶的訪問請求。這三臺服務器分別為 web_server1、web_server2 和 web_server3,而他們均為 www 服務器的別名。因此,在訪問 www 服務器時,DNS 服務器將依次循環地將訪問請求均衡到三臺服務器中去,以達到負載均衡的目的。
配置智能 DNS 高速解析
隨著原中國的互聯網骨干網被一分為二了,北有聯通、南有電信。從此,細心的網民可以發現,有些經常訪問的網站速度一下子慢了下來,有時候還有訪問不到的情況出現。例如北方地區的網絡用戶訪問中國聯通的服務器會非常快,而訪問中國電信的服務器時,感覺非常慢。這種現象不僅影響了網站的訪問量,更嚴重的是它直接影響了一些經營性網站的經濟效益。據分析,產生這個問題的根本原因是中國電信分家之后,電信與聯通之間的互連存在問題。雖然信息產業部已經在規劃南北互通計劃,但在今后相當長的一段時期內,南北方網互連的問題還會長期存在。
智能 DNS 策略解析很好的解決了上面所述的問題。DNS 策略解析最基本的功能是可以智能的判斷訪問網站的用戶,然后根據不同的訪問者把網站的域名分別解析成不同的 IP 地址。如訪問者是聯通用戶,DNS 策略解析服務器會把網站域名對應的聯通 IP 地址解析給這個訪問者。如果用戶是電信用戶,DNS 策略解析服務器會把網站域名對應的電信 IP 地址解析給這個訪問者。
除此之外,智能 DNS 策略解析還可以實現就近訪問機制。有些用戶在國外和國內都放置了服務器,使用 DNS 策略解析服務可以讓國外的網絡用戶訪問國外的服務器,國內的用戶訪問國內的服務器,從而使國內外的用戶都能迅速的訪問到網站的服務器。另外,智能 DNS 策略解析還可以給網站的多個主機實現負載均衡,這時來自各地的訪問流量會比較平均的分布到服務器的每一個主機上。
下面以一個簡單的例子來說明如何實現智能 DNS 的配置。在配置之前,我們需要使用前面小節介紹的有關知識生成針對電信網(telecom_feixiang.com)和聯通網(cnc_feixiang.com)的區文件:
// 在 named.conf 文件的options { directory "/var/bind"; }; // 后添加如下控制網段: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 配置,讓電信和聯通訪問不同的配置文件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 的查詢方式有兩種,遞歸查詢和迭代查詢。合理配置這兩種查詢方式,能夠在實踐中取得較好的效果。
其中,遞歸查詢是最常見的查詢方式,工作方式是:域名服務器將代替提出請求的客戶機(下級 DNS 服務器)進行域名查詢,若域名服務器不能直接回答,則域名服務器會在域各樹中的各分支的上下進行遞歸查詢,最終將返回查詢結果給客戶機,在域名服務器查詢期間,客戶機將完全處于等待狀態。具體流程示意請見圖 2:
圖 2.DNS 遞歸查詢流程示意
迭代查詢又稱重指引查詢。其工作方式為:當服務器使用迭代查詢時能夠使其他服務器返回一個最佳的查詢點提示或主機地址,若此最佳的查詢點中包含需要查詢的主機地址,則返回主機地址信息,若此時服務器不能夠直接查詢到主機地址,則是按照提示的指引依次查詢,直到服務器給出的提示中包含所需要查詢的主機地址為止,一般的,每次指引都會更靠近根服務器(向上),查尋到根域名服務器后,則會再次根據提示向下查找。具體流程示意如圖 3 所示:
圖 3.DNS 迭代查詢流程示意
綜合上面兩點,我們可以看出來,遞歸查詢就是客戶機會等待最后結果的查詢,而迭代查詢是客戶機等到的不一定是最終的結果,而可能是一個查詢提示。因而存在如下兩個問題:
因此,有很多流量很大的 DNS 服務器是禁止客戶機使用遞歸查詢,用這種方式來減輕服務器的流量。
使用 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-20090128 #./configure(3)使用 make 命令進行安裝
#make安裝成功后,可以查看通過相應的網絡接口來監控 DNS 網絡流量,如下所示:
#./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:記錄發送 DNS 查詢的客戶端 IP 地址列表
- D:記錄 DNS 查詢的目的服務器的 IP 地址表
- T:記錄查詢詳細類型
- 1:記錄查詢的頂級域名
- 2:記錄查詢的二級域名
- Ctr+R:重新紀錄
- Ctr+X:退出
更詳細信息可以使用 dnstop –help 命令進行查看。
使用 DNSSEC 技術保護 DNS 安全
DNSSEC 主要依靠公鑰技術對于包含在 DNS 中的信息創建密碼簽名。密碼簽名通過計算出一個密碼 hash 數來提供 DNS 中數據的完整性,并將該 hash 數封裝進行保護。私/公鑰對中的私鑰用來封裝 hash 數,然后可以用公鑰把 hash 數譯出來。如果這個譯出的 hash 值匹配接收者剛剛計算出來的 hash 樹,那么表明數據是完整的。不管譯出來的 hash 數和計算出來的 hash 數是否匹配,對于密碼簽名這種認證方式都是絕對正確的,因為公鑰僅僅用于解密合法的 hash 數,所以只有擁有私鑰的擁有者可以加密這些信息。
DNSSEC 的功能主要有三個方面:
- 為 DNS 數據提供來源驗證,即保證數據來自正確的名稱服務器。
- 為數據提供完整性驗證,即保證數據在傳輸的過程中沒有任何的更改。
- 否定存在驗證,即對否定應答報文提供驗證信息,確認授權名稱服務器上不存在所查詢的資源記錄。DNSSEC 為了實現簽名和簽名的驗證功能,引入了四個新的資源記錄類型:
- DNSKEY:用于存儲驗證 DNS 數據的公鑰;
- RRSIG:用于存儲 DNS 資源記錄的簽名信息;
- NSEC:存儲和對應的所有者相鄰的下一個資源記錄,主要用于否定存在驗證;
- DS(Delegation Signer,授權簽名者):用于 DNSKEY 驗證過程,存儲密鑰標簽,加密算法和對應的 DNSKEY 的摘要信息。
DNSSEC 的工作機制主要體現在 DNS 工作過程中的以下 2 個方面:
(1)DNS 查詢 / 應答:這一步因為使用了未加密和未驗證的 UDP 數據包,存在嚴重的安全漏洞。DNSSEC 在這一步中加入了對數據源的驗證和對數據完整性的校驗。DNSSEC 要對某個域的數據進行驗證,客戶端就必須信任這個域的公鑰。由于 DNS 中沒有第三方的公鑰驗證體系,要建立對公鑰的信任,就必須從一個已經被信任的名稱服務器(如根服務器)開始,由此服務器驗證其子域的公鑰。然后再由這個子域的公鑰驗證其子域的公鑰,一直到所請求的域的公鑰得到驗證,這個過程稱為建立信任鏈。起始受信任的名稱服務器的公鑰就被稱為信任錨點。驗證數據源以后,下一步驗證應答信息本身,它要求應答不僅包括請求的資源記錄,還包括驗證這些資源記錄的所需的信息,即一個資源記錄集的數字簽名,它包含 RRSIG 中。使用信任錨點的 DNS 客戶端就可以通過驗證此數字簽名來檢查應答報文是否真實。為了保證和查詢相應的資源記錄的確不存在,而不是在傳輸過程中被刪除,DNSSEC 生成一個特殊的資源類型記錄(NSEC)來檢測域名是否存在。
(2)DNS 域區傳輸:一個域區中一般有主域名服務器和備份域名服務器,域區傳輸就是域區文件從主域名服務器 copy 到備份域名服務器上的過程。在這個過程中面臨著數據包攔截和更改的危險。DNSSEC 用 TSIG(Transaction Signature,事務簽名)來驗證請求方的真實身份和保證傳輸內容在傳輸過程中被篡改。
因此,DNSSEC 的部署主要有三個步驟:
- 生成公 / 私密鑰對
- 公鑰的發布及私鑰的存儲
- 域區的簽署
DNSSEC 也是一種非常優秀的開源工具,用戶可以到 http://sourceforge.net/projects/dnssec-tools/files/dnssec-tools/1.5/dnssec-tools-1.5.tar.gz/download 網站上進行下載和安裝,目前其最新版本為 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 命令進行安裝
#make下面我們通過一個實際的例子來說明如何為名稱是 feixiang.com 的域建立 DNSSEC 配置。使用 DNSSEC 保護 DNS 的步驟如下所示:
(1)為 feixiang.com 域建立一對密鑰。在 /var/named 目錄下,使用如下命令:
#/usr/sbin/dnssec-keygen -a DSA -b 768 -n ZONE feixiang.com這個命令產生一對長度 768 位 DSA 算法的私有密鑰和公共密鑰。
(2)使用如下命令
#/usr/sbin/dnssec-makekeyset -t 1800 -e now+21 Kfeixiang.com.+003+29462建立一個密鑰集合。該命令以 1800 秒的生存時間(time-to-live)建立密鑰集合,有效期限 21 天,并且創建一個文件: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為區帶文件簽名。然后建立一個簽名文件:feixiang.com.signed。
(5)替換配置文件 /etc/named.conf 中 feixiang.com 的區文件部分。如下所示:
zone “feixiang.com” IN { type master; file “feixiang.com.signed”; allow-update { none; }; };
總結
以上是生活随笔為你收集整理的DNS解析与域名服务安全防护策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC6.0中使用Activex控件小结
- 下一篇: 建行提示找不到服务器,中国建设银行E路护