1. 什么是cc攻擊
攻擊者借助代理服務(wù)器生成指向受害主機(jī)的合法請求,實(shí)現(xiàn)DDOS和偽裝就叫:CC(Challenge Collapsar)。
主要是用來攻擊頁面的,是DDoS攻擊的一種類型,使用代理服務(wù)器向受害服務(wù)器發(fā)送大量貌似合法的請求
編輯
2.原理
CC攻擊的原理就是攻擊者控制某些主機(jī)不停地發(fā)大量數(shù)據(jù)包給對方服務(wù)器造成服務(wù)器資源耗盡,一直到宕機(jī)崩潰。
3. 怎么防御
1、服務(wù)器垂直擴(kuò)展和水平擴(kuò)容
資金允許的情況下,這是最簡單的一種方法,本質(zhì)上講,這個方法并不是針對CC攻擊的,而是提升服務(wù)本身處理并發(fā)的能力,但確實(shí)提升了對CC攻擊的承載能力。垂直擴(kuò)展:是指增加每臺服務(wù)器的硬件能力,如升級CPU、增加內(nèi)存、升級SSD固態(tài)硬盤等。水平擴(kuò)容:是指通過增加提供服務(wù)的服務(wù)器來提升承載力。上述擴(kuò)展和擴(kuò)容可以在服務(wù)的各個層級進(jìn)行,包括:應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器和緩存服務(wù)器等等。
2、數(shù)據(jù)緩存(內(nèi)存級別,不要用文件)
對于服務(wù)中具備高度共性,多用戶可重用,或單用戶多次可重用的數(shù)據(jù),一旦從數(shù)據(jù)庫中檢索出,或通過計算得出后,最好將其放在緩存中,后續(xù)請求均可直接從緩存中取得數(shù)據(jù),減輕數(shù)據(jù)庫的檢索壓力和應(yīng)用服務(wù)器的計算壓力,并且能夠快速返回結(jié)果并釋放進(jìn)程,從而也能緩解服務(wù)器的內(nèi)存壓力。要注意的是,緩存不要使用文件形式,可以使用redis、mem—cached等基于內(nèi)存的nosql緩存服務(wù),并且與應(yīng)用服務(wù)器分離,單獨(dú)部署在局域網(wǎng)內(nèi)。局域網(wǎng)內(nèi)的網(wǎng)絡(luò)IO肯定比起磁盤IO要高。為了不使局域網(wǎng)成為瓶頸,千兆網(wǎng)絡(luò)也是有必要的。
3、頁面靜態(tài)化
與數(shù)據(jù)緩存一樣,頁面數(shù)據(jù)本質(zhì)上也屬于數(shù)據(jù),常見的手段是生成靜態(tài)化的html頁面文件,利用客戶端瀏覽器的緩存功能或者服務(wù)端的緩存服務(wù),以及CDN節(jié)點(diǎn)的緩沖服務(wù),均可以降低服務(wù)器端的數(shù)據(jù)檢索和計算壓力,快速響應(yīng)結(jié)果并釋放連接進(jìn)程。
4、用戶級別的調(diào)用頻率限制
不管服務(wù)是有登陸態(tài)還是沒登陸態(tài),基于session等方式都可以為客戶端分配唯一的識別ID(后稱作SID),服務(wù)端可以將SID存到緩存中。當(dāng)客戶端請求服務(wù)時,如果沒有帶SID(cookie中或請求參數(shù)中等),則由服務(wù)端快速分配一個并返回??梢缘脑?,本次請求可以不返回數(shù)據(jù),或者將分配SID獨(dú)立出業(yè)務(wù)服務(wù)。當(dāng)客戶端請求時帶了合法SID(即SID能在服務(wù)端緩存中匹配到),便可以依據(jù)SID對客戶端進(jìn)行頻率限制。而對于SID非法的請求,則直接拒絕服務(wù)。相比根據(jù)IP進(jìn)行的頻率限制,根據(jù)SID的頻率限制更加精準(zhǔn)可控,可最大程度地避免誤殺情況。
5、IP限制
最后,IP限制依然可以結(jié)合上述規(guī)則一起使用,但是可以將其前置至)JCb層的防火墻或負(fù)載均衡器上去做,并且可以調(diào)大限制的閾值,防止惡意訪問穿透到應(yīng)用服務(wù)器上,造成應(yīng)用服務(wù)器壓力。
6、取消域名綁定
取消域名綁定后Web服務(wù)器的CPU能夠馬上恢復(fù)正常狀態(tài),通過IP進(jìn)行訪問連接一切正常。但是不足之處也很明顯,取消或者更改域名對于別人的訪問帶來了不便,另外,對于針對IP的CC攻擊它是無效的,就算更換域名攻擊者發(fā)現(xiàn)之后,攻擊者也會對新域名實(shí)施攻擊。
7、更改Web端口
一般情況下Web服務(wù)器通過80端口對外提供服務(wù),因此攻擊者實(shí)施攻擊就以默認(rèn)的80端口進(jìn)行攻擊,所以,可以修改Web端口達(dá)到防CC攻擊的目的。
8、nginx原生模塊
如果你的網(wǎng)站是使用的是Nginx做的反向代理,那么可以利用Nginx原生的limit_req模塊來針對請求進(jìn)行限制,(ngx_http_limit_req_module 模塊)
