1.DNS是怎麼工做的瀏覽器
首先咱們能夠很簡單的理解DNS協議,它就是一個將域名與ip地址進行雙向轉換的協議,而消息類型只有查詢和迴應2種類型。那客戶端查詢域名,是要請求誰呢?答案是域名服務器,如今域名服務器分爲如下4類,按照層次從上往下:緩存
根域名服務器:最高層次最重要的域名服務器,它知道全部的頂級域名服務器的域名和ip地址,通常請求根域名服務器返回的是要請求的頂級域名服務器的ip地址。咱們經常據說的13個域名服務器指的就是它,但根域名服務器毫不是由僅僅的13臺服務器組成,而是一個域名服務器由多個主機組成,它們有相同的ip。如今基本上普通域名服務器都能就近找到一臺根域名服務器,當本地域名服務器請求根域名服務器時,路由器就能找到離這個本地域名服務器最近的一個根域名服務器。安全
頂級域名服務器:它負責該頂級域名中全部註冊的二級域名。好比.com頂級域名服務器裏就存放了全部xxx.com域名和ip地址映射表。服務器
權限域名服務器:這類服務器負責某一特定域名的域名解析,不少公司都有權限域名服務。好比騰訊有它的權限域名服務器,裏面存儲了騰訊域名和ip地址的映射關係。同時權限域名服務器也充當了本地域名服務器的角色,你能夠將你的域名註冊到騰訊的域名服務器中。網絡
本地域名服務器:這臺服務器的ip地址就是咱們電腦裏配置的dns,本地域名服務器通常離用戶是比較近的,當本地主機沒法解析域名就會給本地域名服務器發送請求。tcp
如今知道請求的是域名服務器了,也知道了一共有哪幾類域名服務器,接下來我畫了張圖來描述整個dns請求的流程,整個過程採用迭代查詢。注意權限域名服務器通常是不會採用遞歸查詢的,它會直接返回ip地址讓請求着再去訪問這個ip。大數據
2.DNS數據格式網站
dns固定首部爲12字節,以下圖所示。當請求本地域名服務器若是它已經緩存了這個域名所對應的ip地址,那麼這個答案將會被標記爲非權威的,只有權限域名服務器返回的數據包纔會將這個包標記爲權威的,這對應着固定首部中的權威答案數據。後2張表格是dns首部中的標誌位數據和rCode的數據。隨着dns的發展標誌中的16位功能已經有點不夠用了,所以如今有不少dns服務器運行EDNS(擴展DNS),原來回應數據若是超過512字節將會被丟棄進而能夠轉爲tcp鏈接,EDNS則能夠支持超過512字節的大數據包迴應。加密
QR 1位 | 查詢時這位爲0,迴應則爲1 |
Opcode 4位 | 定義查詢或迴應的類型,值爲0表示是一個標準的查詢/迴應 |
AA 1位 | 在迴應數據包中使用,值爲1表示迴應是一個權威迴應。 |
TC 1位 | 當迴應大於512字節時此標誌位置1,最終數據長度會被刪減爲512字節,此時客戶端可採用tcp來詢問 |
RD 1位 | 客戶端使用遞歸時此位會置1 |
RA 1位 | 只在迴應數據包中設置,當爲1時表示可採用遞歸回應 |
保留位 3位 | 全都設置爲0 |
rCode 4位 | 僅在迴應消息中有用,表示返回類型 |
rCode | 錯誤類型 |
0 | 沒有錯誤 |
1 | 格式錯誤 |
2 | 名稱服務器錯誤 |
3 | 域參照錯誤 |
4 | 不支持的查詢類型 |
5 | 不容許的動做 |
3.DNS的安全隱患spa
目前對於DNS的安全隱患主要分爲2類,一類是攻擊真實的域名服務器讓服務器掉線,好比利用服務器軟件漏洞,曾經還發生過對根域名服務器的成功攻擊。另外一類是抓住dns協議的漏洞來進行攻擊。dns協議很簡單,就一個請求和回覆,在這個過程當中會對服務器返回結果的ip地址和首部中16位標識進行驗證,若是ok那dns客戶端老是相信服務器返回的結果是正確的。正是這個地方攻擊者能夠作手腳,好比DNS緩衝區中毒攻擊,它須要攻擊者可以看到dns服務器的查詢數據包,有了查詢數據攻擊者才能僞造迴應信息給dns服務器。它的原理是攻擊者替換dns服務器中的多行數據從而致使客戶端收到錯誤的ip地址,而後去訪問攻擊者想要客戶端訪問的網站。如今關鍵是攻擊者如何才能將惡意數據放入dns服務器中呢?能夠想象攻擊者要麼得到對服務器的訪問,要麼向發送請求的dns服務器迴應錯誤的信息,以達到僞造的目的。對於這種攻擊能夠採用dns數據加密的方式。還有一種攻擊相似於syn flood,假設攻擊者給不少服務器發送大量請求報文,這可能形成網絡的流量猛增而癱瘓。不過dns是採用無鏈接的udp,當udp緩衝區被塞滿時將會丟棄多餘的數據包,而dns客戶端請求不到ip地址將會重試幾回請求或者用戶從新在瀏覽器點擊連接。所以這種攻擊只要採用防火牆進行過濾網絡就會快速恢復。
聲明:本文原創發表於博客園,做者爲方小白,若有錯誤歡迎指出 。本文未經做者許可不準轉載,不然視爲侵權。