何黎明 江西省信息中心 南昌市 330036
曾靚 江西廣播電視臺 南昌市 330036
蔡敏 南昌市第十八中學 南昌市 330036
隨著全球IPv4地址的徹底枯竭,IPv6升級演進已經提到整個互聯網,乃至整個社會的議事議程。在此過程中,網絡的升級是前提,網站的改造是關鍵,因為沒有IPv6的網站和內容,IPv6網絡也無用武之地。但網站升級遠比我們想象中的復雜,IPv6相對于IPv4而言,不僅僅是底層代碼、內存變量、業(yè)務邏輯有所變化,即使最不引人注意的域名解析也會變成一個巨大的障礙。一些大型網站或網站群,網站內部的各級域名常常超過1000條,如果計算外部引用的域名,往往上萬條。如果每一條域名都明確配置AAAA記錄,解析IPv6地址,光是這種配置工作就相當繁重,甚至不具備操作性。所以域名的泛解析就普遍使用在IPv6域名解析中。甚至在IPv4階段,很多內部IPv4域名解析也使用泛解析來減少配置的工作量,簡化維護工作。
用戶上網,首先需要知道目的網站的域名,然后發(fā)出域名解析請求(DNS請求),向域名解析服務器(DNS)請求解析網站域名所對應的網絡地址,得到相應的網絡地址后,用戶才能根據網絡地址向目的網站發(fā)出內容請求。在請求解析網絡地址時,用戶將根據自身支持協議類型發(fā)出不同類型的DNS請求。如果支持IPv4協議,用戶將發(fā)出A類型的DNS請求,DNS將把相應被請求網站的A記錄返回給用戶,該A記錄所記錄的內容就是被請求網站的IPv4地址。如果支持IPv6議,用戶將發(fā)出AAAA類型的DNS請求,DNS將把相應被請求網站的AAAA記錄返回給用戶,該AAAA記錄所記錄的內容就是被請求網站的IPv6地址。至此,用戶已經完成DNS解析,獲得相應網站的IP地址,如果能獲得IPv6的地址,用戶將優(yōu)先使用IPv6協議通信,向網站發(fā)起IPv6的HTTP請求,如果沒有獲得IPv6地址,才使用IPv4協議通信,向網站發(fā)起IPv4的HTTP請求。具體DNS解析和網站訪問流程如下圖所示。
圖1 域名解析流程圖
可見DNS解析在用戶上網過程中是至關重要的,如果不能成功進行DNS解析,相應域名所對應的網站或內容就無法訪問。一般情況下,為了開發(fā)、運營、維護的方便,除了一級域名(如abc.com)以外,網站往往都有很多二三級域名,如www.abc.com、mail.abc.com、beijing.abc.com、tiananmen.beijing.abc.com等。網站必須為每一個使用的子域名指定IP地址,否則未能成功解析的子域名所對應的內容就無法訪問。但并不是每個子域名都有獨立服務器和IP地址,所以會普遍存在多個子域名指向同一個服務器和IP地址的情況。DNS在查找和解析域名時,分為精確查找和模糊查找兩種行為。如果要求DNS精確查找,配置A或AAAA記錄時,應該填寫完整的域名,如www.abc.com和abc.com就是不同記錄,可以返回不同的IP地址。如果要求DNS模糊查找,配置A或AAAA記錄時,可以使用“*”作為通配符,代表任何合法的子域名,如www.abc.com和mail.abc.com都能匹配到*.abc.com的記錄,返回*.abc.com所對應的IP地址。網站只需要在DNS上配置一條*.abc.com記錄,就可以解析所有子域名的IP地址,當然也要求所有子域名都是指向同一臺服務器和IP地址,但這往往也是最普遍的情況。在DNS解析過程中使用“*”作為通配符,代表所有合法子域名的做法就是常說的“域名泛解析”。泛解析的使用就是要簡化網站配置和維護工作。在一些中大型網站中,子域名可能過萬條,其DNS的配置和維護工作量絕對不能小覷,特別在網站IPv6升級中要處理大量外部網站的引用(URL),如果每一條URL都人工配置是不現實的,所以網站IPv6升級中也會普遍使用域名泛解析,把眾多子域名和外部URL通過泛解析全部指向授權的IPv4-IPv6互通網關,再由IPv4-IPv6互通網關智能分析URL,解析真實的IP地址,從而減少DNS的配置工作量。
泛解析的使用,讓維護人員不用為每個子域名配置DNS的A和AAAA記錄,允許任何域名解析為泛解析所指向的地址,其中包括沒有真正使用子域名。如設置*.abc.com指向IPv4的202.100.10.1和IPv6的2001::1,那么正常使用的www.abc.com和mail.abc.com將指向202.100.10.1和2001::1,同時沒有使用的illegal.abc.com也會指向202.100.10.1和2001::1。泛解析事實上是為域名解析提供了一條缺省路徑,在給網站維護人員帶來便捷的同時,是否也會引入額外的安全風險?
事實上,引發(fā)網站安全問題的原因有以下5種:
1)用戶所使用的緩存DNS被入侵或維護管理不當,網站的A或AAAA記錄被篡改為其它非法地址,指向非法服務器。
2)用戶的DNS請求和回復報文被攔截和篡改,用戶收到的A或AAAA記錄并不是指向用戶想訪問的網站。
3)網站的授權DNS被入侵或維護管理不當,網站的A或AAAA記錄被篡改為其它非法地址,或相應的CNAME被指向其它非法授權DNS,從而解析出非法地址,指向非法服務器。
4)網站本身被入侵或維護管理不當,網站內容被篡改為非法內容或引用了其它非法網站的內容。
5)用戶訪問網站的請求和回復報文被攔截和篡改,用戶收到的網站內容并不是真實網站的內容。
以上引發(fā)網站安全問題的各種原因并沒有涉及域名泛解析。只要不存在以上任何一種場景,即使使用了泛解析也不會出現網站安全問題,但一旦出現以上任何一種場景,即使沒有使用泛解析也會出現網站安全問題。所以簡單認為域名泛解析不安全是有所偏頗的。在正常情況下,如果用戶輸入非法域名illegal.abc.com,被DNS上的泛解析*.abc.com指向缺省地址www.abc.com,那么,用戶看到的情況將是:用戶在瀏覽器地址欄錯誤輸入illegal.abc.com,并點擊訪問,瀏覽器馬上跳轉到www.abc.com,而且在瀏覽器地址欄和標題區(qū)都只會顯示www.abc.com,不會顯示illegal.abc.com。也就是說,泛解析并不會讓用戶誤以為真的存在illegal.abc.com??梢姡灰_使用,泛解析不會讓網站隨意跳轉到其它網站,也不會讓用戶誤解錯誤域名的存在??偠灾?,域名泛解析在帶來DNS配置便捷性的同時,并不會帶來新的安全風險。其實,在IPv6升級演進工作之前,泛解析已經在IPv4場景下廣為使用,事實證明了泛解析的安全性。
在一些應用場景,泛解析能發(fā)揮很大作用,盲目禁止使用只會給運營維護工作帶來更大的麻煩,同時也沒有提高安全性。以下是網站維護中,泛解析最常用的場景:
一些中小型網站,雖然也有不少二級域名,但由于公有IPv4地址非常短缺,中小型網站很難申請到足夠的網絡地址,為了節(jié)省IPv4地址,網站入口不得不設為單一入口。也有一些網站希望對訪問用戶進行統計分析或訪問控制,為了便于分析和控制,也會設置單一訪問入口。此時,在授權DNS上設置*.abc.com等形式的泛解析,可以把所有關于該網站的訪問全匯聚到*.abc.com指向的IP地址和服務器,即網站的默認訪問入口。網站默認訪問入口從HTTP報文中提取用戶真實想訪問的URL,根據URL重定向到具體的應用服務器或應用模塊。這是泛解析最常用、最有價值的應用場景,它不僅僅加強了網站的訪問控制能力,也節(jié)省了寶貴的IPv4地址資源,同時也加快了DNS解析效率,特別是在遇到DNS解析攻擊時,由于泛解析大大縮少了DNS查詢的范圍,在同等性能DNS環(huán)境下,泛解析讓DNS攻擊的抵御能力大大提高。
設置網站默認訪問入口,泛解析是必須的。但網站默認訪問入口的設置將把所有訪問流量都導向訪問入口,一旦DNS配置出錯或默認入口故障,將直接影響整個網站的服務提供,也容易成為攻擊目標。所以使用泛解析,需要反復檢查DNS配置,確認無誤后才能實施和生效,而且網站默認入口要考慮冗余備份或負載分擔等安全措施,一些大型網站,甚至可以考慮結合路由層面的anycast技術,在多個不同地理位置的節(jié)點使用同一個IP地址作為網站的默認入口,這樣既能增大默認入口的吞吐量,增加冗余性,提高抗攻擊能力,也能有效分離網站部署和DNS解析配置的耦合性。
網站域名除了從搜索引擎、外部鏈接得到以外,很多情況下是手工輸入的,輸入出錯是再正常不過了。如果不做任何處理,用戶在申請DNS解析時就收到沒有該網站記錄的回應。究竟是輸入錯誤還是真的網站不存在,無法分別。一些網站為了提高用戶體驗,特別是一些商業(yè)網站為了盡量引導流量,往往為網站設置錯誤提醒頁。網站維護人員在所有合法域名解析后增加一條類似*.abc.com的泛解析指向網站錯誤提醒頁,該頁面一般告訴用戶正確的網站域名并盡力引導到最有可能的網頁上。也有些網站是因為還沒完成全部功能或內容的部署,通過泛解析設置錯誤提醒頁,通知用戶網站正在建設中。這種錯誤提醒比簡單的無法訪問要友好很多。
網站錯誤提醒頁的實現也需要使用泛解析。由于錯誤提醒頁不是網站的關鍵環(huán)節(jié),即使被攻克,也不會影響網站的整體使用,只需要在配置泛解析時注意別把正常域名也指向錯誤提醒頁面。
在一些交互性強的網站,往往會使用動態(tài)域名或臨時性域名。譬如個人主頁、個人空間或個人硬盤等業(yè)務,往往在業(yè)務提供商的一級域名下動態(tài)增加帶有個人標識的二級域名。這些域名一般沒有規(guī)律,不便記憶,僅僅用于用戶管理和業(yè)務隔離。如果這種動態(tài)域名也全部在DNS上配置和解析,大量動態(tài)DNS記錄會導致DNS解析效率下降,直接影響到用戶體驗。所以這種情況下,一般在DNS上配置泛解析,把所有動態(tài)域名直接指向特定的WEB服務器,再由WEB服務器根據HTTP攜帶的URL信息區(qū)分不同用戶,進入不同的空間。
在一些在線支付的場景下,網站會為某個交互環(huán)節(jié)生成一個臨時的域名,譬如二維碼等。這些域名往往在交互結束后就會失效,而且要求時效性很強。如果大量臨時性域名通過傳統的DNS解析,對運營商的緩存DNS和網站的授權DNS都是一個災難,這種DNS解析風暴對目前任何一個DNS都相當于網絡攻擊。所以網站必然會使用域名泛解析,把所有臨時性域名指向專屬WEB服務器,再由該服務器識別和驗證業(yè)務的合法性。這樣有效避免緩存DNS記錄的頻繁變動。
泛解析主要有上述三種用途,在不同場景下有不同的變化形式,包括數據中心(IDC)服務提供商利用泛解析為沒有申請獨立域名的客戶提供二級子域名服務,搜索引擎優(yōu)化(SEO)過程中利用泛解析為網站提供更多的訪問入口,盡可能引導流量等。這些都是為某種目的而使用泛解析。其實泛解析在日常網站運營維護中給我們帶來很大便利,只要我們在配置DNS泛解析時注意檢查配置的正確性,同時確保泛解析所指向網站的安全性即可放心使用。
域名泛解析本身不存在安全風險,關鍵的是提升域名解析系統的安全性和網站自身的安全性,特別是泛解析所指向的缺省網站。安全問題往往是管理問題,提高安全性應當從日常管理入手。提高網站安全性可以從前述引發(fā)網站安全問題的幾個方面著手,具體建議如下:
建議選擇安全可靠的DNS商業(yè)產品,包括DNS解析服務和DNS專業(yè)設備。如果選擇使用第三方專業(yè)DNS解析服務或商業(yè)DNS設備,只要合理部署,大部分安全問題已經由產品或服務供應商較好解決。如果選擇部署免費的開源DNS,則需要重點做好DNS服務器操作系統和DNS軟件系統的安全漏洞加固工作,關閉所有不必要的服務端口,有條件的可以部署防火墻提高網絡安全等級。
不管是租用云主機還是部署自有的服務器,服務器安全問題都需要網站運營維護人員考慮解決。建議定期為網站服務器掃描安全漏洞和打補丁,關閉所有不必要的服務端口,卸載所有不必要的應用程序,有條件的可以部署防火墻、網站應用級入侵防御系統(WAF)等安全產品,甚至對一些重點業(yè)務購買流量清洗服務,提高網站服務器的安全等級。對一些大型網站或網站群,應該考慮部署內容發(fā)布網絡(CDN)或平臺,隔離用戶訪問和真正的應用服務器,在提升網站吞吐量的同時,增加網站的安全防范能力,特別是防止拒絕服務攻擊(DDoS)能力
再安全的服務器都無法保護有漏洞的代碼。如果使用開源代碼開發(fā)網站時,應當選擇流行的,不斷完善的開源軟件,并定期更新和打補丁。具體實現時,注意在客戶端屏蔽用戶查看源代碼的功能;在客戶輸入信息過程中注意有效內容的校驗,以防注入式攻擊;在使用URL時,盡量使用靜態(tài)URL,避免動態(tài)URL參數暴露網頁間的關系;在客戶登錄時,應當使用驗證碼,避免暴力破解登錄賬號和密碼;在客戶訪問時,應當校驗和過濾IP地址,防止DDoS攻擊;在客戶訪問過程中,注意保留日志信息,以備后期追溯和破壞行為的分析。
賬號密碼泄露,等同于保險箱丟了鑰匙,再堅固的門都沒用。日常維護中,賬號密碼應當專人管理,明確責任和權力,落實到個人。登錄服務器時,包括登錄DNS和網站服務器,都采用SSL加密,防止通過監(jiān)聽來竊取賬號密碼。設置密碼時,應當選用復雜密碼,避免有規(guī)律的密碼,以免密碼被猜到或暴力破解。
域名泛解析在給網站運維管理帶來便捷的同時,并沒有增加安全風險。很多域名注冊服務商和域名解析服務器都支持域名泛解析,并且在互聯網中廣泛應用。要杜絕網站被劫持等風險,更多要從網站服務器和域名服務器的運維管理著手,加固域名服務器和網站服務器的安全防護,使用復雜賬號密碼來管理域名服務器和網站服務器,做好日常的數據監(jiān)測和備份。