相關學習資料
http://baike.baidu.com/link?url=77B3BYIuVsB3MpK1nOQXI-JbS-AP5MvREzSnnedU7F9_G8l_Kvbkt_O2gKqFw7vm http://www.rfc-editor.org/rfc/rfc1035.txt http://www.rfc-editor.org/rfc/rfc3596.txt http://www.rfc-editor.org/rfc/rfc2782.txt http://www.rfc-editor.org/rfc/rfc3403.txt http://zhumeng8337797.blog.163.com/blog/static/10076891420110694312990/ tcp-ip詳解卷1:協議.pdf http://wenku.baidu.com/link?url=gIwRwFkKbwB-x45_xVShR10VII_r3nchf0wYTPwelAu5CrS7T5N3zxoBtImYD8i3-mwJhgi5ix-XWMcXkI0uNg6gJCgCihZkRwVydqyFWF3 ftp://ftp.rs.internic.net/domain/ http://www.laojia1987.cn/show.asp?id=756 http://technet.microsoft.com/zh-cn/cc779148(WS.10).aspx http://blog.csdn.net/lastsweetop/article/details/5692312 http://blog.sina.com.cn/s/blog_6441e0640100scj2.html http://zhumeng8337797.blog.163.com/blog/static/100768914201082910759244/
?
目錄
1. DNS簡介 2. DNS查詢方式 3. 和DNS有關的安全風險 4. DNS記錄類型
?
1. DNS簡介?
DNS是指:域名系統(Domain Name System)。在Internet上域名與IP地址之間是一一對應的,域名雖然便于人們記憶,但機器之間只能互相認識IP地址,它們之間的轉換工作稱為域名解析,域名解析需要由專門的域名解析系統來完成,DNS就是進行域名解析的系統。
DNS協議運行在UDP協議之上,使用端口號53。在傳輸層TCP提供端到端可靠的服務,在UDP端提供盡力交付的服務。其控制端口作用于UDP端口53。
0x1: DNS記錄類型
DNS系統中,常見的資源記錄類型有:
1. 主機記錄(A記錄) RFC 1035定義,A記錄是用于名稱解析的重要記錄,它將特定的主機名映射到對應主機的IP地址上。過A記錄,大家可以設置自己的不同域名轉到不同的IP上去,如:1) www.dns.la 轉到IP 116.255.202.12) web.dns.la 轉到IP 116.255.202.113) mail.dns.la 轉到IP 116.255.202.1112. 別名記錄(CNAME記錄) RFC 1035定義,CNAME記錄用于將某個別名指向到某個A記錄上,這樣就不需要再為某個新名字另外創建一條新的A記錄。對于CNAME的原理要注意和URL轉發進行區分:1) url轉發可以轉發到某一個目錄下,甚至某一個文件上2) 而cname是不可以,這就是url轉發和cname的主要區別所在3. MX記錄(Mail Exchange) 郵件交換記錄,用戶可以將該域名下的郵件服務器指向到自己的mail server上,然后即可自行操作控制所有的郵箱設置。要注意的是郵箱DNS解析和HTTP DNS解析是獨立的,如果你設置A記錄
是指向123.12.123.123,而MX記錄你設置是指向222.22.222.222,那么你的DNS服務器接收到別人的郵件路 由請求時就將會將它的請求解釋到222.22.222.222上去!而別人訪問你的網頁
的時候仍然是訪問123.12.123.123。4. NS(Name Server) 域名服務器記錄,用來指定該域名由哪個DNS服務器來進行解析,可以把一個域名的不同二級域名分別指向到不同的DNS系統來解析5. IPv6主機語錄(AAAA記錄) RFC 3596定義,與A記錄對應,用于將特定的主機名映射到一個主機的IPv6地址。6. 服務位置記錄(SRV記錄) RFC 2782定義,用于定義提供特定服務的服務器的位置,如主機(hostname),端口(port number)等。7. NAPTR記錄 RFC 3403定義,它提供了正則表達式方式去映射一個域名。NAPTR記錄非常著名的一個應用是用于ENUM查詢。
0x2: 域名系統分類
DNS的名字空間和Unix的文件系統相似,也具有層次結構。每個結點有 一個至多63個字符長的標識。這顆樹的樹根是沒有任何標識的特殊結點(即全球根DNS)。命名標識中一律不區分大寫和小寫。命名樹上任何一個結點的域名就 是將從該結點到最高層的域名串連起來,中間使用一個點"."分隔這些域名,域名樹中的每個結點必須有一個唯一的域名,但域名樹中的不同結點可使用相同的標 識。
以點"."結尾的域名稱為絕對域名或完全合格的域名FQDN(Full Qualified Domain Name),例如sun.tuc.noao.edu. ?
如果一個域名不以點結尾,則認為該域名是不完全的。
DNS根域名服務器 全球共有13臺根"邏輯域名服務器"。這13臺邏輯根域名服務器中名字分別為"A"至"M",真實的根服務器在2014年1月25日的數據為386臺,分布于全球各大洲。 之所以是13臺,這要從DNS協議(域名解析協議)說起。DNS協議使用了端口上的UDP和TCP協議,UDP通常用于查詢和響應,TCP用于主服務器和從服務器之間的傳送。由于在所有UDP查詢和響應中
能保證正常工作的最大長度是512字節,512字節限制了根服務器的數量和名字。要讓所有的根服務器數據能包含在一個512字節的UDP包中,根服務器只能限制在13個,而且每個服務器要使用字
母表中的單個字母命名,這也是根服務器是從A~M命名的原因。 在根域名服務器中雖然沒有每個域名的具體信息,但儲存了負責每個域(如COM、NET、ORG等)的解析的域名服務器的地址信息,如同通過北京電信你問不到廣州市某單位的電話號碼,但是北京電
信可以告訴你去查020114。世界上所有互聯網訪問者的瀏覽器的將域名轉化為IP地址的請求(瀏覽器必須知道數字化的IP地址才能訪問網站)理論上都要經過根服務器的指引后去該域名的權威域
名服務器(authoritative name server),當然現實中提供接入服務的ISP的"緩存域名服務器"上可能已經有了這個對應關系(域名到IP地址)的緩存。 1. 頂級域名 頂級域名被分為三個部分1) arpa是一個用作地址到名字轉換的特殊域(即反過來用IP來解析域名)2) 7個3字符長的普通域。有些書也將這些域稱為組織域2.1) com: 商業組織2.2) edu: 教育機構2.3) gov: 政府部門2.4) int: 國際組織2.5) mil: 軍事網點2.6) net: 網絡2.7) org: 其他組織3) 所有2字符長的域均是基于ISO3166中定義的國家代碼,這些域被稱為國家域,或地理域。,例如3.1) hk3.2) us 2. 二級域名 一個獨立管理的DNS子樹稱為一個區域(zone)。一個常見的區域是一個二級域,如noao.edu。許多二級域將它們的區域劃分成更小的區域。例如,大學可能根據不同的系來劃分區域,公司可能
根據不同的部門來劃分區域。
0x3: DNS協議格式
1. 標識 一個4字節16bit的字段,Transaction ID,表明當前DNS請求的序號 2. 標志 16bit的標志字段1) QR1bit字段1.1) 0表示查詢報文1.2) 1表示響應報文。2) opcode4bit字段2.1) 通常值為0(標準查詢)2.2) 其他值為1(反向查詢)2.3) 2(服務器狀態請求)3) A 1bit標志,表示"授權回答(authoritative answer)"。該名字服務器是授權于該域的。4) TC1bit字段,表示"可截斷的(truncated)"。使用UDP時,它表示當應答的總長度超過512字節時,只返回前512個字節5) RD1bit字段,表示"期望遞歸(recursion desired)"。該比特能在一個查詢中設置,并在響應中返回。這個標志告訴名字服務器必須處理這個查詢,也稱為一個遞歸查詢。如果該位為0,且
被請求的名字服務器沒有一個授權回答,它就返回一個能解答該查詢的其他名字服務器列表,這稱為迭代查詢。 6) RA1bit字段,表示"可用遞歸"。如果名字服務器支持遞歸查詢,則在響應中將該比特設置為1。大多數名字服務器都提供遞歸查詢,除了某些根服務器7) 隨后3bit必須為08) rcode4bit的返回碼字段。通常的值為:8.1) 0(沒有差錯)8.2) 3(名字差錯)名字差錯只有從一個授權名字服務器上返回,它表示在查詢中制定的域名不存在。 3. 問題數 查詢問題的數量,對于請求報文,通常為1 4. 資源記錄數 返回的資源記錄數 5. 授權資源記錄數 返回的授權資源記錄數 6. 額外資源記錄數 返回的額外資源記錄數 7. 查詢問題 注意,一個DNS數據報中可能會有多個查詢問題,這也是為什么在之前的"問題數"等字段會有大于1數字的原因。每個"查詢問題格式"都相同,如下:1) 查詢名查詢名是要查找的名字,它是一個或多個字符串的序列。每個字符串以首字節的計數值來說明隨后標識符的字節長度,每個名字以最后字節為0結束,字符串之間以"."分隔,例如
www.baidu.com中www、baidu、com都是字符串,長度為0的字符串是根標識符。計數字節的值必須是0~63的數,因為單個字符串的最大長度僅為63 2) 查詢類型2.1) A: IP地址2.2) NS: 名字服務器2.3) CNAME: 規范名稱2.4) PTR: 指針記錄,即IP到域名的反向查詢2.5) HINFO: 主機信息2.6) MX: 郵件交換記錄2.7) AXFR: 區域傳送請求 2.8) */ANY: 對所有記錄的請求 最常用的查詢類型是A類型,表示期望獲得查詢名的IP地址。一個PTR查詢則請求獲得一個IP地址對應的域名。這是一個指針查詢3) 查詢類查詢類通常是1,指互聯網地址(某些站點也支持其他非IP地址) 8. 回答(只在DNS響應數據報中存在)1) 域名客戶端請求解析的域名,和請求報文中的問題中的查詢名一樣 2) 類型2.1) A: IP地址2.2) NS: 名字服務器2.3) CNAME: 規范名稱2.4) PTR: 指針記錄,即IP到域名的反向查詢2.5) HINFO: 主機信息2.6) MX: 郵件交換記錄2.7) AXFR: 區域傳送請求 2.8) */ANY: 對所有記錄的請求 3) 類通常是1,指互聯網地址(某些站點也支持其他非IP地址)4) 生存時間客戶程序保留該資源記錄的秒數。資源記錄通常的生存時間值為2天。5) 資源數據長度資源數據的數量。該數據的格式依賴于類型字段的值5.1) 對于類型1(A記錄)資源數據是4字節的IP地址5.2) 對于類型CNAME資源數據是域名字符串長度 9. 授權(只在DNS響應數據報中存在) 10. 額外信息(只在DNS響應數據報中存在)
?
2. DNS查詢方式
0x1: 遞歸查詢和迭代查詢的區別
1.遞歸查詢: 一般客戶機和首選DNS服務器(寬帶連接是設置的默認DNS)之間屬遞歸查詢,即當客戶機向DNS服務器發出請求后,若DNS服務器本身不能解析,則會向另外的DNS服務器發出查詢請求,得到最終結
果后轉交給客戶機 2.迭代查詢(反復查詢): 一般DNS服務器之間屬迭代查詢,如:若DNS2不能響應DNS1的請求,則它會將DNS3的IP給DNS2,以便其再向DNS3發出請求
下圖為一次完整的DNS查詢過程,包括客戶端和本地DNS的遞歸查詢、以及本地DNS和上機DNS之間的迭代查詢
1. 網絡客戶端準備訪問www.163.com這個域名,瀏覽器準備進行DNS解析以獲取對應的IP 2. 網絡客戶端將DNS解析請求發送到"本地DNS服務器"后,就進行等待狀態,因為對于網絡客戶端和本地DNS服務器來說它們是遞歸關系,本地DNS服務器最終一定會把結果返回給網絡客戶端
(IP、或者是不存在) 3. 本地DNS服務器接收到DNS解析請求后,開始和上機DNS服務之間進行迭代查詢1) 向全球根域名DNS服務器發送解析請求,根DNS根據請求中的頂級域名,返回該域名對應的頂級DNS服務器(.com)IP2) 本地DNS服務器接著繼續向".com"DNS服務器發送解析請求,".com"服務器查詢自己的DNS緩存,返回.163.com域名服務器,要求本地DNS繼續迭代查詢3) 本地DNS繼續向".163.com"進行請求,并得到解析IP: 1.1.1.1 4. 本地DNS服務器將最終的解析結果返回給網絡客戶端,完成一次DNS解析
dig maps.google.com +trace
?
; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> maps.google.com +trace ;; global options: +cmd . 276507 IN NS c.root-servers.net. . 276507 IN NS d.root-servers.net. . 276507 IN NS h.root-servers.net. . 276507 IN NS b.root-servers.net. . 276507 IN NS g.root-servers.net. . 276507 IN NS j.root-servers.net. . 276507 IN NS a.root-servers.net. . 276507 IN NS i.root-servers.net. . 276507 IN NS k.root-servers.net. . 276507 IN NS l.root-servers.net. . 276507 IN NS m.root-servers.net. . 276507 IN NS e.root-servers.net. . 276507 IN NS f.root-servers.net. . 467210 IN RRSIG NS 8 0 518400 20160720050000 20160710040000 46551 . hoEAAYtNaUlG8/AB1vZwqsgIUb2NPrbs6CIBjstfNe3xvAfTeMVQb7oy KPGxlCxBtkR4S+jaoR//Es3FHqUDk7Okap5VroNJxfUq2ZCugTOIp8g4 aaSi13vb/ShFmfN4ADfUqXOHgqGRz/QOkSdZ+0tElkQoDcd63U6ETlJM IAQ= ;; Received 913 bytes from 10.143.22.116#53(10.143.22.116) in 24 mscom. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 com. 86400 IN RRSIG DS 8 1 86400 20160720170000 20160710160000 46551 . TtxKBdFbscgs26hOkVaP5DV5bvrczgFJ91Vq79iRhvRu5PveAjT8af8G yF0+JZMUAXyMbU7uxhgs0Rpec7ldBu/palvN9edTXZTUmmRCHiCoJwSX 46nzphAUeWh6+BB8FRZl6FpRMaSfZ02Vd3f3pxabNzLYtHzsizMXAOBv 8go= ;; Received 739 bytes from 198.41.0.4#53(a.root-servers.net) in 298 msgoogle.com. 172800 IN NS ns2.google.com. google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns4.google.com. CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20160717050355 20160710035355 34745 com. FRl3kWjrLQDbv3KST9JdLeQN0FgGqik8Pau80HDFSwQV9ON0D9L9CnyT 3qLHbgsh8MMt9ma0AnxjnfZx00YoRySt+0vwQfzk0/7Z6pTeyXEZCBQU 9we3XmqWg56sIDVDK3KKyTaPE2mJUZjweRpuvv3RsfjQ7qHeDeFR/spT eNk= S84AE3BIT99DKIHQH27TRC0584HV5KOH.com. 86400 IN NSEC3 1 1 0 - S84HQQBBMVORSCH4GNB3G868OHH33GUR NS DS RRSIG S84AE3BIT99DKIHQH27TRC0584HV5KOH.com. 86400 IN RRSIG NSEC3 8 2 86400 20160715050611 20160708035611 34745 com. oXeZcWKIL0ov3ySqHKlaBI6m7I1IgGjLzWBjiVUHBmgw7VWWrhibPvWu jeUSLDHNtyhC7LXgiMl18hjTB+frknLNG5gA/lut82uheMGHMV4VrsvP CREQ1mSgNqV7eNNocPoIHcFgL+3+wOrxLc1QzhJ6UK5/ni/kSewbHJQE qo0= ;; Received 665 bytes from 192.48.79.30#53(j.gtld-servers.net) in 268 msmaps.google.com. 300 IN A 216.58.197.110 ;; Received 49 bytes from 216.239.36.10#53(ns3.google.com) in 52 ms
?
dig 8uc.gddos.com? +trace
; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> 8uc.gddos.com +trace ;; global options: +cmd . 276370 IN NS i.root-servers.net. . 276370 IN NS m.root-servers.net. . 276370 IN NS d.root-servers.net. . 276370 IN NS h.root-servers.net. . 276370 IN NS b.root-servers.net. . 276370 IN NS a.root-servers.net. . 276370 IN NS e.root-servers.net. . 276370 IN NS j.root-servers.net. . 276370 IN NS c.root-servers.net. . 276370 IN NS l.root-servers.net. . 276370 IN NS k.root-servers.net. . 276370 IN NS f.root-servers.net. . 276370 IN NS g.root-servers.net. . 467073 IN RRSIG NS 8 0 518400 20160720050000 20160710040000 46551 . hoEAAYtNaUlG8/AB1vZwqsgIUb2NPrbs6CIBjstfNe3xvAfTeMVQb7oy KPGxlCxBtkR4S+jaoR//Es3FHqUDk7Okap5VroNJxfUq2ZCugTOIp8g4 aaSi13vb/ShFmfN4ADfUqXOHgqGRz/QOkSdZ+0tElkQoDcd63U6ETlJM IAQ= ;; Received 913 bytes from 10.143.22.116#53(10.143.22.116) in 2 mscom. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766 com. 86400 IN RRSIG DS 8 1 86400 20160720170000 20160710160000 46551 . TtxKBdFbscgs26hOkVaP5DV5bvrczgFJ91Vq79iRhvRu5PveAjT8af8G yF0+JZMUAXyMbU7uxhgs0Rpec7ldBu/palvN9edTXZTUmmRCHiCoJwSX 46nzphAUeWh6+BB8FRZl6FpRMaSfZ02Vd3f3pxabNzLYtHzsizMXAOBv 8go= ;; Received 737 bytes from 192.5.5.241#53(f.root-servers.net) in 29 msgddos.com. 172800 IN NS ns1cwy.name.com. gddos.com. 172800 IN NS ns2gtx.name.com. gddos.com. 172800 IN NS ns3dkz.name.com. gddos.com. 172800 IN NS ns4dls.name.com. CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20160717050355 20160710035355 34745 com. FRl3kWjrLQDbv3KST9JdLeQN0FgGqik8Pau80HDFSwQV9ON0D9L9CnyT 3qLHbgsh8MMt9ma0AnxjnfZx00YoRySt+0vwQfzk0/7Z6pTeyXEZCBQU 9we3XmqWg56sIDVDK3KKyTaPE2mJUZjweRpuvv3RsfjQ7qHeDeFR/spT eNk= 7P30T8CNL78NE7VK927QBUTOVFF0A00H.com. 86400 IN NSEC3 1 1 0 - 7P35935AMQU5C7SUS076VU2RMISV0DF9 NS DS RRSIG 7P30T8CNL78NE7VK927QBUTOVFF0A00H.com. 86400 IN RRSIG NSEC3 8 2 86400 20160717044119 20160710033119 34745 com. I9KyGVdi7ZOHtlVKCUcShMkCSwuR61D5tpD/yVD8IRammwLEUlQizyxv uiF3kWTC4PKZCcaJemBATBDhZIm+ZshdwL1sToMTbEYWucq+HGBgl6jM pVPbREB/ywa0U3dS9C6UiUvSuYP119LevJBkOVxkJ2SvlUsEVWkirKl6 EE8= ;; Received 708 bytes from 192.31.80.30#53(d.gtld-servers.net) in 276 msgddos.com. 300 IN SOA ns1cwy.name.com. support.name.com. 1 10800 3600 604800 300 ;; Received 87 bytes from 98.124.217.1#53(ns4dls.name.com) in 287 ms
?
?
0x2: DNS解析抓包實驗過程
1. DNS普通查詢
2. DNS查詢響應
可以看到,www.baidu.com是一個CNAME地址,是百度為了用戶好記而登記的域名
3. Zone Transfer(AXFR)請求
4. PTR域名反向查詢
?
3. 和DNS有關的安全風險
DNS是互聯網的一個基礎設施,針對DNS的安全風險大致有如下幾個:
1. 防火墻不會限制對DNS的訪問 這導致攻擊者可能會借助DNS通道進行數據庫帶外信道注入、或者DNS隱藏隧道等攻擊2.DNS可以泄漏內部的網絡拓樸結構 即DNS Zone Transfer攻擊 3.DNS的本身性能問題 安全的一個重要標志是可用性。對于DNS服務器而言這點尤其重要,在現實生活中經常定義攻擊者入侵系統獲取數據為一個安全問題,但是對于DNS服務器來說,遭到了拒絕服務攻擊則是一件更嚴
重的問題。失去了DNS服務器的話,任何在internet網絡上的人將不能夠再使用域名找到你的服務器,不可想像讓普通的網民們使用202.106.184.200來代替www.sina.com.cn使用。更嚴重的
是,沒有了DNS的服務,所有的郵件發送都將失敗,而你的內部網絡將由于解析域名的失敗而失去和外部網絡的聯系。 注冊了一個域名以后,可以最大為你的域名設置6個DNS服務器名。 例如,microsoft.com公司的就為自己設置了五個DNS服務器來解析自己的域名: Name Servers: DNS4.CP.MSFT.NET 207.46.138.11 DNS5.CP.MSFT.NET 207.46.138.12 Z1.MSFT.AKADNS.COM 216.32.118.104 Z7.MSFT.AKADNS.COM 213.161.66.158 DNS1.TK.MSFT.NET 207.46.232.37 這樣,即使這三個中的兩個停止了工作,但是了,仍然可以有一個會對外提供服務,而對于廣大的用戶而言,當出現這種多個DNS服務器停止服務帶來的唯一的影響就是查詢域名的時候會延遲,因
為它需要一個一個的去查詢,直到找到最后的一個為止。而上面這一個步驟也是你應付惡意攻擊者對DNS服務器進行拒絕服務攻擊的一個保護手段。
0x1: DNS Zone Transfer
Zone Transfer漏洞可以被滲透測試人員用來進行內網信息搜集、拓樸獲取等目的,是內網橫向滲透、信息搜集的一個很重要的手段。
一個名字服務器(NS)負責一個或多個區域(zone)。一個區域的管理者必須為該區域提供一個主名字服務器(master)和至少一個輔助名字服務器(slave)。主、輔名字服務器必須是獨立和冗余的,以便當某個名字服務器發生故障時不會影響該區域的名字服務。
主、輔名字服務器的主要區別在于主名字服務器從磁盤文件中調入該區域的所有信息,而輔名字服務器則從主服務器調入所有信息。我們將輔名字服務器從主服務器調入信息稱為區域傳送(zone transfer)
了解了DNS Zone Transfer的基本概念之后,我們來一起學習一下dig、nslookup這2個命令,看看我們都能利用Zone Transfer獲得哪些信息
nslookup命令解釋
在win上,nslookup會根據ipconfig連接后的默認DNS去找到所要使用的local DNS server
在linux上,nslookup會根據/etc/resolv.conf的內容去找到所要使用的local DNS server
C:\Users\LittleHann>nslookup 默認服務器: FJ-DNS.fz.fj.cn Address: 218.85.157.99 > ? 命令: (標識符以大寫表示,[] 表示可選) 1. NAME 打印有關使用默認DNS服務器(系統默認的DNS服務器)的主機/域NAME的信息,例如www.baidu.com 2. set OPTION 設置選項,OPTION可選項如下,[no]代表默認關閉1) all: 打印選項、當前服務器和主機2) [no]debug: 打印調試信息3) [no]d2: 打印詳細的調試信息4) [no]defname: 將域名附加到每個查詢5) [no]recurse: 詢問查詢的遞歸應答6) [no]search: 使用域搜索列表7) [no]vc: 始終使用虛擬電路8) domain=NAME: 將默認域名設置為 NAME9) srchlist=N1[/N2/.../N6]: 將域設置為 N1,并將搜索列表設置為 N1、N2 等10) root=NAME: 將根服務器設置為 NAME11) retry=X: 將重試次數設置為 X12) timeout=X: 將初始超時間隔設置為 X 秒13) type=X: 設置查詢類型(如 A、AAAA、A+AAAA、ANY、CNAME、MX、NS、PTR、SOA 和 SRV)
set type=ptr
本來要由IP反查 domain name時, 在直接打IP就行了, 但如果已經下了type=any的話, 要由IP反查時就沒那么方便了, 此時IP 4個數字要倒著寫, 最后還要加上in-addr.arpa.
以查140.116.72.219 為例, 要輸入的就是219.72.116.140.in-addr.arpa14) querytype=X: 與類型相同15) class=X: 設置查詢類(如IN(Internet)和ANY)16) [no]msxfr: 使用MS快速區域傳送17) ixfrver=X: 用于IXFR傳送請求的當前版本 3. server NAME 將默認服務器設置為NAME(例如8.8.8.8),同時對NAME進行解析
很多情況下,我們的DNS查詢并不會被發送到跟DNS服務器上,而是由DNS Cache服務器進行返回,為了獲得最新的數據,我們需要手動去修改"默認本地DNS"從而獲得最新的DNS數據 4. lserver NAME 將默認服務器設置為NAME,使用初始服務器 5. root 將當前默認服務器設置為根服務器 6. ls [opt] DOMAIN [> FILE] 列出DOMAIN中的地址(可選: 輸出到文件 FILE)
這個命令是要求name server將其負責的zone內容show出來, 這個動作相當于name server的整份記錄從server端傳回給nslookup這個程序, 這種傳回整個zone的動作叫作zone transfer1) -a列出規范名稱和別名2) -d列出所有記錄3) -t TYPE列出給定 RFC 記錄類型3.1) A3.2) CNAME3.3) MX3.4) NS3.5) PTR等的記錄 7. view FILE 對 'ls' 輸出文件排序,并使用 pg 查看 8. exit 退出程序
dig命令解釋
Dig是linux中的域名解析工具,Dig是domain information groper的縮寫
Usage: dig [@global-server] [domain] [q-type] [q-class] {q-opt}{global-d-opt} host [@local-server] {local-d-opt}[ host [@local-server] {local-d-opt} [...]] 1. domain 要查詢的域名 2. q-class 1) IN(默認)2) HS3) CH 3. q-type1) A(默認)2) ANY3) MX4) NS5) SOA6) HINFO7) AXFR8) TXT 4. q-opt1) -x dot-notation (shortcut for reverse lookups)2) -i (use IP6.INT for IPv6 reverse lookups)3) -f filename (batch mode)4) -b address[#port] (bind to source address/port)5) -p port (specify port number)6) -q name (specify query name)7) -t type (specify query type)8) -c class (specify query class)9) -k keyfile (specify tsig key file)10) -y [hmac:]name:key (specify named base64 tsig key)11) -4 (use IPv4 query transport only)12) -6 (use IPv6 query transport only)13) -m (enable memory usage debugging) 5. d-opt 格式為: +keyword[=value],keyword的可選值如下1) +[no]vc (TCP mode)2) +[no]tcp (TCP mode, alternate syntax)3) +time=### (Set query timeout) [5]4) +tries=### (Set number of UDP attempts) [3]5) +retry=### (Set number of UDP retries) [2]6) +domain=### (Set default domainname)7) +bufsize=### (Set EDNS0 Max UDP packet size)8) +ndots=### (Set NDOTS value)9) +edns=### (Set EDNS version)10) +[no]search (Set whether to use searchlist)
給你的公眾服務器提供清楚的統計信息11) +[no]showsearch (Search with intermediate results)12) +[no]defname (Ditto)13) +[no]recurse (Recursive mode)14) +[no]ignore (Don't revert to TCP for TC responses.)15) +[no]fail (Don't try next server on SERVFAIL)16) +[no]besteffort (Try to parse even illegal messages)17) +[no]aaonly (Set AA flag in query (+[no]aaflag))18) +[no]adflag (Set AD flag in query)19) +[no]cdflag (Set CD flag in query)20) +[no]cl (Control display of class in records)21) +[no]cmd (Control display of command line)22) +[no]comments (Control display of comment lines)23) +[no]question (Control display of question)24) +[no]answer (Control display of answer)
查詢的結果25) +[no]authority (Control display of authority)
告訴我們哪個DNS服務器給我們提供權威的答案26) +[no]additional (Control display of additional)
包含了列出的權威DNS的IP地址27) +[no]stats (Control display of statistics)
輸出包含了查詢的統計數據28) +[no]short (Disable everything except short form of answer)29) +[no]ttlid (Control display of ttls in records)30) +[no]all (Set or clear all display flags)31) +[no]qr (Print question before sending)32) +[no]nssearch (Search all authoritative nameservers)33) +[no]identify (ID responders in short answers)34) +[no]trace (Trace delegation down from root)35) +[no]dnssec (Request DNSSEC records)36) +[no]nsid (Request Name Server ID)37) +[no]sigchase (Chase DNSSEC signatures)38) +trusted-key=#### (Trusted Key when chasing DNSSEC sigs)39) +[no]topdown (Do DNSSEC validation top down mode)40) +[no]multiline (Print records in an expanded format) 6. global d-opts and servers (before host name) affect all queries. 7. local d-opts and servers (after host name) affect only that lookup.1) -h: (print help and exit)2) -v: (print version and exit)
常用的dig命令
1. 查找yahoo.com的A記錄: dig yahoo.com A +noall +answer
(注意:TTL的單位為秒s)2. 查找yahoo.com MX記錄的列表: dig yahoo.com MX +noall +answer3. 查找yahoo.com的權威DNS: dig yahoo.com NS +noall +answer4. 查詢上面所有的記錄: dig yahoo.com ANY +noall +answer5. 在現在這種IPv4和IPV6混用的情況下,你也可以使用AAAA的選項查詢主機的IPv6 AAAA記錄: dig www.isc.org AAAA +short6. 答案的精簡查詢 dig +nocmd www.baidu.com mx +noall +answer7. 用-x的選項查找IP地址的主機名 dig -x 8.8.8.8 +short8. 顯式指定NS服務器 dig @ns1.google.com www.google.com9. 查詢大量的主機名 dig -f /path/to/host-list.txt10. 找到最新的named.root文件 dig +nocmd . NS +noall +answer +additional11. 跟蹤DNS解析過程 dig gentoo.de +trace 可以在dig輸出的頭部分看到根DNS,然后找到負責解析所有*.de的DNS,最后找到gentoo.de的域名IP12. 用dig查看zone數據傳輸 dig @server www.baidu.com AXFR13. 用dig查看zone數據的增量傳輸 dig @server www.baidu.com IXFR=N14. 用dig查看反向解析 dig -x 8.8.8.8 @server15. 查找一個域的授權dns服務器 dig www.baidu.com +nssearch
0x2: Anti-DNS Zone Transfer配置
正常情況下,在一個信任網域下,將DNS資料列出是沒有問題的(即正常的主從服務器的Zone Transfer),但是若是能由外界進行任意查詢,那將衍變為具有危險的行為,因此,對DNS服務器進行Zone Transfer安全配置是十分重要的。對于DNS的安全加固,大致可以從以下幾個方面入手:
1. 控制允許可以向DNS服務器提出查詢請求的主機: allow-query { myAddresses; trusted; }; 如果你沒有定義選項 allow-query ;那么Bind默認會允許所有的來訪者都可以查詢這個DNS服務器,相當于: allow-query { any; };2. 控制允許可以進行迭代解析或查詢的主機列表: allow-recursion { match-list; }; 如果你沒有定義選項 allow-recursion ; 那么Bind默認會允許所有可以訪問DNS的來訪者都可以進行迭代查詢3. 定義可以與主DNS服務器進行數據交流的輔助DNS服務器的ip地址,即限制zone transfer的訪問 allow-transfer { match-list; }; 允許這些match-list中的輔助DNS與主DNS服務器進行數據的交流與傳送。 例如:我的主DNS服務器192.168.68.128;輔助DNS服務器192.168.68.2,允許它們進行數據交流: allow-transfer { 192.168.68.2; };: 如果你沒有定義選項 allow-transfer ;那么Bind默認會允許所有的輔助DNS服務器與主DNS服務器進行數據交流4. 定義主DNS服務器的對客戶的請求查詢失敗時的行為: forwarders { match-list; }; forward first | only; 選項forwarders定義了當DNS服務器應答失敗時,就將客戶端的請求轉發到match-list中的其他服務器; 選項forward 定義DNS服務的轉發類型:first 是優先轉發上述定義的DNS服務器;only是只會轉發到上述定義的DNS服務器; 如果你沒有定義選項 forwarders的選項 ;那么Bind默認不做任何轉發動作。
?
4. DNS記錄類型
0x1: TXT記錄
TXT記錄是DNS記錄的一種類型,可向您網域外部的源提供文本信息。該文本可以是用戶可讀型文本或機讀型文本,并可用于多種用途
可以向您網域的DNS設置中添加TXT記錄以驗證網域所有權并實施多種電子郵件安全措施
TXT記錄可包含任何文本值,具體取決于它的用途(它由DNS管理員自己定制)。例如,Google使用TXT記錄來驗證您擁有希望用于我們企業服務的網域,其值為"google-site-verification=rXOxyZounnZasA8Z7oaD3c14JdjS9aKSWvsR1EbUSIQ"。之后,Google會查詢您的網域以確定該TXT記錄是否已生效。如果TXT記錄已生效,那么Google會知道管理員有權訪問該網域的DNS設置,那么管理員一定擁有該網域
1. TXT格式
To store new types of information, the experimental RFC 1464 suggests a structured format in TXT data fields. The format consists of the attribute name followed by the value of the attribute. The name and value are separated by an equals sign (=)
The general syntax is:
<owner> <class> <ttl> TXT "<attribute name>=<attribute value>"
Example:
name ttl class rr text joe IN TXT "Located in a black hole"
2. TXT記錄用途
1. 驗證網域所有權 2. 使用SPF向發件人授權 3. 使用DKIM添加電子郵件數字簽名 4. 使用DMARC阻止外發垃圾郵件 //按照spf格式在dns中增加一條txt類型的記錄,將提高該域名的信譽度,同時可以防止垃圾郵件偽造該域的發件人發送垃圾郵件
3. Sender Policy Framework(SPF)
"v=spf1 mx -all"Allow domain's MXes to send mail for the domain, prohibit all others. "v=spf1 -all"The domain sends no mail at all. "v=spf1 +all"The domain owner thinks that SPF is useless and/or doesn't care.
0x2: SOA記錄
任何DNS系統返回第一個域名記錄就是SOA(Start of Authority)
在域名配置中,SOA記錄格式如下 IN SOA nameserver.place.dom. postmaster.place.dom. (1 ; serial number 3600 ; refresh [1h] 600 ; retry [10m] 86400 ; expire [1d] 3600 ) ; min TTL [1h]使用"dig"時的返回格式為 gddos.com. 300 IN SOA ns1cwy.name.com. support.name.com. 1 10800 3600 604800 300其中的每個部分含義如下 1. serial number(序列號): 是域名記錄的版本,每更改一次域名的任何DNS記錄,版本號就會自動加一,這時secondary dns就會知道DNS記錄發生更改,以便重新同步 2. refresh(刷新時間): 告訴secondary dns多久應該查詢primary dns,看看DNS記錄是否有更新。每次查詢時,secondary dns會向primary dns請求SOA記錄。如果記錄中的serial number跟secondary dns已有的序列號不一樣,則會向primary dns請求傳送域名的當前的DNS記錄 3. retry(重試時間): 如果想primary dns請求傳送域名當前的DNS記錄失敗后,間隔重試時間后再次重試請求。一般來說,retry小于refresh 4. expire(過期時間): 在過期時間之前,secondary dns會繼續請求傳送DNS記錄,并且在此時間里,secondary dns會根據已有的記錄應答相關的DNS查詢。如果到了過期時間后,secondary dns會停止應答該域名的DNS查詢 5. min TTL(最小TTL): 域名所有記錄的最小生存時間值。當用戶DNS查詢到記錄后,將存在緩存中,直到至少過了這個時間才將緩存刷新重新查詢 6. Negative caching TTL: 有的DNS服務器還會有Negative caching TTL,就是當用戶DNS查詢到無此域名記錄(NXDOMAIN)時,將把這個"沒有此域名的記錄"的聲明保存在緩存中的時間
Relevant Link:
https://support.google.com/a/answer/2716800?hl=zh-Hans http://mxtoolbox.com/TXTLookup.aspx https://en.wikipedia.org/wiki/TXT_record http://www.openspf.org/SPF_Record_Syntax http://blog.csdn.net/qingchn/article/details/9719545
?
Copyright (c) 2014 LittleHann All rights reserved
?