10月1日下午,discuz論壇一臺(tái)服務(wù)器(server4)開(kāi)始出現(xiàn)異常的高負(fù)載情況。首先是自動(dòng)觸發(fā)了自動(dòng)擴(kuò)容機(jī)制,增加了新服務(wù)器進(jìn)來(lái)分擔(dān)壓力,保障了服務(wù)的持續(xù)可用,給問(wèn)題解決爭(zhēng)取了時(shí)間窗口。
隨后手機(jī)收到告警短信,登錄騰訊云控制臺(tái),首先排除了DDOS,因?yàn)橥饩W(wǎng)入帶寬和出帶寬都正常。異常的是內(nèi)網(wǎng)出帶寬和入帶寬。難道有內(nèi)網(wǎng)的服務(wù)器發(fā)起攻擊?
登錄到服務(wù)器上來(lái)看,top沒(méi)有看出什么異常,沒(méi)有特別高的進(jìn)程,php-fpm進(jìn)程確實(shí)多了一些,每個(gè)進(jìn)程的cpu時(shí)間也確實(shí)長(zhǎng)了一些,但是也不說(shuō)明什么問(wèn)題??碼ccess_log也沒(méi)有看到ip聚集的請(qǐng)求。
懷疑服務(wù)器本身有異常,把服務(wù)器重啟了一下,問(wèn)題沒(méi)解決。
把出現(xiàn)問(wèn)題的服務(wù)器(server4)從負(fù)載均衡中踢出,問(wèn)題立刻消失。加回到負(fù)載均衡集群中,問(wèn)題沒(méi)有再出現(xiàn)了。
隨后發(fā)現(xiàn),另一臺(tái)原來(lái)沒(méi)有問(wèn)題的服務(wù)器(server1)現(xiàn)在變成高負(fù)載了。一樣從負(fù)載均衡中踢出來(lái)再加回去,這下兩臺(tái)都高負(fù)載了。
沒(méi)有什么頭緒,只好繼續(xù)分析access_log。這次看出來(lái)問(wèn)題了。
有一批來(lái)自世界各地的肉雞(也可能是偽造的ip)在根據(jù)用戶(hù)ID一個(gè)一個(gè)的訪(fǎng)問(wèn)用戶(hù)資料。這些ip都來(lái)自哪里的呢?
所以問(wèn)題很清晰了,這是一個(gè)CC攻擊,并且攻擊ip是分散的,不能通過(guò)封ip來(lái)化解。
攻擊者借助代理服務(wù)器生成指向受害主機(jī)的合法請(qǐng)求,實(shí)現(xiàn)DDOS和偽裝就叫:CC(ChallengeCollapsar)。
對(duì)于CC攻擊,discuz是有對(duì)應(yīng)的設(shè)計(jì)的,可以在config_global.php中配置,不過(guò)對(duì)抗手段都會(huì)或多或少的影響到正常訪(fǎng)問(wèn)。針對(duì)這次攻擊我啟用了 $_config['security']['attackevasive']=4
也就是要求每個(gè)用戶(hù)第一次訪(fǎng)問(wèn)的時(shí)候都要看一個(gè)2秒的等候頁(yè)面,然后自動(dòng)進(jìn)入原來(lái)的訪(fǎng)問(wèn)地址,這是目前對(duì)于用戶(hù)訪(fǎng)問(wèn)體驗(yàn)傷害最小的方式(用戶(hù)什么都不用做,只要第一次等2秒就一切正常了)。如果CC攻擊沒(méi)有繼續(xù)升級(jí)對(duì)抗這個(gè)策略的話(huà),這次攻擊應(yīng)該就到此為止了。
稍晚的時(shí)候服務(wù)器CPU又滿(mǎn)了,對(duì)方使用了使用了更多的肉雞,大量代理IP涌入了服務(wù)器,導(dǎo)致論壇再次無(wú)法打開(kāi),怎么辦呢?
只能購(gòu)買(mǎi)防火墻了,買(mǎi)騰訊云防火墻的話(huà)不現(xiàn)實(shí),價(jià)格太貴,一個(gè)論壇,又不盈利沒(méi)必要。再三思考下,只有用百度云加速了,百度云加速是百度與國(guó)外知名DDOS防護(hù)廠CloudFlare合作的一款集成網(wǎng)站加速、安全防護(hù)的產(chǎn)品,價(jià)格還算符合大眾,官方最便宜的版本也就2490元/年,我是直接找他們代理主機(jī)吧購(gòu)買(mǎi),價(jià)格便宜將近一半。
接入后直接啟用強(qiáng)力防護(hù)模式,
觀察將近1小時(shí)左右,終于徹底解決了!
?