DNS(Domain Name System,域名系統),網際網路上作為域名和IP位址互相映射的一個分布式資料庫,能夠使使用者更友善的通路網際網路,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP位址的過程叫做域名解析(或主機名解析)。DNS協定運作在UDP協定之上,使用端口号53。
主機名到IP位址的映射有兩種方式:
1)靜态映射,每台裝置上都配置主機到IP位址的映射,各裝置獨立維護自己的映射表,而且隻供本裝置使用;
2)動态映射,建立一套域名解析系統(DNS),隻在專門的DNS伺服器上配置主機到IP位址的映射,網絡上需要使用主機名通信的裝置,首先需要到DNS伺服器查詢主機所對應的IP位址。
域名結構
通常 Internet 主機域名的一般結構為:主機名.三級域名.二級域名.頂級域名。 Internet 的頂級域名由 Internet網絡協會域名注冊查詢負責網絡位址配置設定的委員會進行登記和管理,它還為 Internet的每一台主機配置設定唯一的 IP 位址。全世界現有三個大的網絡資訊中心: 位于美國的 Inter-NIC,負責美國及其他地區; 位于荷蘭的RIPE-NIC,負責歐洲地區;位于日本的APNIC ,負責亞太地區
<a href="http://s1.51cto.com/wyfs02/M02/87/41/wKioL1fZDBSS8su8AAEvKjJKipw092.png" target="_blank"></a>
根域:DNS域名中使用時,規定由尾部句點(.)來指定名稱位于根或者更進階别的域層次結構
頂級域:用來訓示某個國家/地區或組織使用的名稱的類型名稱,如.com
二級域名:個人或組織在Internet上使用的注冊名稱,如qq.com
子域:已注冊的二級域名派生的域名,通俗的講就是網站名,如www.qq.com
主機名:通常情況下,DNS域名的最左側的辨別網絡上的特定計算機,如h1.www.qq.com
常見的頂級域伺服器
com
商業組織
edu
教育機構
Gov
政論組織
Mil
軍事部門
net
網絡機構
org
非盈利性組織
int
國際組織
Uk
美國
Fr
法國
au
澳洲
ca
加拿大
cn
中國
jp
日本
我國的頂級域名也隻有cn
DNS的解析過程
第一步,查詢本地host檔案和緩存有沒有這個記錄,有就直接解析,沒有就通路DNS伺服器,如果DNS伺服器上沒這個域名或者域名不在你通路的DNS伺服器管理區域内,那麼DNS伺服器就會向dot根域名伺服器發遞歸查詢,如果找到了記錄了,DNS就會傳回給client,并且把記錄儲存在自己緩存裡,下次有client請求,他就會調用自己的緩存,直到這條記錄的生存期結束,就會丢棄這條記錄。
根域名伺服器就13台域名伺服器,他負責管理頂級域。頂級域負責管理二級域,我們現在申請的一般是2級域名-3級域名。
用 nslookup 這個工具詳細來說一下解析步驟:
<a href="http://s4.51cto.com/wyfs02/M00/87/44/wKiom1fZDDLSjMNcAAAuHMoWFwU521.png" target="_blank"></a>
從上圖我們可以看到:
第一行Server是:DNS伺服器的主機名--114.114.114.114
第二行Address是: 它的IP位址--114.114.114.114#53
會發現百度有一個cname=www.ashifen.com的别名
用dig工具來跟蹤一下(linux系統自帶有)
Dig工具會在本地計算機做疊代,然後記錄查詢的過程。
<a href="http://s5.51cto.com/wyfs02/M00/87/41/wKioL1fZDFGysfGmAAAhHR2ll4o229.png" target="_blank"></a>
第一步是向我這台機器的ISPDNS擷取到根域服務區的13個IP和主機名
<a href="http://s1.51cto.com/wyfs02/M02/87/41/wKioL1fZDHySrH77AABrQJOtYtk761.png" target="_blank"></a>
第二步是向其中的一台根域伺服器(Servername就是末行小括号裡面的)發送www.baidu.com的查詢請求,他傳回了com.頂級域的伺服器IP(未顯示)和名稱
<a href="http://s4.51cto.com/wyfs02/M01/87/44/wKiom1fZDJehooUEAACG1NhAKkY899.png" target="_blank"></a>
第三步,便向com.域的一台伺服器192..5.5.241請求,www.baidu.com,他傳回了baidu.com域的伺服器IP(未顯示)和名稱,百度有四台頂級域的伺服器
<a href="http://s1.51cto.com/wyfs02/M01/87/41/wKioL1fZDLDT-XBAAAA3tFMdPfU856.png" target="_blank"></a>
第四步呢,向百度的頂級域伺服器(202.108.22.220)請求www.baidu.com,他發現這個www有個别名,而不是一台主機,别名是www.a.shifen.com。
<a href="http://s2.51cto.com/wyfs02/M00/87/41/wKioL1fZDMzBxyRsAAA_2uZNL0w217.png" target="_blank"></a>
使用dig +trace shifen.com,發現第三步時shifen.com這個頂級域的域名伺服器和baidu.com這個域的域名伺服器是同一台主機
<a href="http://s4.51cto.com/wyfs02/M02/87/44/wKiom1fZDPXjMLSSAAB76MLZH1o918.png" target="_blank"></a>
當拿到www.baidu.com的别名www.a.shifen.com的時候,我本來需要重新到com域查找shifen.com域的NS,但是因為這兩個域在同一台NS上,是以直接向本機發起了。
Linux DNS服務介紹
背景程序:named
腳本:/etc/rc.d/init.d/named
使用端口:53(tcp,udp)
配置檔案:/var/named/chroot/etc/named.conf
相關路徑:/var/named/
安裝bind伺服器
yum install bind* (先配置yum源,yum源之前的實驗已經配置完成了)
<code>vim /etc/yum</code><code>.</code><code>repos</code><code>.</code><code>d/base</code><code>.</code><code>repo </code>
<code>[RHEL6] </code>
<code>name= base</code>
<code>baseurl=</code><code>file</code><code>:</code><code>///mnt/cdrom </code>
<code>enabled=</code><code>1</code>
<code>gpgcheck=</code><code>0</code>
<code>保持退出</code>
<a href="http://s4.51cto.com/wyfs02/M01/87/41/wKioL1fZDSPBTGJwAADCmnGVdHo310.png" target="_blank"></a>
BIND是一種開源的DNS(Domain Name System)協定的實作,包含對域名的查詢和響應所需的所有軟體。它是網際網路上最廣泛使用的一種DNS伺服器,BIND這個縮寫來自于使用的第一個域,Berkeley Internet Name Domain
BIND軟體包包括三個部分:
DNS伺服器。這是一個叫做named的程式,代表name daemon的簡寫。它根據DNS協定标準的規定,響應收到的查詢。
DNS解析庫(resolver library)。一個解析器是一個程式,通過發送請求到合适的伺服器并且對伺服器的響應做出合适的回應,來解析對一個域名的查詢。一個解析庫是程式元件的集合,可以在開發其它程式時使用,為這些程式提供域名解析的功能。
/etc/named.conf
named.conf是BIND使用的預設配置檔案
在每一次named啟動與挂起時都會被讀取
一個簡單的文本檔案,其中記錄的可以包括options(全局參數)、zone(區域定義)、access control lists(通路控制清單)等
<a href="http://s3.51cto.com/wyfs02/M00/87/44/wKiom1fZDUWgU_vVAACUGnODSvE123.png" target="_blank"></a>
<code>常用的參數包括</code>
<code>directory:指定zone </code><code>file</code><code>的存放位置</code>
<code>forwarders:指定其上級域名伺服器</code>
<code>allow-query:指定允許向其送出請求的客戶</code>
<code>allow-transfer:指定允許複制zone資料的主機</code>
根域
<a href="http://s5.51cto.com/wyfs02/M02/87/41/wKioL1fZDWrRhkfmAAAPYxKDOcE686.png" target="_blank"></a>
<code>修改主配置檔案/etc/named</code><code>.</code><code>conf</code>
<code>listen-</code><code>on</code> <code>port </code><code>53</code> <code>{ 127.0.0.1; }</code><code>;</code>
<code>監聽端口,修改成自己的IP位址,如果有多個IP,就寫多個,也可以寫any,每行要以;結束。</code>
<code>directory "/</code><code>var</code><code>/named";</code>
<code>zone檔案的存放目錄,這裡的/</code><code>var</code><code>/named 是相對目錄,在chroot環境下/</code><code>var</code><code>/named目錄下。</code>
<code>allow-query </code><code>{ localhost; }</code><code>;</code>
<code>允許查詢的client,我們修改成any</code>
<a href="http://s3.51cto.com/wyfs02/M01/87/44/wKiom1fZDYqSVRnvAACCeHEDFYA342.png" target="_blank"></a>
區域配置(zone )
zone 語句作用是定義DNS 區域,在此語句中可定義DNS 區域選項
zone區域設定,第一步,設定根區域
當DNS伺服器處理遞歸查詢時,如果本地區域檔案不能進行查詢的解析,就會轉到根DNS伺服器查詢,是以在主配置檔案named.conf檔案中還要定義根區域。 (預設即可)
<a href="http://s2.51cto.com/wyfs02/M01/87/44/wKiom1fZDbzSbujWAAAPGZuEWK8635.png" target="_blank"></a>
<code>“.” 意思的根區域</code>
<code>IN</code> <code>是internet記錄</code>
<code>type</code><code>是類型 根的類型是hint</code>
<code>file</code><code>是根區域檔案</code>
指定正向解析的配置檔案
修改DNS伺服器的輔助區域配置檔案/etc/named.rfc1912.zones
用//登出掉系統預設配置的zone資訊所有行或者删除
在檔案的尾部增加以下内容
<a href="http://s2.51cto.com/wyfs02/M02/87/44/wKiom1fZDdry9-m8AAAbASO4tqM273.png" target="_blank"></a>
配置正向解析zone檔案
<a href="http://s2.51cto.com/wyfs02/M02/87/41/wKioL1fZDgGhlvSIAAAR5WSqPNI209.png" target="_blank"></a>
将範例複制到正向解析檔案,-p可以将源檔案的屬性一起複制
<a href="http://s3.51cto.com/wyfs02/M00/87/44/wKiom1fZDgKDzIrNAAA64ZS1kds883.png" target="_blank"></a>
<code>TTL是生存期,機關是秒 </code>
<code>$TTL</code><code>是全局定義的 </code>
<code>第二行 SOA記錄,@取代在/etc/named</code><code>.</code><code>conf中指定的域名。 </code>
<code>SOA段中的數字,分别為:序列号、重新整理、重試、過期、生存期</code>
<code>序列号:序列号用于DNS資料庫檔案的版本控制。每當資料被改變,這個序列号就應該被增加。 </code>
<code>重新整理:從伺服器向主伺服器查詢最新資料的間隔周期。每一次檢查時從伺服器的資料是否需要更改,則根據序列号來判别。 </code>
<code>重試:一旦從伺服器嘗試連接配接主伺服器失敗,下一次查詢主伺服器的延遲時間。 </code>
<code>過期:如果從伺服器無法連通主伺服器,則在經過此時間後,宣告其資料過期。 </code>
<code>生存期:伺服器回答 ‘無此域名’ 的間隔時間。</code>
<code>數字的預設機關為秒。否則:W= 周、D= 日、H= 小時、M= 分鐘。</code>
<code>NS(name server):設定域名伺服器的域名</code>
service named restart 重新啟動DNS服務
service iptables stop 關閉防火牆
測試DNS解析
使用nslookup測試下。
<a href="http://s5.51cto.com/wyfs02/M00/87/44/wKiom1fZDiXStpuoAAAeCsiZ_Ps380.png" target="_blank"></a>
經過簡單的了解和配置DNS服務,應該知道DNS的工作原理了。
DNS分為Client和Server,Client扮演發問的角色,也就是問Server一個Domain Name,而Server必須要回答此Domain Name的真正IP位址。而當地的DNS先會查自己的資料庫。如果自己的資料庫沒有,則會往該DNS上所設的的DNS詢問,依此得到答案之後,将收到的答案存起來,并回答客戶。
DNS伺服器會根據不同的授權區(Zone),記錄所屬該網域下的各名稱資料,這個資料包括網域下的次網域名稱及主機名稱。
在每一個名稱伺服器中都有一個快取緩存區(Cache),這個快取緩存區的主要目的是将該名稱伺服器所查詢出來的名稱及相對的IP位址記錄在快取緩存區中,這樣當下一次還有另外一個用戶端到次伺服器上去查詢相同的名稱 時,伺服器就不用在到别台主機上去尋找,而直接可以從緩存區中找到該筆名稱記錄資料,傳回給用戶端,加速用戶端對名稱查詢的速度。
常見的DNS攻擊包括:
1) 域名劫持
通過采用黑客手段控制了域名管理密碼和域名管理郵箱,然後将該域名的NS紀錄指向到黑客可以控制的DNS伺服器,然後通過在該DNS伺服器上添加相應域名紀錄,進而使網民通路該域名時,進入了黑客所指向的内容。
這顯然是DNS服務提供商的責任,使用者束手無策。遇到dns被劫持,讓dns服務提供者解決這個問題,是比較沖突的;因為,劫持者,最有可能的就是他們;另外一種最直接的解決辦法就是換用其他dns。更換dns伺服器的方法非常簡單,打開網絡連接配接屬性,選擇Interner 協定(TCP/IP)的屬性頁裡,不要選擇自動擷取DNS,而要選擇“使用下面的DNS伺服器位址”,推薦大家使用OpenDNS提供的DNS伺服器,OpenDNS是一個提供免費DNS服務的網站,口号是更安全、更快速、更智能。
2) 緩存投毒
DNS緩存投毒攻擊是指攻擊者欺騙DNS伺服器相信僞造的DNS響應的真實性。這種類型攻擊的目的是将依賴于此DNS伺服器的受害者重定向到其他的位址。随着惡意軟體傳播的增多,緩存投毒的方法也層出不窮。典型的一種是發送标題吸引人的垃圾郵件并誘導你去打開。點選郵件中的圖檔和廣告條幅也會将使用者指向被投毒的網站。一旦使用者的電腦被惡意代碼感染,他今後所有的URL請求都将被自動指向惡意IP位址-哪怕被指向的“受害”伺服器已經在其網頁上清除了惡意代碼。
防止投毒
目前還沒有更好辦法阻止黑客的這種行為,隻有使DNS緩存伺服器發出的查詢請求使用動态的UDP端口,UDP的端口号也是16位2進制,這樣,與DNS的ID号相結合,号碼的命中率就是1/4294967296(2的32次方)。
3)DDOS攻擊
一種攻擊針對DNS伺服器軟體本身,通常利用BIND軟體程式中的漏洞,導緻DNS伺服器崩潰或拒絕服務;另一種攻擊的目标不是DNS伺服器,而是利用DNS伺服器作為中間的“攻擊放大器”,去攻擊其它網際網路上的主機,導緻被攻擊主機拒絕服務。
為了讓DNS拒絕服務,惡意攻擊者向允許遞歸的開放DNS解析器發送大量僞造的查詢請求。目前網際網路中存在着上百萬開放的DNS解析器,包括很多的家庭網關。開放的DNS解析器會認為這些僞造的查詢請求是真實有效的,并且會對這些請求進行處理,在處理完成之後,便會向僞造的請求者(即,受害人)傳回DNS響應資訊。如果查詢請求的數量巨大,DNS伺服器很有可能會發送大量的DNS響應資訊。這也就是我們常說的放大攻擊,這種方法利用的是DNS解析器中的錯誤配置。由于DNS伺服器配置錯誤,那麼DNS解析器很可能會在接收到一個非常小的DNS查詢請求之後,向目标主機傳回大量的攻擊流量。在另一種類型的攻擊中,是向DNS伺服器發送未經許可或不符合規則的查詢請求來進行攻擊。
防禦DDOS攻擊
不允許未經過請求的DNS響應
丢棄快速重傳資料包
丢棄異常來源的DNS請求和響應
建立白名單,添加允許伺服器處理的合法請求資訊
啟動DNS用戶端驗證
使用ACL的權限
上面所說的攻擊,其實并不在我們的可控範圍之内,内網的入侵,大家首先都會想到中間人攻擊,中間人攻擊,也就會想到DNS欺騙和ARP欺騙了。
4) DNS欺騙
DNS欺騙就是攻擊者冒充域名伺服器的一種欺騙行為。
原理:如果可以冒充域名伺服器,然後把查詢的IP位址設為攻擊者的IP位址,這樣的話,使用者上網就隻能看到攻擊者的首頁,而不是使用者想要取得的網站的首頁了,這就是DNS欺騙的基本原理。DNS欺騙其實并不是真的“黑掉”了對方的網站,而是冒名頂替、招搖撞騙罷了。
現在的Internet上存在的DNS伺服器有絕大多數都是用bind來架設的,使用的bind版本主要為bind 4.9.5+P1以前版本和bind 8.2.2-P5以前版本.這些bind有個共同的特點,就是BIND會緩存(Cache)所有已經查詢過的結果,這個問題就引起了下面的幾個問題的存在.
DNS欺騙就是攻擊者冒充域名伺服器的一種欺騙行為。 原理:如果可以冒充域名伺服器,然後把查詢的IP位址設為攻擊者的IP位址,這樣的話,使用者上網就隻能看到攻擊者的首頁,而不是使用者想要取得的網站的首頁了,這就是DNS欺騙的基本原理。DNS欺騙其實并不是真的“黑掉”了對方的網站,而是冒名頂替、招搖撞騙罷了。
DNS欺騙的防範
DNS欺騙是很難進行有效防禦的,因為大多情況下都是被攻擊之後才會發現,對于避免DNS欺騙所造成危害,本菜鳥提出以下建議
1.因為DNS欺騙前提也需要ARP欺騙成功。是以首先做好對ARP欺騙攻擊的防範。
2.不要依賴于DNS,盡管這樣會很不友善,可以使用hosts檔案來實作相同的功能(但首先確定host檔案沒有被修改)
3.使用安全檢測軟體定期檢查系統是否遭受攻擊
4.使用DNSSEC。DNSSEC是替代DNS的更好選擇,它使用的是數字前面DNS記錄來確定查詢響應的有效性,DNSSEC還沒有廣泛運用,但是已被公認為是DNS的未來方向,也正是如此,美國國防部已經要求所有MIL和GOV域名都必須開始使用DNSSEC。
本文轉自 wt7315 51CTO部落格,原文連結:http://blog.51cto.com/wt7315/1852795