被頻繁攻擊訪問,nginx如何破解?
01-13
查看log
發現有大量不同的ip訪問網站的html靜態頁面和動態頁面,請求次數非常頻繁。nginx如何破解呢?
用limit_req模塊來限制請求頻率:http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
也可以用tengine中的增強版:
http://tengine.taobao.org/document_cn/http_limit_req_cn.htmlFail2Ban 設置同一個IP在一定時間內訪問的次數超過多少次就給BAN了!
用過(D)DoS Deflate自動屏蔽攻擊ip,是一種方法。
之前同事自己伺服器有碰到過這樣的情況,就是通過代理髮起的CC攻擊。
同事自己開了個網站,某天下午突然網站變得很卡。一開始呢,只以為是用戶太多了,就升級了伺服器配置。後來發現升級後還是一樣卡,於是就把我拉過去了。
我呢基本算是這方面的小白一枚,主要還是自己折騰。當時他的伺服器還是apache+php,我對於apache是完全不熟悉啊有木有,當時還有別的朋友在幫他搞,我就說你先讓他看看,我試試nginx+php-fpm行不行。話說等我把nginx+php-fpm配好了他朋友還在糾結資料庫,我就先把apache停掉,啟動了nginx+php-fpm。初始表現還不錯,反應雖然略慢但是應該算是可以正常訪問的(其實這時候問題依然存在)。同事說這樣不對,之前反應是很迅速的,這種速度肯定不行。於是關掉nginx換回apache。然後我繼續糾結,服務響應慢什麼的肯定要查看日誌么,哈,啟動沒有多長時間的nginx居然有30多M的日誌,裡面的訪問記錄基本就是訪問同一個動態頁面的,並且一條記錄里有兩個ip出現。
其實到這一步就基本明了了,有人通過代理來發起了一堆請求,由於都是正常的完整請求,所以伺服器就被這些請求給拖死了。當然了,悲催的我當時還不懂什麼是CC呢,也沒有意識到兩個IP有問題……坑了個把小時最終明白問題所在之後呢,鑒於他的網站也不是很需要通過代理訪問,於是我就出了一個惡毒的招數:屏蔽掉用代理訪問的用戶,直接給他們返回403。if ($http_x_forwarded_for ~ ^d) {
access_log off;
return 403;
}
當然了,多出來的流量我是沒辦法的~
PS: 同事最後把nginx日誌中那數百個IP都用iptables給屏蔽掉了,更減輕了伺服器負擔。
PPS: 誤殺什麼的,我也沒有辦法呀~~嗯,以上就是我的親身經歷,希望能有大牛提出比較好的解決方案。推薦閱讀:
※假如有一張100W左右數據的表,根據查詢條件進行分頁。如何分頁?
※為什麼中國程序員對待外國人抱怨和對待國人抱怨採取截然不同的態度?
※為什麼考慮到溢出用減法來比較更好?
※Nginx支持ASP.net嗎?