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