最近3天羹唠,我的小站godbmw.com經(jīng)歷了2次DDoS。第一次因?yàn)闆]有限制QPS健田,短短幾分鐘內(nèi)CDN被盜刷了300G流量烛卧。第二次完善了相關(guān)保護(hù)措施后,CDN依然被D了90G的流量妓局。經(jīng)過2天的遷移和補(bǔ)救总放,終于使得網(wǎng)站服務(wù)恢復(fù)正常。用此篇記錄下整個(gè)奮戰(zhàn)過程好爬。希望對廣大站長有幫助局雄。
- 圖片無法正常加載的朋友請移步:被DDos后的及時(shí)補(bǔ)救與一些思考:原文地址
- 歡迎來小站看更多干貨 + 免費(fèi)教程:godbmw.com
- 由于最近經(jīng)常被DDoS,所以不是很穩(wěn)定存炮,請見諒??
1. 來自歪果仁的惡意
1.1 遭遇DDoS
我的CDN部署在騰訊云炬搭,10月2日接收到短信提醒:CDN流量已用完。登陸控制臺后發(fā)現(xiàn)穆桂,被盜刷了360G宫盔,寬帶峰值也到達(dá)了難以想象的680Mbps。這對于一個(gè)個(gè)人網(wǎng)站來說充尉,幾乎是不可能的流量。
[圖片上傳失敗...(image-8dd2c2-1541564666217)]
抱著懷疑的態(tài)度衣形,我查看了區(qū)域商分布驼侠,果然,海外的請求占了總請求的98.24%谆吴。其中300多G的流量都來自海外倒源,現(xiàn)在可以確定是歪果仁盜刷了我的CDN流量。
[圖片上傳失敗...(image-b61d87-1541564666217)]
沒有辦法句狼,被迫聯(lián)系工單笋熬,但因?yàn)槲易约旱囊恍┓烙鶝]做好,所以這次的補(bǔ)償不了了之腻菇。無奈胳螟,只能出錢補(bǔ)上了被盜刷的流量,以保證服務(wù)正常使用筹吐。并且在工單的交流中糖耸,增設(shè)了QPS等安全措施。
毫無疑問丘薛,限制QPS會影響用戶的正常使用嘉竟,造成延遲。但保險(xiǎn)起見,我還是設(shè)置了QPS舍扰,只希望不要再被攻擊倦蚪。
1.2 再次遭遇
但好景不長,僅安穩(wěn)度過了一天边苹,又一波來自海外的DDoS讓我不得不臨時(shí)關(guān)閉CDN和COS服務(wù)陵且。下圖中第一個(gè)峰值是上一次DDoS,第二個(gè)峰值是這次的DDoS勾给。
[圖片上傳失敗...(image-46e04e-1541564666217)]
這次的攻擊更高級滩报,頗有一種“道高一尺,魔高一丈”的味道播急。因?yàn)橹皯?yīng)增設(shè)了QPS等限制脓钾,但這樣完全限制不了IP代理池等攻擊手段,黑客這次也選擇了體積較大的單文件進(jìn)行攻擊桩警。
[圖片上傳失敗...(image-a29f0b-1541564666217)]
我慣例去找了工單可训,因?yàn)樯洗悟v訊云的工程師專門call過來:只要增設(shè)了相關(guān)安全限制,下次確認(rèn)是盜刷立即給予補(bǔ)償捶枢。然而這次工單依然是打太極握截,各種文檔、規(guī)則扔給我烂叔,閉口不談補(bǔ)償問題谨胞,并且說是我的QPS設(shè)置太高了:)。
問題是:QPS設(shè)置成5蒜鸡,項(xiàng)目還用不用了胯努?如果用戶處于同一個(gè)局域網(wǎng)下(校內(nèi)網(wǎng)、Wifi等場景)逢防,那在同一秒中只有一個(gè)用戶可以正常使用叶沛?
最后,工程師還是call過來忘朝,經(jīng)過了1小時(shí)的聊天灰署,可以補(bǔ)償,但是要等一段時(shí)間才能批下來這90G的流量包局嘁。
1.3 無路可走
經(jīng)歷了2次DDoS溉箕,我設(shè)置了“寬帶封頂配置“。根據(jù)平日的使用量悦昵,我估計(jì)“3Mbps”约巷,并且在超值的時(shí)候,返回404旱捧,關(guān)停服務(wù)独郎。
[圖片上傳失敗...(image-7518bb-1541564666217)]
當(dāng)日晚踩麦,就接收到了CDN到達(dá)寬帶封頂?shù)亩绦牛詣雨P(guān)停了CDN服務(wù):項(xiàng)目也無法正常使用了氓癌。
這次谓谦,徹底是絕望了,只能先關(guān)閉CDN服務(wù)贪婉,尋求別的解決方法反粥。
2. 坎坷的補(bǔ)救措施
在補(bǔ)救的時(shí)候,首先排除了工單的意見:回源到原站或者COS(對象存儲服務(wù))疲迂。前者會直接造成服務(wù)器癱瘓才顿,DDoS是結(jié)結(jié)實(shí)實(shí)打在服務(wù)器上;后者COS也是流量或者寬帶后收費(fèi)尤蒿,本質(zhì)上和CDN沒區(qū)別郑气。
所以,關(guān)閉當(dāng)前的CDN加速域名腰池,并且清空了COS中的文件尾组。然后針對個(gè)人網(wǎng)站和項(xiàng)目應(yīng)用做了不同的處理。
2.1 公司項(xiàng)目:更改CDN域名
觀察被盜刷的資源示弓,全部都是個(gè)人網(wǎng)站的靜態(tài)資源讳侨。而公司項(xiàng)目只有合作的商戶在使用,并且在robots.txt
中禁止了爬蟲奏属,所以用利用另一個(gè)賬號開啟了一個(gè)新的COS并且開啟了對應(yīng)的CDN加速域名跨跨。
至于為什么個(gè)人網(wǎng)站和公司項(xiàng)目要放在一起,只是因?yàn)榉奖闵蟼骱凸芾泶衙螅F(xiàn)在看來省事一步勇婴,后患無窮。
2.2 個(gè)人網(wǎng)站:Git平臺
借助免費(fèi)的Git平臺铆帽,可以存放圖片咆耿、代碼等數(shù)據(jù)德谅,并且可以在外部訪問到爹橱。考慮到國內(nèi)用戶居多窄做,所以我將友鏈界面的圖片和文章中的圖片存放到了Coding.net的公有倉庫中愧驱。
例如下面這種圖片的地址就是:https://qcloud.coding.net/u/godbmw/p/blog/git/raw/master/markdown-static/網(wǎng)站搭建與運(yùn)營/第一次遭遇云服務(wù)器完全崩潰/1.png
[圖片上傳失敗...(image-9af74a-1541564666217)]
當(dāng)當(dāng)我把代碼放在Coding或者github上時(shí),雖然可以請求到代碼的內(nèi)容椭盏,但是Response Header
中的Content-Type
字段的值是: text/plain; ...
组砚。對于CSS樣式文件,瀏覽器無法自動解析掏颊。因此糟红,打包后的js艾帐、css等項(xiàng)目文件不能放在Git平臺。
2.3 免費(fèi)CDN:CloudFlare
這是全球最大的免費(fèi)的CDN盆偿,并且國內(nèi)也可以訪問柒爸。ping值穩(wěn)定在100ms左右,具體可以去查看相關(guān)測試文章事扭。除此之外捎稚,cloudflare可以抗下DDoS、CC等攻擊求橄,聽說百度抗不下來海外的DDoS的時(shí)候今野,也是DNS解析到cloudflare進(jìn)行處理。
cloudflare的操作很簡單罐农,首次注冊按照它的指導(dǎo)到域名注冊上修改DNS解析即可条霜。如果是國外的域名注冊商,幾分鐘就可以同步啃匿。國內(nèi)的并沒有嘗試蛔外。如果成功了,CONSOLE頁面就會顯示“Active”溯乒。
[圖片上傳失敗...(image-37f38c-1541564666217)]
剩下要做的就是把打包好的項(xiàng)目文件上傳到服務(wù)器夹厌,IP隱藏、緩存裆悄、CDN等cloudflare都會幫你做好矛纹。不暴露服務(wù)器ip地址,自然就是安全的9饧凇;蚰稀!
到此艾君,個(gè)人網(wǎng)站就可以正常訪問了采够。
3. 一些思考
如果是個(gè)人項(xiàng)目,強(qiáng)烈推薦使用國外的“cloudflare”冰垄,免費(fèi)蹬癌、不限流量、抗攻擊虹茶,就像國外的JetBrians(教育版免費(fèi))逝薪,都是有情懷的公司,致敬:铩6谩!