Discuz:防御CC攻擊說明
CC 攻擊的前身是 DDOS 攻擊(分布式拒絕攻擊)。 DDOS 攻擊的原理針對 TCP/IP 協議的缺陷,也不能算是缺陷,只是當時設計該協議時是在幾十年前,設計者假定大家都是遵守游戲規則的良好公民,現在互聯網環境比當時要復雜得多,但是仍在使用以前的協議,所以才會帶來某些問題。兩臺機器通信要進行一個所謂的三次握手,首先是客戶機發出一個請求 (SYN) ,服務器收到該請求后,填寫會話信息表 (TCB,保存在內存中),并且向客戶機反饋一個回應包 (SYN-ACK) ,此時連接處于 TIME_WAIT 狀態,如果最終沒有收到客戶機的 ACK 信息包,會嘗試隔一段時間再發送一次回應包 SYN-ACK,這樣經過多次重試后,客戶機還沒有回應的話,服務器才會關閉會話,并從 TCB 中刪除掉該會話。這個等待過程大約為 30 秒。當攻擊者同時發起十萬計的請求時 (SYN) 到服務器開放的端口,并且本身拒絕發送 SYN-ACK 回應時,服務器的的 TCB 將會很快超過負荷,并且攻擊者可以偽造包中的源 IP 地址,這樣攻擊者還不會被服務器返回的包堵住。可以看出這是 TCP/IP 協議中一個相當嚴重的問題。通過防火墻策略審核過濾數據包,可以從一定程度上防止 DDOS 攻擊。
CC 攻擊跟 DDOS 攻擊本質上是一樣的,都是以消耗服務器資源為目的,目前看來,它主要針對 WEB 應用程序比較消耗資源的地方進行瘋狂請求,比如,論壇中的搜索功能,如果不加以限制,任由人搜索,普通配置的服務器在幾百個并發請求下,MYSQL 服務就掛掉了。
CC攻擊的種類有三種,直接攻擊,代理攻擊,僵尸網絡攻擊,直接攻擊主要針對有重要缺陷的 WEB 應用程序,一般說來是程序寫的有問題的時候才會出現這種情況,比較少見。僵尸網絡攻擊有點類似于 DDOS 攻擊了,從 WEB 應用程序層面上已經無法防御,所以這兩種情況我們不進行深入的探討,這里要主要討論第二種,代理攻擊,CC 攻擊者一般會操作一批代理服務器,比方說 100 個代理,然后每個代理同時發出 10 個請求,這樣 WEB 服務器同時收到 1000 個并發請求的,并且在發出請求后,立刻斷掉與代理的連接,避免代理返回的數據將本身的帶寬堵死,而不能發動再次請求,這時 WEB 服務器會將響應這些請求的進程進行隊列,數據庫服務器也同樣如此,這樣一來,正常請求將會被排在很后被處理,就象本來你去食堂吃飯時,一般只有不到十個人在排隊,今天前面卻插了一千個人,那么輪到你的機會就很小很小了,這時就出現頁面打開極其緩慢或者白屏。
防御 CC 攻擊
Discuz!5.5 在以往抗 CC 的基礎上又加了兩種方法,可以根據實際遭受攻擊的情況,通過配置組合出適合的抵抗方法。限于篇幅,不詳細闡述對抗原理,現將配置方法做下簡要說明。
配置文件 config.inc.php
$attackevasive = 0; // 論壇防御級別,可防止大量的非正常請求造成的拒絕服務攻擊 |
正常情況下設置為 0,在遭到攻擊時,分析其攻擊手法和規律,組合使用。可以嘗試先設置為 2, 2|4, 1|2|4|, 1|2|4|8, 如果 1|2|4|8 還不行,我們認為應用程序層面上已經抵擋不住,可能主機遭受的攻擊來自于僵尸網絡的 DDOS 攻擊了,我們建議您從防火墻策略上入手。
【編輯推薦】