掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
俗話說“人怕出名豬怕壯”,今天我要分享的這個問題其實是源于很久以來的問題淵源,可能很多人都在某個地方看到我們說曾經(jīng)運營了日IP過萬的網(wǎng)站。對,就是那個網(wǎng)站才有了今天問題的出現(xiàn)。為什么這樣說呢,因為當初的時候就有某些喪盡天良的人為了達到某種目的對我們發(fā)起流量攻擊,造成正常用戶無法訪問。誰知道好多年了只要是以我身份注冊的域名上線的網(wǎng)站,就會“享受”同樣的待遇,之前我還沒在意,而就在最近我發(fā)現(xiàn)訪問微構(gòu)網(wǎng)絡(luò)非常慢,原來發(fā)現(xiàn)微構(gòu)網(wǎng)絡(luò)中引用的一個資源在那臺服務(wù)器上,結(jié)果就排查了那臺服務(wù)器。
那臺服務(wù)器為阿里云云服務(wù)器,就放了幾個平常流量不大的網(wǎng)站,雖然配置只有1核+1GB內(nèi)存+30GB硬盤+2MB帶寬(獨享獨立IP),但我想給那幾個網(wǎng)站用書足夠了,這樣的配置正常情況下承受2000日ip的訪問量是幾乎沒有問題,但那幾個網(wǎng)站還沒達到這個量。于是我在阿里云后臺看了一下,比如最近24小時的統(tǒng)計,CPU是正常的,唯獨帶寬幾乎沒沾滿。
然后我個人名下的兩個網(wǎng)站的CNZZ統(tǒng)計數(shù)據(jù),看了我就驚呆了。這里要感謝那個攻擊者讓我的這個網(wǎng)站重新回到曾經(jīng)的“輝煌”——日UV(獨立訪客)過萬,當然玩笑歸玩笑,這樣的數(shù)據(jù)一看就是不正常的。
很明顯這里UV和IP的值相差太大了,而且PV與IP或者UV的比值也太小了,一般情況下會是3左右,而如果用戶粘度高的網(wǎng)站可能這個比值會更大,如果真的一個網(wǎng)站的真實數(shù)據(jù)是這樣子,那就算有流量也是挺失敗的。我們來看下流量訪問明細,下面截取其中的某一小段的:
大家想一想,如果是你正常訪問一個網(wǎng)站,你會不斷重復(fù)刷新十幾次甚至幾十次網(wǎng)站的首頁么,也就是說上圖中的這個IP對應(yīng)的訪客肯定不是一個人,而是一個由程序控制的“機器”,而且我發(fā)現(xiàn)其中有不同的這樣的IP來訪問。顯然,這里的一切是由攻擊者造成的,而且是切換不同的IP來進行的。
看到這里的問題我們似乎變得無能為力了,針對這個問題我也提交了工單到阿里云去,對方售后工程師的回復(fù)是:“請控制網(wǎng)站的訪問,禁止異常IP”,我的天,他這個回答是做著說話不腰疼呀。我一個網(wǎng)站要在運行,我是要給我的正常用戶看的,否則直接關(guān)閉不就得了;怎么來禁止IP,人家的IP是幾百上千甚至更多,而且不斷有新的IP出現(xiàn),也毫無規(guī)律,這怎么屏蔽。
就在這個時候我?guī)缀醪铧c要把網(wǎng)站關(guān)閉算了,但我在CNZZ后臺發(fā)現(xiàn)了一個細節(jié),后面在日志中也發(fā)現(xiàn)了。那就是:攻擊者使用的軟件中內(nèi)嵌的瀏覽器為IE6版本瀏覽器,而且一般的這種軟件只內(nèi)置了一種瀏覽器;再者這個攻擊者肯定是使用別人做的軟件,也就是他不太可能可以修改這個軟件。請注意這里有幾個非常重要的關(guān)鍵詞:IE6、一個版本的瀏覽器、攻擊者幾乎不能修改。而就是這幾個關(guān)鍵詞可以說成了問題解決的關(guān)鍵了。
于是我就有了一個不是太完美的想法:禁止IE6訪問!實際上如果順利,我覺得從某種角度來說這是一個完美的方案,因為我的網(wǎng)站IE6的正常訪客幾乎沒有,就算其他的網(wǎng)站也沒太多,很多網(wǎng)站都放棄了對IE6的兼容了。但問題是怎么解決呢?
很多人可能想到的是HTML的if 語句或者JS之類的,我承認我也首先想到的是這兩種方式,而且也用了,結(jié)果肯定是不行的,為什么?因為這都是客戶端的東西,也就是說客戶已經(jīng)把資源給取到了,我們服務(wù)器上的資源還是在消耗著。
所謂失敗是成功他媽,客戶端控制不行(其實想到這個問題的時候我都覺得自己傻逼了),那我是不是可以從服務(wù)器端進行控制呢?我可以通過服務(wù)器端來判斷訪問設(shè)備的UA,也就是需要用到HTTP_USER_AGENT(百度百科),我的服務(wù)用的WEB服務(wù)器是Apache,于是乎就在.htaccess中加上了下面的代碼:
RewriteCond %{HTTP_USER_AGENT} ^.*MSIE\s6.*$ [NC]
RewriteRule ^.* – [F,L]
當然實際上可以根據(jù)這個方式我們可以禁止更多的類型,當然那也就意味著影響“合法”的用這些設(shè)備訪問你網(wǎng)站的用戶。因此這確實不是太完美,好在這些軟件幾乎都是內(nèi)嵌了IE6。到這里,我們發(fā)現(xiàn)帶寬占用明顯開始下降了:
正所謂“道高一尺魔高一丈”,這里攻擊者是用的IE6,而且我們也愿意放棄IE6,因此問題解決似乎比較順利。但是如果攻擊者使用的是隨機版本的瀏覽器的軟件來攻擊,或者說有眾多的攻擊者,那樣的問題我想除了讓服務(wù)器的資源更充足外幾乎無解了。
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流