前言:在最近的一週的時間裏,咱們的服務器遭受了大量的CC攻擊,下面就從最近收穫的經驗裏面,來說下具體的防禦策略和攻擊原理
首先關於防禦CC攻擊,首先咱們要知道什麼樣的攻擊定義爲CC攻擊,下面是百科的一些官方性解釋。mysql
CC(ChallengeCollapsar,挑戰黑洞)攻擊是DDoS攻擊的一種類型,使用代理服務器向受害服務器發送大量貌似合法的請求。CC根據其工具命名,攻擊者使用代理機制,利用衆多普遍可用的免費代理服務器發動DDoS攻擊。許多免費代理服務器支持匿名模式,這使追蹤變得很是困難。
CC攻擊的原理是攻擊者經過控制某些主機不停地發大量數據包給對方服務器形成服務器資源耗盡,一直到宕機崩潰。CC主要是用來攻擊頁面的,每一個人都有這樣的體驗:當一個網頁訪問的人數特別多的時候,打開網頁就慢了,CC就是模擬多個用戶(多少線程就是多少用戶)不停地進行訪問那些須要大量數據操做(就是須要大量CPU時間)的頁面,形成服務器資源的浪費,CPU長時間處於100%,永遠都有處理不完的鏈接直至就網絡擁塞,致使正常的訪問被停止。linux
那麼如何發動一場CC攻擊呢?成本有多低呢?nginx
最簡單的手段如莫過於使用Windows平臺下一些編號的現成CC攻擊器,只須要設置目標站點URL和線程數,便可快速進行發動一場CC攻擊。web
在linux或mac os平臺下,咱們可使用apache的壓力測試工具ab,也能夠簡單模擬CC攻擊的效果redis
ab -n 100000 -c 1000 http://www.baidu.com/
基本用法:ab –n 請求次數 –c 併發次數 如:ab –n 1000 –c 100 sql
-n後面的10000表明總共發出10000個請求;-c後面的1000表示採用1000個併發(模擬1000我的同時訪問),後面的網址表示測試的目標URL。數據庫
攻擊的方式有2種,有肉雞CC攻擊和代理CC攻擊,前者的成本更高,可是更容易模擬真實用戶,僞造合法數據請求,可是攻擊者須要控制大量的肉雞來發動攻擊,後者只須要單臺或多臺服務器,加上掃描出來的IP,經過工具代理,模擬不一樣IP瘋狂請求目標站點,形成目標站點訪問終端。apache
肉雞CC攻擊成本:不太好說,要根據肉雞數量規模來定,可是比代理CC攻擊更難防護。緩存
代理CC攻擊成本:能夠經過本身本身掃描,也能夠經過6元/天 30元/周的第三方代理提取站點,進行無限次的提取。服務器
打手攻擊成本:在一些第三方論壇上,第三方專業打手甚至經過了50 元/小時攻擊,每小時保底打出1G的流量。
根據上面的 總體狀況來看,發動一場CC攻擊的技術手段不只很是容易,並且攻擊成本最低只須要幾塊錢,就能達到讓目標站點進行癱瘓的效果,因此在這類攻擊的本質:即是雙方攻防資源的對抗,一方要不斷囤積大量資源具有超大流量輸出,一方要不斷建設可以抗住超大流量的帶寬,就像一場戰爭同樣,要實時對對方進行偵查和防護。
咱們能夠經過防火牆或者nginx server調整單個IP的限制鏈接數,及每分鐘最大請求次數,設置必定的閥值,動態調整,當某IP超過指定閥值後,進行攔截或黑名單處理,讓目標IP沒法到底應用層,影響正經常使用戶使用,在網絡層就進行屏蔽處理。
能夠將應用的新用戶和老用戶區分至不一樣的服務器羣,如新用戶每分鐘請求上限爲60s/分鐘,老用戶爲:45次/分鐘,如新用戶忽然暴漲,混入了大量肉雞註冊的帳號進行了攻擊,咱們則能夠將他們路由到另外一個服務器羣,致使老用戶所在的服務羣不受正常影響,而後找出異常的用戶進行封停和攔截處理。
在一些通用的業務接口上,可屢次重用的數據,能夠考慮使用redis或memcached基於內存的緩存服務,減小數據庫檢索次數,由於數據庫數據儲存仍是基於文件儲存的,一旦查詢起來就免不了對文件進行讀寫操做,內存訪問可比磁盤IO的速度但是要快上幾百倍的,一旦數據查詢和計算出結果後,儘可能就存放至緩存中,以便下次請求時,可直接經過緩存讀取,減輕DB服務器的壓力。
在一些關鍵的接口或核心代碼處,儘量使用緩存來存儲重複的查詢內容,減小重複的數據查詢資源開銷。減小複雜框架的調用,減小沒必要要的數據請求和處理邏輯。程序執行中,及時釋放資源,好比及時關閉mysql鏈接,及時關閉memcache鏈接等,減小空鏈接消耗。
通常正常接口下web server經過80端口對外提供服務,所以攻擊者通常也是針對目標站點的80端口進行攻擊,以此在不影響外部業務提供的狀況下,咱們能夠調整web端口,來達到防禦目的,可是通常此類策略,若是對方是個懂一些的,通常很快就會被再次發現,治標不治本。
在手頭資金預算足夠的狀況下,咱們能夠對服務器羣組進行水平和垂直擴充,來提升服務器對CC攻擊的承載能力。
水平擴充:升級服務器硬件,如:升級CPU、添加內存、添加SSD固態硬盤,擴充帶寬等。
垂直擴充:增長服務器數量來提高承載能力。
在計算機的攻與防的博弈中,做爲防護方的咱們,不要老是想着如何徹底去打敗另外一方,咱們應該嘗試去尋找最短的路徑,不要太過於拘泥沒必要要的細節,應該快速找到當下的痛點,快速的打上一針止痛劑,嘗試去增長對方的攻擊成本,消除對方的耐心,即是最佳的防護實踐。
以上內容若有疑問或看法錯誤之處,還請多多指教。