先說(shuō)網(wǎng)站的狀態(tài),BT面板,NGINX php,然后是用了cloudflare的才cnd.。表現(xiàn)癥狀,就是cpu滿載,然后負(fù)載也是滿的,就這下面兩個(gè)圖,然后訪問(wèn)很慢,還會(huì)出現(xiàn)404錯(cuò)誤。
看到這個(gè)癥狀可不行啊,本屌像呵護(hù)孩子一樣的站點(diǎn)一下子壞了可不行啊,馬上找原因,要么是服務(wù)器被人黑了占用服務(wù)器資源干些挖礦的勾當(dāng),要么就是網(wǎng)站被攻擊了,然后我就去把網(wǎng)站先關(guān)閉,cpu立刻使用率就下來(lái)了,毫無(wú)疑問(wèn)問(wèn)題就出在了網(wǎng)站層面,我再看看連接管理(這讓我走了很大的彎路)。

因?yàn)槲矣昧薱loudflare的才cnd,所以跟你網(wǎng)站本身連接的是cloudflare的IP(之前我是不知道的),看到都是那幾個(gè)IP在連接,而且一查還是美國(guó)的IP,錯(cuò)誤的認(rèn)為就是這幾個(gè)IP的大量請(qǐng)求,我就去把這幾個(gè)IP段給屏蔽掉,結(jié)果就是502錯(cuò)誤。一開(kāi)始我以為是CND那邊需要緩存我的頁(yè)面所以才會(huì)大量鏈接網(wǎng)站(這一錯(cuò)誤的以為讓我耽誤很久,我想著緩存總是需要時(shí)間的,那會(huì)剛好是中午,就查了下美國(guó)的時(shí)間正好是半夜,想想也合理,人家半夜給你緩存呀)。后面等了很久,也沒(méi)見(jiàn)好轉(zhuǎn),就感覺(jué)不對(duì)了。
認(rèn)識(shí)到這一點(diǎn)后,我就去cloudflare的cdn去掉,DNS解析是要時(shí)間的不是,這里有浪費(fèi)了很多時(shí)間,CND去掉了后,癥狀依然存在,可見(jiàn)這次的攻擊是基于網(wǎng)址的而不是IP地址,再去查看鏈接管理,就是下圖(這是正常后的截圖,攻擊的時(shí)候誰(shuí)還有空截圖),框框里會(huì)有大量的IP 進(jìn)程在等待,造成網(wǎng)站崩潰。
把這些IP都查了下,大部分是國(guó)外的IP,現(xiàn)在攻擊手段就明了了,用大量IP去請(qǐng)求網(wǎng)站內(nèi)容,造成擁堵,正常訪問(wèn)發(fā)生錯(cuò)誤?,F(xiàn)在解決辦法就是怎么把這些IP給屏蔽掉,開(kāi)始笨到一個(gè)個(gè)去屏蔽,太多了,而且都不是一個(gè)IP段的,這樣弄肯定會(huì)累死還解決不了。
后面一下既然大部分都是國(guó)外的,那就把國(guó)外的IP都屏蔽掉,然后網(wǎng)上找啊找方法,解決辦法就是在服務(wù)器上的防火墻給國(guó)內(nèi)IP加白名單,然后禁止所有80端口,后面也確實(shí)實(shí)現(xiàn)了,下圖是實(shí)現(xiàn)后的防火墻狀態(tài)。
到這里呢,我再看了下cup使用率,確實(shí)下降了很多,這一招確實(shí)很有效,CPU使用率下降到了30%,在我以為問(wèn)題解決之后,我就去研究cloudflare,然后發(fā)現(xiàn)里面有個(gè)防火墻很容易就達(dá)到屏蔽或者放行某一國(guó)家的IP,設(shè)置好規(guī)則(這里也告訴大家少走點(diǎn)彎路)。
到這里我就想了,創(chuàng)建防火墻規(guī)則容易呀,但是要知道了解了攻擊者的特征,才好添加規(guī)則不是,不然要么達(dá)不到效果要么造成誤殺。那會(huì)我也是這么想的,那怎么才能知道攻擊特征呢,答案就是日志,日志是這篇文的重點(diǎn),就是因?yàn)闆](méi)有看日志的習(xí)慣,可以這么說(shuō),上述的經(jīng)歷、解決辦法都是彎路。
我查看到當(dāng)天的訪問(wèn)日志后,不看不知道,一看就知道問(wèn)題在哪,有大量的不同IP請(qǐng)求同一個(gè)頁(yè)面,并且referer都是同一個(gè)值,關(guān)于這個(gè)網(wǎng)站,我也去看了是個(gè)游戲輔助的,想不通干嘛要攻擊我,我網(wǎng)站又沒(méi)用戶數(shù)據(jù),攻擊了也導(dǎo)不了流,難道只是在我后臺(tái)留下網(wǎng)址讓我去看看,好吧這個(gè)目的你達(dá)到了,還有比較小的可能就是他也是受害者。
既然你有這種特征那就比較好辦了,就又網(wǎng)上搜辦法了,就是下面的代碼了,
在nginx.conf的server配置項(xiàng)中加入
if ($http_referer ~* "www.xxx.com") {
return 403;
}
然后給加上了,阿里云服務(wù)器的cpu終于正常了,就像第一張圖那樣的,今天我再去看日志,發(fā)現(xiàn)還在攻擊,不過(guò)現(xiàn)在都被403了。其實(shí)對(duì)于這次攻擊,有上面一句話就夠了,之前弄得防火墻都是不需要的,但是既然都設(shè)置了,本身網(wǎng)站也不需要國(guó)外的流量,就干脆留著了。
最后想說(shuō)說(shuō)的是,這次的攻擊八成是某個(gè)攻擊軟件,設(shè)定特定攻擊對(duì)象,然后改寫referer,所以才會(huì)這么有特征,要是厲害點(diǎn)的估計(jì)就會(huì)變寫參數(shù),讓防攻擊工作更難。這次的經(jīng)歷讓我白白浪費(fèi)了一個(gè)周末,一是攻擊者的可惡,二也是自己沒(méi)有經(jīng)驗(yàn),走了好多彎路,浪費(fèi)時(shí)間。也告誡大家出了問(wèn)題一定要先看日志,看日志,看日志!
