解密BGP高防系統
0x00、BGP高防業務需求
1、業務需求描述
·有業務能付得起高昂的高防IP費用麼?
中國線上棋牌類遊戲從98年的聯眾遊戲、2003年的QQ遊戲,到2008年德州撲克、2009年的捕魚,在到2016年的閒徠遊戲,開拓了俗人線上棋牌遊戲的模式。遊戲行業掀起了腥風血雨的蔓延,到2017年6~7月期間全國大大小小的棋牌公司有上百家。
業務模式:熟人4個人可以通過手機打麻將,遊戲公司收取的是桌臺費,通過總代的方式拉攏客源進入棋牌遊戲群裡,假設一場麻將10幾分鐘,收取6塊錢桌臺費,那麼線下渠道拉客源可以給到4塊,通過病毒式的傳播後,省內Top棋牌類公司一天的營業額大約在10幾或者幾十萬不等。這樣競爭對手看到這麼暴力的營收都坐不住了,紛紛研發棋牌遊戲,但是一個省玩麻將的就這麼些人,自然的相互攻擊的現象時有發生,如果你的App伺服器訪問不了,大家都上其他家App玩了。
2、解決方案選擇
·為什麼要使用BGP高防?
遊戲公司有錢支付抗D的費用,那麼DDoS防禦的需求就發展起來了。那麼傳統的抗D解決方案能滿足需求麼?答案是不行的,因為棋牌遊戲的實時要求非常高,在高延時的情況下,會嚴重影響使用者體驗。所以需要,絕對好的線路,傳統的單線高防,在運營商之前切換延時無法滿足業務需求。
·為啥用3線BGP高防?
傳統的BGP高防機房,都是使用自建BGP機房資源做,這種IDC也只有騰訊會有,而且費用昂貴。大家都知道BGP線路都是優先給公有云IAAS服務的,拿來做高防太浪費了(BGP線路是普通單線的至少3倍以上價格),而且這種BGP線路,一般都也只有100G左右,不會有更大的頻寬。這種針對棋牌類的攻擊一般都在200G~300G左右,當時和閒徠聊過,他們業務高峰的時候攻擊量是平均500G~700G。這麼大的頻寬存BGP機房是無法承受的。
·CDN與三線BGP高防聯營
如果直接和運營商談這個機房只做高防機房,其實這是非常虧的,因為高防的流量很大,攻擊時間也不確定,那麼,如果我們使用CDN網路中的其中一個節點做高防機房,CDN使用出口頻寬,高防使用入口頻寬。這樣頻寬利用率會上升很多。如果按照出入向1:5的比例,80G CDN流量可以換400G入口流量。如果按照平均8元/Mbps.月, CDN的運營費用:160萬。如果你量用到了,其實高防是免費用的。當然,你要集中這個省的幾個節點,一般一個CDN節點按照20G規劃。
0x01、BGP高防架構
有了以上論證,我們有了三線BGP高防,那麼,下一步要做什麼呢?大家都知道高防切換是使用cname的方式做切換。其實如果你在遊戲終端安裝一個安全sdk,切換這就完全擺脫cname的方式,可以使用WebDNS切換。也就是阿里雲的遊戲盾模式。遊戲盾相關的介紹可以參考我以前的文章。本節主要是講我們三線BGP高防如何工作。
一、高防系統架構
二、轉發模組
·模組作用
轉發模組在整個高防系統中起到至關重要的作用,把使用者的真實IP隱藏到轉發系統後面,配合使用者通過cname方式切換現有業務系統到高防機房,同時把清洗後的正常流量轉發給真正的使用者業務系統。
·功能描述
轉發系統分為4層轉發和7層轉發,針對棋牌類App業務資料使用4層轉發,升級等系統使用7層轉發(一般都是掛在CDN上的一個url下載地址)
·原理
4層轉發
高防機房一般會分配幾個C段高防IP端,這些IP就是給轉發模組用的,我們假定它為IP1
realIP1是使用者業務源站IP地址
graph LR A[clientIP:TCP:2004] A--> |正常訪問| B[IP1:TCP:2004] B--> |4層轉發| C[realIP1:TCP:10000] C--> |4層轉發| D[使用者業務源站]
7層轉發
graph LR A[clientIP:TCP:80] A--> |正常訪問| B[IP1:TCP:80] B--> |4層轉發| C[realIP1:TCP:80] C--> |7層轉發| D[使用者業務源站]
·業務流程
1、使用者在控制檯建立高防IP,系統會在剩餘的高防IP列表中隨機選一個IP地址。
2、然後通知lvs系統建立pool,通過pool建立虛擬IP,然後建立對應member IP(回源IP)
3、設定完以上引數,需要等待使用者把我們產生的隨機域名設定到他們生產網站別名。
4、啟動BGP高防,藉助CDN的DNS系統,當聯通使用者,根據不同線路解析到對應的聯通高防機房,電信、移動也一樣。
5、不使用的時候可以切換到回源IP上。
返回VIP是否分配成功。
三、清洗系統
·模組組成
一般清洗模組要配合檢測模組配合使用,我們先把檢查模組使用NTA標識,清洗模組使用ADS標識。
檢查模組負責:需要統計各個高防IP對進入高防機房的流量,傳統檢測手段,例如綠盟的NTA使用netflow和交換機配合,主要是準確性差一些。建議還是使用大資料方式計算其流量(spark streaming 統計各種包的數量,聚合計算檢測),一旦出現流量超出通知核心交換丟棄目的IP所有流量。
清洗模組負責:需要在使用者購買的黑洞閾值內對攻擊流量做清洗。針對4層DDoS攻擊流量,比如:Syn Flood PPS達到8000的時候,啟動清洗,這就需要流量學習的技術。動態設定PPS。清洗模組是由叢集組成,單臺處理能力能達到40G,小包20G能力,一般一個高防機房需要400G,一個機架櫃搞定。針對7層的攻擊流量,要測量一下nginx伺服器大小,一臺伺服器http處理能力大約8萬QPS,4臺4層轉發lvs+8臺7層轉發nginx。兩個機架櫃。如果是https處理能力大約在7000~8000QPS,一般加SSL加速卡。提升其單臺伺服器處理能力。一個叢集處理7層流量大約60萬QPS,4層清洗能力大約400G。
·業務流程
1、分線路解析
2、流量檢測釋出黑洞路由=>對應套餐上限
3、經過4層流量清洗。
4、經過lvs+nginx做4/7層轉發CC清洗。
5、清洗完成後把乾淨資料轉發給使用者源站。
四、管控中臺
·功能
主要是完成使用者購買高防套餐,對高防IP的自動分配,設定DNS分線路解析。
同時要採集攻擊流量圖,連線數,攻擊告警,顯示給使用者。
五、排程系統
·網路狀況感知
主要是通過CDN撥測系統,瞭解目標使用者的網路狀況,通過延時和丟包率統計上來,作為排程系統決策手段,一般延時不能大於100ms,丟包率一般不要大於5%,BGP線路一般都是2%左右。監控準確性取決於CDN撥測點數和反饋資料準確性。後臺可以通過tsdb儲存。
·排程
一般通過手工排程,排程功能有:
@1、排程演算法,根據網路狀況感知模組決定,降級/升級排程(取決於機房的延時和丟包率定義升降),
@2、排程管理:排程首先要明確你的排程物件,針對哪個使用者,哪個線路進行排程。還是整個機房排程。如果整個機房由於特殊的原因無法使用,需要把這個機房所有使用者排程到其他可用機房,如果我們有單線機房,我們可以在BGP機房單個線路排程到相應的機房
@3、資產管理:管理我們現有的高防機房,管理我們高防機房中有高防IP資產。
@4、超賣率統計:高防如何想賺錢必須達到3~5倍的超賣率。超賣率=當前銷售的總頻寬/高防機房現有頻寬。
六、監控系統
·日常監控
主要監控高防機房所有的裝置監控狀態,例如:CPU、memory、DISK、network、process、socket。
·效能監控
需要了解4、7層效能。ip_port連線的pps,http連線的cps。
0x02、未來發展
BGP高防體系也在不斷的演變,運營商也看上了這塊市場,包括電信雲堤,聯通也在全國部署了相應的清洗服務。再加上運營商可以自己控制路由器,所有IP anycast也是有可能實現的。