導(dǎo)語
宙斯盾DDoS防護(hù)系統(tǒng)作為公司級(jí)網(wǎng)絡(luò)安全產(chǎn)品,為各類業(yè)務(wù)提供專業(yè)可靠的DDoS/CC攻擊防護(hù)。在黑客攻防對(duì)抗日益激烈的環(huán)境下,DDoS對(duì)抗不僅需要“降本”還需要“增效”。
隨著云原生的普及,宙斯盾團(tuán)隊(duì)持續(xù)投入云原生架構(gòu)改造和優(yōu)化,以提升系統(tǒng)的處理能力及效率。本文主要介紹宙斯盾防護(hù)調(diào)度平臺(tái)上云過程實(shí)踐與思考。
為什么上云?
云原生作為近年來相當(dāng)熱門的概念,無論在公司內(nèi)各部門,還是公司外各大同行友商,都受到追捧。云原生涉及技術(shù)包括容器、微服務(wù)、DevOps、持續(xù)交付等,這些新的技術(shù)和理念能帶來哪些收益?在我們看來,
資源共享,動(dòng)態(tài)擴(kuò)縮容——“降本”
以宙斯盾防護(hù)調(diào)度平臺(tái)為例,因?yàn)橐郧吧暾?qǐng)的物理機(jī)資源還在服役期,所以當(dāng)前大部分后臺(tái)服務(wù)還是運(yùn)行在物理機(jī)。申請(qǐng)時(shí)會(huì)適當(dāng)預(yù)留buffer(資源消耗跟外部攻擊威脅有關(guān),波峰波谷相差可達(dá)十倍)。這部分buffer雖然作為backup,但同時(shí)大部分時(shí)間處于空閑狀態(tài),物理機(jī)也不便于跨系統(tǒng)、項(xiàng)目共享。
在資源上云階段,CVM已經(jīng)對(duì)物理機(jī)做了虛擬化,一定程度上實(shí)現(xiàn)資源共享。隨著容器化管理平臺(tái)的出現(xiàn),資源控制粒度更細(xì)。
例如在TKE平臺(tái)上,一個(gè)容器分配的資源可以精確到0.1核CPU、1 MB內(nèi)存,根據(jù)負(fù)載隨時(shí)擴(kuò)縮容。同時(shí)所有資源作為一個(gè)大池子來共享,減少資源浪費(fèi)。
容器化管理,快速部署——“增效”
要提升迭代速度,除了開發(fā)環(huán)節(jié),測(cè)試、發(fā)布、運(yùn)維都需要做優(yōu)化。原來物理機(jī)部署時(shí),需要運(yùn)維同學(xué)手工或者通過專門的運(yùn)維發(fā)布平臺(tái)來完成發(fā)布,期間還可能因?yàn)闄C(jī)器環(huán)境的差異出現(xiàn)發(fā)布失敗或者異常,需要人工處理。
現(xiàn)在通過容器化部署,可以保證服務(wù)的運(yùn)行環(huán)境一致性,避免“雪花服務(wù)器”。同時(shí)借助容器管理平臺(tái),可以實(shí)現(xiàn)一鍵發(fā)布、快速擴(kuò)縮容,通用的容器容災(zāi)策略為服務(wù)的穩(wěn)定性提供了基本保證。
怎么上云?
當(dāng)前架構(gòu)
如上圖所示,DDoS防護(hù)流程包括攻擊檢測(cè)(發(fā)現(xiàn)攻擊)和攻擊防護(hù)(攻擊流量清洗及正常流量回源)。
在這個(gè)過程中,還需要一個(gè)主控“大腦”來協(xié)調(diào)檢測(cè)系統(tǒng)和防護(hù)系統(tǒng),以實(shí)現(xiàn)全流程的自動(dòng)化處理——這個(gè)“大腦”就是防護(hù)調(diào)度平臺(tái)。在檢測(cè)到DDoS/CC攻擊時(shí),防護(hù)調(diào)度平臺(tái)會(huì)自動(dòng)化決策需要調(diào)用的防護(hù)設(shè)備機(jī)房、數(shù)量、以及需要下發(fā)的防護(hù)策略,遇上強(qiáng)對(duì)抗時(shí)還需要實(shí)時(shí)調(diào)整防護(hù)設(shè)備上的防護(hù)策略,其重要程度可見一斑。
當(dāng)前防護(hù)調(diào)度平臺(tái)整體架構(gòu)如下圖所示。
·防護(hù)設(shè)備:分為ADS(Anti-DDoS System)、HTTP CC、HTTPS CC三大類,結(jié)合多年來團(tuán)隊(duì)在DDoS/CC攻防對(duì)抗上的積累,分別集成了各種協(xié)議/場(chǎng)景下的自研防護(hù)算法。防護(hù)設(shè)備部署在全球各地機(jī)房入口,在觸發(fā)攻擊告警后牽引并清洗攻擊流量,然后回源。其上部署有管控agent,負(fù)責(zé)與后臺(tái)通信、并管理防護(hù)設(shè)備。
·接入層:多點(diǎn)接入,內(nèi)網(wǎng)、公網(wǎng)接入。管控agent啟動(dòng)后隨機(jī)選擇一個(gè)可用接入進(jìn)行TCP連接。
·后臺(tái)服務(wù):多主/主備部署,向接入注冊(cè)心跳,所有后臺(tái)請(qǐng)求通過接入分發(fā)、負(fù)載均衡,所有agent請(qǐng)求通過接入轉(zhuǎn)發(fā)。
如果按照當(dāng)前架構(gòu)直接部署到TKE上,系統(tǒng)是可以運(yùn)行起來,但是由于機(jī)器部署和容器部署的特性不同,直接部署總會(huì)有些沖突、別扭的地方。
考慮方案時(shí),我們覺得當(dāng)前架構(gòu)不適應(yīng)TKE部署的主要地方有:
·服務(wù)發(fā)現(xiàn):后臺(tái)服務(wù)根據(jù)預(yù)配置的接入IP列表注冊(cè)心跳,容器化部署后IP切換頻繁,通過配置的方式加載接入已經(jīng)不適用。
·無狀態(tài):容器化部署可以做到根據(jù)負(fù)載快速擴(kuò)容,但需要服務(wù)做到完全無狀態(tài)才能達(dá)到完全水平擴(kuò)展。當(dāng)前多主部署的服務(wù)都是無狀態(tài)的,可以直接遷移,但主備部署的服務(wù)則需要改造。
·配置管理:當(dāng)前按機(jī)器維度管理,與運(yùn)行環(huán)境相關(guān)/無關(guān)的配置混在一起。
同時(shí),借著這次上云的機(jī)會(huì),我們也希望對(duì)系統(tǒng)架構(gòu)做一次大的優(yōu)化,接入公司成熟的公共服務(wù)如北極星名字服務(wù)、七彩石配置中心、智研,提升研效。
上云架構(gòu)
基于當(dāng)前架構(gòu),除了把服務(wù)做鏡像打包、遷移到TKE上部署,同時(shí)對(duì)不適應(yīng)的地方做改造、優(yōu)化。
改造后的大致架構(gòu)及流程如下:
·服務(wù)發(fā)現(xiàn):后臺(tái)服務(wù)全部接入北極星名字服務(wù),向北極星注冊(cè)實(shí)例、定期發(fā)送心跳,接入從北極星獲取各類服務(wù)健康實(shí)例來分發(fā)請(qǐng)求。
·無狀態(tài):當(dāng)前系統(tǒng)存在狀態(tài)的場(chǎng)景主要有兩類。
文件下載:主要是防護(hù)設(shè)備的策略文件下載,無狀態(tài)化改造涉及待下載文件在多個(gè)文件服務(wù)實(shí)例間同步。解決方案是選擇使用CFS來同步文件。
策略分包下發(fā):策略太大時(shí)應(yīng)用層做了分包,同一請(qǐng)求哈希到同一后臺(tái)策略服務(wù)實(shí)例。解決方案是請(qǐng)求中帶上當(dāng)前分包狀態(tài)信息,任一策略服務(wù)實(shí)例可以處理且結(jié)果一致。
·配置管理:與運(yùn)行環(huán)境無關(guān)的配置,接入七彩石配置中心,保證同一類型部署的實(shí)例配置一致。
·日志監(jiān)控:遷移到智研日志匯、監(jiān)控寶。
兩大“攔路虎”
如何平滑遷移
當(dāng)前物理機(jī)環(huán)境穩(wěn)定運(yùn)行,計(jì)劃逐步灰度、切量到TKE環(huán)境,因此會(huì)有一段時(shí)間是物理機(jī)+TKE混跑的狀態(tài)。管控接入、后臺(tái)服務(wù)遷移TKE,對(duì)于防護(hù)設(shè)備agent是透明的。
因?yàn)榉雷o(hù)設(shè)備agent只會(huì)選擇一個(gè)可用接入建立連接,即agent只會(huì)連到物理機(jī)環(huán)境或TKE環(huán)境,因此后臺(tái)服務(wù)與agent交互時(shí),混跑狀態(tài)下涉及物理機(jī)環(huán)境和TKE環(huán)境互訪的情況。這種情況TKE提供了靈活的配置支持。
在TKE上部署服務(wù)時(shí),提供了兩種網(wǎng)絡(luò)模塊:
·Global Route:VPC內(nèi)私有IP,無法從集群外訪問,不可以注冊(cè)到CMDB。開啟隨機(jī)端口映射后可從集群外訪問,并可綁定CLB和北極星。
·ENI IP:公司內(nèi)可路由IP,可從集群外訪問,可以注冊(cè)CMDB、CLB和北極星。
在混跑灰度期間,接入部署選擇ENI IP的方式,物理機(jī)后臺(tái)服務(wù)訪問TKE接入跟訪問普通內(nèi)網(wǎng)服務(wù)無異。遷移完成后,后臺(tái)服務(wù)改用Global Route的方式,僅允許集群內(nèi)互訪。后臺(tái)服務(wù)間通過原生的service訪問,對(duì)外只通過CLB暴露服務(wù)。
不斷變化的IP
由于DDoS攻防對(duì)抗的業(yè)務(wù)特性,我們長(zhǎng)期跟IP打交道,對(duì)IP有一種特殊的情節(jié)。在內(nèi)部交流中,我們發(fā)現(xiàn)大家在遷移TKE過程中都會(huì)遇到一些共性問題。其中,跟IP相關(guān)的問題就會(huì)經(jīng)常被提及。
在物理機(jī)部署環(huán)境,機(jī)器IP是固定的且變化頻率較低(幾年一次的機(jī)器裁撤)。但是在TKE環(huán)境,重啟一次服務(wù),分配到的容器IP、節(jié)點(diǎn)就可能變了,導(dǎo)致系統(tǒng)中依賴IP實(shí)現(xiàn)的功能無法很好適應(yīng)TKE環(huán)境。
訪問鑒權(quán)
比較簡(jiǎn)單的鑒權(quán)是基于源IP加白,如接口訪問、DB訪問。對(duì)于接口訪問,我們定義了一套基于JWT的接口鑒權(quán)規(guī)范,所有對(duì)外接口不再使用源IP加白的方式。對(duì)于DB訪問,當(dāng)前是使用不限源的獨(dú)立DB賬號(hào),并對(duì)權(quán)限做更細(xì)的劃分(精確到表)。后續(xù)DB權(quán)限支持實(shí)時(shí)申請(qǐng),當(dāng)容器起來以后通過接口申請(qǐng)當(dāng)前容器所在節(jié)點(diǎn)的訪問權(quán)限。
服務(wù)發(fā)現(xiàn)
原來的架構(gòu)中,管控接入層實(shí)現(xiàn)了簡(jiǎn)單的服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)功能,后臺(tái)服務(wù)通過IP配置來注冊(cè)、上報(bào)心跳。如果接入層不遷移到TKE、繼續(xù)保持相對(duì)固定,那么這套方案還是可行的。但是,接入層遷移到TKE后,自身的部署節(jié)點(diǎn)也在不斷變化,因此需要一個(gè)獨(dú)立與接入、相對(duì)固定的服務(wù)注冊(cè)與發(fā)現(xiàn)模塊。集群內(nèi)部署的服務(wù)可以使用K8s/TKE原生的service,對(duì)于物理機(jī)和TKE混跑的情況則可以考慮北極星名字服務(wù)。
服務(wù)暴露
這里包含兩層含義,一個(gè)是該暴露給外部的服務(wù)如何保持穩(wěn)定,另一個(gè)是不該暴露給外部的服務(wù)如何隱藏起來。
(1)暴露服務(wù)給外部
在物理機(jī)環(huán)境,機(jī)器裁撤導(dǎo)致服務(wù)IP變化就是經(jīng)常出現(xiàn)的問題,通過域名、VIP都可以解決。在TKE上,通過CLB來實(shí)現(xiàn)。
(2)隱藏內(nèi)部服務(wù)
通過VPC內(nèi)私有IP,就能保證服務(wù)無法從集群外訪問,實(shí)現(xiàn)隔離。
我們系統(tǒng)的最終目標(biāo)是:所有對(duì)外服務(wù)通過接入層暴露出去,做好鑒權(quán);內(nèi)部的后臺(tái)服務(wù)都隱藏起來,保證安全性。
上云效果
防護(hù)調(diào)度平臺(tái)上云之后,
(1)在降低成本方面,預(yù)計(jì)資源使用率可以達(dá)到50%以上。之前為了保證DDoS攻擊峰值時(shí)能正常運(yùn)行而預(yù)留的一大部分資源,閑時(shí)放到整個(gè)大資源池里共享,忙時(shí)動(dòng)態(tài)擴(kuò)容。
(2)在部署效率方面,部署、擴(kuò)容耗時(shí)從天降到分鐘。原來需要運(yùn)維同學(xué)專人專職完成發(fā)布,上TKE后只需開發(fā)同學(xué)簡(jiǎn)單配置即可完成。同時(shí),隨著業(yè)務(wù)場(chǎng)景的快速變化,通過TKE滿足了我們對(duì)高防、網(wǎng)關(guān)、第三方云等場(chǎng)景的快速部署和擴(kuò)容。
隨著公司內(nèi)云上服務(wù)越來越豐富,通過上云和接入公共服務(wù),優(yōu)化宙斯盾防護(hù)調(diào)度平臺(tái)的架構(gòu),從而提升系統(tǒng)擴(kuò)展性和迭代效率。另外,宙斯盾的核心能力是DDoS、CC防護(hù),除了管控上云,我們也正在探索防護(hù)能力虛擬化的可能性,為云上各種業(yè)務(wù)、場(chǎng)景提供靈活、彈性的防護(hù)能力。