CC攻擊防御方法
廣告:
1. 利用Session做訪問計數器:利用Session針對每個IP做頁面訪問計數器或文件下載計數器,防止用戶對某個頁面頻繁刷新導致數據庫頻繁讀取或頻繁下載某個文件而產生大額流量。(文件下載不要直接使用下載地址,才能在服務端代碼中做CC攻擊的過濾處理)
2. 判斷user_agent:
以Nginx為例,當發現網站異常,CPU、內存、數據庫等性能飆升時,先看看網站的訪問日志:
cat /var/log/nginx/access.log | grep "verifying pingback from" > pingback_attack.log
一旦發現有大量此類日志,毫無疑問,你中招了。
看到這,您或許已經在默默祈禱:這種事千萬別發生在我這才好。其實也不用過于憂慮,雖然這種變種的攻擊乍一看來勢洶洶,悄悄告訴你:它也有一個致命弱點,那就是從肉雞發過來的攻擊請求有部分特征是固定的、并且不能被攻擊者偽造的。
這個東西就是User-Agent.它是一個特殊字符串頭,使得服務器能夠識別客戶使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。而這種pingbck反彈攻擊的致命弱點就是請求中的User-Agent必然包含pingback等關鍵詞。這是由WordPress本身決定的,惡意利用者也不能進行偽造篡改。
if ($http_user_agent ~ (WordPress|pingback) {return 403;}
2. 把網站做成靜態頁面:大量事實證明,把網站盡可能做成靜態頁面,不僅能大大提高抗攻擊能力,而且還給駭客入侵帶來不少麻煩,至少到現在為止關于HTML的溢出還沒出現,看看吧!新浪、搜狐、網易等門戶網站主要都是靜態頁面,若你非需要動態腳本調用,那就把它弄到另外一臺單獨主機去,免的遭受攻擊時連累主服務器。
3. 增強操作系統的TCP/IP棧
Win2000和Win2003作為服務器操作系統,本身就具備一定的抵抗DDOS攻擊的能力,只是默認狀態下沒有開啟而已,若開啟的話可抵擋約10000個SYN攻擊包,若沒有開啟則僅能抵御數百個,具體怎么開啟,自己去看微軟的文章吧!《強化 TCP/IP 堆棧安全》。也許有的人會問,那我用的是Linux和FreeBSD怎么辦?很簡單,按照這篇文章去做吧!《SYN Cookies》。
4. 在存在多站的服務器上,嚴格限制每一個站允許的IP連接數和CPU使用時間,這是一個很有效的方法。CC的防御要從代碼做起,其實一個好的頁面代碼都應該注意這些東西,還有SQL注入,不光是一個入侵工具,更是一個DDOS缺口,大家都應該在代碼中注意。舉個例子吧,某服務器,開動了5000線的CC攻擊,沒有一點反應,因為它所有的訪問數據庫請求都必須一個隨機參數在Session里面,全是靜態頁面,沒有效果。突然發現它有一個請求會和外面的服務器聯系獲得,需要較長的時間,而且沒有什么認證,開800線攻擊,服務器馬上滿負荷了。代碼層的防御需要從點點滴滴做起,一個腳本代碼的錯誤,可能帶來的是整個站的影響,甚至是整個服務器的影響!
5. 服務器前端加CDN中轉(免費的有百度云加速、360網站衛士、加速樂、安全寶等),如果資金充裕的話,可以購買高防的盾機,用于隱藏服務器真實IP,域名解析使用CDN的IP,所有解析的子域名都使用CDN的IP地址。此外,服務器上部署的其他域名也不能使用真實IP解析,全部都使用CDN來解析。
另外,防止服務器對外傳送信息泄漏IP地址,最常見的情況是,服務器不要使用發送郵件功能,因為郵件頭會泄漏服務器的IP地址。如果非要發送郵件,可以通過第三方代理(例如sendcloud)發送,這樣對外顯示的IP是代理的IP地址。
總之,只要服務器的真實IP不泄露,10G以下小流量DDOS的預防花不了多少錢,免費的CDN就可以應付得了。如果攻擊流量超過20G,那么免費的CDN可能就頂不住了,需要購買一個高防的盾機來應付了,而服務器的真實IP同樣需要隱藏
廣告: