最近一周多公司的網站反應速度特別慢,Ping一下速度都超過1000ms,會員也開始抱怨。向機房反映以后,機房說瓶頸在我們的防火墻設備那里,不在他們機房的線路。連到設備上一看,帶寬占用穩定超過25M,這臺設備的最大帶寬也就是25M,看來的確是達到它的瓶頸了。
本來考慮換個更大的防火墻,但是后來想一想,以目前網站的PV和內容來看,也沒有理由占用這么大帶寬啊。
于是想辦法分析日志,下載了幾個比較大的日志文件,怎么分析呢?最后找到Nihuo Web Log Analyzer 3這個東西,雖然是試用,但是并沒有功能限制(有時間限制),分析完之后清楚的列出訪問量比較大的URL(可惜只能按點擊數列出來,不能按文件實際占用的流量,當然啦,這是日志文件本身的限制)。排在前兩位的都是壓縮文件,下面還有很多wmv的視頻文件。而且2000多個IP發起了20幾萬次訪問,而且,這些訪問都不在Google的訪問記錄里。很明顯,這些都是多線程下載導致的。在文章頁里想找到文件的下載地址需要登錄,那幾乎可以肯定,是迅雷的自動鏡像功能了。
接下來就是想辦法限制用戶的下載,不讓下載是不可能,于是搜索下載限速和限制每用戶的線程的東西,找到了幾個組件,包括2003Server_ChajianForIIS,EmIISLimitTS還有另外兩個相似的東西,都是ISAPI的工作模式,但是都有一個共同的問題,就是狂占CPU,基本不會有空閑。而且也沒有明顯降低網站的流量。
直到今天下午再次研究這個問題,終于在一篇文章里看到一條線索,找到了Safe3IF,關鍵是,它沒有限速功能,但是可以完全屏蔽迅雷。還有些其它的功能,比如防數據庫注入之類的。作為ISAPI裝上以后,網站的響應速度立馬變快了,而且CPU使用率幾乎沒有變化。雖然可能會導致用戶無法下載大文件,但是,作為目前最佳的也是唯一的解決方案,總算是解了燃眉之急。
下面是官方的介紹,經過測試確實不錯
你的網站是否經常遭到非法攻擊?是否因盜鏈或P2P多線程下載而耗盡帶寬資源?是否沒錢購買網上的此類軟件?那么請使用Safe3 IIS FireWall吧!Safe3 IIS FireWall是一款完全免費的IIS防護軟件,內置如下功能,主要防止黑客攻擊和多線程下載占用帶寬。
Safe3 IIS FireWall的功能:
防止SQL注入式攻擊;
防止溢出代碼攻擊;
防止特殊字符構成的URL利用;
防止XSS跨站提交;
防止構造危險的Cookie;
防止迅雷等p2p多線程下載(限制只能用IE下載)
安裝:
1 新建c:/windows/Safe3和c:/windows/Safe3/log/目錄,將Safe3IF.dll, Safe3IF.ini復制到c:/windows/Safe3(你也可以復制到其它適當的文件夾下面,注意若不能加載通常是權限問題,給這兩個文件everyone完全控制權限就可以了)。
2 打開IIS管理器,選擇“默認網站”,右擊“屬性”,選擇“ISAPI篩選器”,點擊“添加”,輸入篩選器名稱:Safe3IF,可執行文件選擇上面復制到c:/windows/Safe3下面的Safe3IF.dll文件,點“確定”。
3重啟IISADMIN service服務。(在計算機管理—-windows服務里面,或使用命令net stop w3svc ,net start w3svc)
4 完成。
日志:
Safe3 IIS FireWall能夠將INI配置文件加載,黑客攻擊記錄都會保存到指定的日志文件里。因為它具有很大的性能開銷,因此建議將它日志的記錄等級設為0,只有需要查看攻擊的時候,可以設置為110。
#非法日志記錄位置
Safe3Log c:/windows/Safe3/log/Safe3 (會生成 例如:Safe3.1078.log,注意不能生成日志是對該目錄沒有寫權限,日志不要和Safe3IF.dll放于同目錄)
#日志的記錄等級
Safe3LogLevel 110
改為其它值則不記錄日志
防迅雷下載:
Safe3AllowMultiDown 0
設為0則阻止,1則放過
阻止所有多線程下載軟件,如果文件被下載,你可以看下詳細下載地址,這是迅雷從其它地方下載的。(對人解釋真麻煩!還是簡單說下吧!)
文件防盜鏈:(考慮效率問題,耗資源,而且網上也有免費的,所以去掉了)
可實現gif/jpg/png等圖片或文件的防盜鏈,盜鏈頁面顯示的是/blocked.png。blocked.png放到網站根目錄,我們可以在上面打上自己網站的版權標志和防盜鏈聲明。
具體可查看Safe3IF.ini文件
#防盜鏈規則(允許自己的網站和搜索引擎)
#下面第一條規則改為自己的網站,去掉前面的#號就可以防盜鏈了
#RewriteCond %{HTTP_REFERER} ^(?!https?://(?:www/.)safe3/.cn/) [I]
RewriteCond %{HTTP_REFERER} ^(?!https?://(?:www/.)google/.com/) [I]
RewriteCond %{HTTP_REFERER} ^(?!https?://(?:www/.)baidu/.com/) [I]
RewriteRule /.(?:gif|jpg|jpeg|png|bmp)$ /blocked.png [I,L]
要允許一些例外的網站比如google,baidu以及其它一些友情鏈接的網站引用。本方法基于HTTP_REFERER判斷,但對盜鏈已經足夠了。
反黑客:
Safe3UrlLenth 128
請求的URL長度,超過此長度則阻止
內置如下功能
防止SQL注入式攻擊;
防止溢出代碼攻擊;
防止特殊字符構成的URL利用;
防止XSS跨站提交;
防止構造危險的Cookie;
具體部分攻擊記錄就放在日志里,很強大,不多言了,自己測試去。
url重寫:(考慮效率問題,耗資源,而且網上也有免費的,所以去掉了)
我也不在詳細介紹。具體有關正則的說明大家可以用GOOGLE搜索,主要有利于搜索優化。
格式:
RewriteRule []
url-pattern:匹配的正則表達式(必需)
replacement-string:要替換的字符串(必需)
modifiers:有關對RewriteRule的操作標記。可選選項。