前言
日常開發(fā)中有時會遇到業(yè)務(wù)接口被刷了,因此想做一篇相關(guān)的文章摘要整理。
基本概念
維基給出的定義:DDOS攻擊即denial-of-service attack 是一種爬蟲攻擊。
但是有的地方又喜歡把DDOS 作為一大類攻擊的總稱,其中爬蟲攻擊是很典型的一種,個人認為具體怎么叫沒有必要深究。
攻擊者通過這種方式讓一臺機器或網(wǎng)絡(luò)資源宕機不可用。當然攻擊者也有可能是通過大量的請求,獲取業(yè)務(wù)數(shù)據(jù),例如美團、攜程、大眾點評等的內(nèi)容數(shù)據(jù)。
通常攻擊者通過偽造成正常用戶,偽造UA、cookie等等,通過海量的ip代理服務(wù)器發(fā)起請求,較為嚴重的,會造成CPU滿、帶寬滿、內(nèi)存滿、連接數(shù)滿等等,進而影響到正常用戶的訪問請求。
建議閱讀阮大的DDOS 攻擊的防范教程,親身示范生動具體??
解決辦法
DDOS沒有絕對完善的解決辦法!
DDOS的攻防中,只能是雙方之間的較量硬碰硬,并沒有一招制勝的說法。閱讀了各類資料,大致整理了幾個要點
-
準備一個備份網(wǎng)站
在服務(wù)器下線了,最低限度通過這種頁面告訴用戶正在搶修中。這種臨時主頁建議放到 Github Pages 或者 Netlify,它們的帶寬大,可以應(yīng)對攻擊,而且都支持綁定域名,還能從源碼自動構(gòu)建。 -
web服務(wù)器攔截ip請求
非常消耗性能。假使黑客通過發(fā)動成千上萬的肉雞,在短時間內(nèi)發(fā)起海量訪問,這種做法就沒有用了。 -
借助SLB產(chǎn)品
參考了底部阿里云的文章,借助其SLB產(chǎn)品在web服務(wù)器前幫助過濾請求。關(guān)鍵詞:清洗、黑洞。進行攻擊報文過濾、流量限速、包限速甚至為保護整個集群的安全所有入流量丟棄處理。具體做法移步相應(yīng)的產(chǎn)品說明書。 -
架設(shè)硬件防火墻
在web服務(wù)器前架設(shè)防火墻專門過濾請求,但這種價格也昂貴。
類似的 -
帶寬擴容
當遭到攻擊,短時間內(nèi)急劇擴容,提供幾倍或幾十倍的帶寬,頂住大流量的請求。為什么云服務(wù)商可以提供防護產(chǎn)品,因為他們有大量冗余帶寬,可以用來消化 DDOS 攻擊。 -
CDN
CDN指的是網(wǎng)站的靜態(tài)內(nèi)容分發(fā)到多個服務(wù)器,用戶就近訪問,提高速度。因此,CDN 也是帶寬擴容的一種方法,可以用來防御 DDOS 攻擊。
網(wǎng)站內(nèi)容存放在源服務(wù)器,CDN 上面是內(nèi)容的緩存。用戶只允許訪問 CDN,如果內(nèi)容不在 CDN 上,CDN 再向源服務(wù)器發(fā)出請求。這樣的話,只要 CDN 夠大,就可以抵御很大的攻擊。不過,這種方法有一個前提,網(wǎng)站的大部分內(nèi)容必須可以靜態(tài)緩存。對于動態(tài)內(nèi)容為主的網(wǎng)站(比如論壇),就要想別的辦法,盡量減少用戶對動態(tài)數(shù)據(jù)的請求。 -
鏡像服務(wù)器
本質(zhì)也就是自己搭建一個微型 CDN。各大云服務(wù)商提供的高防 IP,背后也是這樣做的:網(wǎng)站域名指向高防 IP,它提供一個緩沖層,清洗流量,并對源服務(wù)器的內(nèi)容進行緩存。
這里有一個關(guān)鍵點,一旦上了 CDN,千萬不要泄露源服務(wù)器的 IP 地址,否則攻擊者可以繞過 CDN 直接攻擊源服務(wù)器。阮大也遇到了繞過直接被攻擊源服務(wù)器的情況,最后他買了彈性 IP ,可以動態(tài)掛載主機實例,受到攻擊就換一個地址。
等等還有很多。一些防的越徹底的算法,也會增加正常業(yè)務(wù)數(shù)據(jù)丟失的風險,當然這是難以避免的。
有效的DDoS防護機制應(yīng)該包含以下六個步驟
- 提前能檢測到攻擊,并啟動相應(yīng)的減緩攻擊措施
- 當攻擊上升到一個等級沒有被成功阻止下來,立刻通知相應(yīng)的處理團隊
- 核實攻擊的確是在發(fā)生,分析,提供解決方案在必要時云端遷移
- 將遷移信號發(fā)送給云端,同時帶上這次攻擊的詳細細節(jié)
- 云端開始轉(zhuǎn)移并清洗請求數(shù)據(jù),通常是借助 Border Gateway Protocol (BGP) or the Domain Name System (DNS)
- 當攻擊結(jié)束,When the attack is over, traffic is restored to its normal path through the ISP.
先前提到的解決方案應(yīng)該歸納到第一點的減緩攻擊措施里。如果還是沒有攔截下來,可以按照這個流程去處理,至少在第一時間可以保持服務(wù)正常(當然是用備用的網(wǎng)頁也是個好的方案,但這個更加成熟)
心得
就像開篇講的一樣,DDOS攻擊并沒有最好的根治之法,做不到徹底防御,只能采取各種手段在一定程度上減緩攻擊傷害。所以平時服務(wù)器的運維工作還是要做好基本的保障,將DDOS攻擊帶來的損失盡量降低到最小。
參考
阮一峰的DDOS 攻擊的防范教程
聊一聊負載均衡SLB的DDoS防護
How to Defend Against DDoS Attacks: Six Steps