最近一周多公司的网站反应速度特别慢,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的操作标记。可选选项。