关于   小悟志   栏目   标签   文章   归档   友链

   云上小悟  +  

网站被攻击后的思考和操作

网站建设 / by: 麦新杰 / 发布:2017年6月3日 / 33次阅读 / 3条评论
标签:网站安全   / 最后修改时间: 2017-06-03 21:31:46

网站建设 / 2017年6月3日 / 33次阅读 / 标签:网站安全  

拍拍贷

从6月2号晚上开始,云上小悟网站遭到攻击,时间持续到3号上午,攻击类型怀疑是WordPress网站特有的评论攻击,即突然向网站灌入大量含广告链接的评论。据说,这样的攻击在网络上很常见。

麦新杰并不能准确的判断出一定是这类灌评论的攻击,唯一的线索是垃圾评论多了很多;至于攻击强度有多大也不得而知,反正网站正常的访问在这一个时间段几乎都Timeout;百度网站检测也发来告警,提示网站在多个地方不能访问。WordPress网站天生在处理评论的时候,就很消耗资源,因为要写入数据库,还要调用PHP,而且Akismet插件也是远端检查是否是垃圾评论等等。云上小悟网站在正常被访问的时候,如果没有评论,是不经过PHP和MYSQL的,全部都是静态化存放的页面和资源文件,因此处理速断相对较快。

 

先看看在被攻击期间,各项性能指标。

下图是被攻击期间,系统盘的IOPS指标:

系统盘的IOPS

系统盘的IOPS

这块系统盘是阿里云的普通盘,每秒能够支持的IO数也就数百,上图几乎到了读写次数性能极限了。(阿里云的ECS还可以配高速盘,或者SSD,高速盘IOPS可以到3000左右,SSD可以到20000左右;不同的磁盘,除了IO频率不同,吞吐量也有较大差异)

这期间,服务器的CPU是什么情况呢:

服务器的CPU的情况

服务器的CPU的情况

CPU波澜不惊,并没有被吃掉多少宝贵的Cycle,CPU占用率只是轻微升高了一点点,整体还是稳定在一个很低的水平。

再看一下Load Average的情况:

Load Average的情况

Load Average的情况

1分钟Load Average达到了很恐怖的80以上!!严重超负荷,服务器可是只有一个核呀.....(关于如何理解Load Average,请参考:Load Average介绍

内存就不用看了,接近100%,服务器设置的swappiness参数是10,2G的swap空间也被占用了1.5G。(关于swap空间的设置,请参考:设置Linux的Swap交换分区

 

出现这样的情况,我是这样分析的:

大量的请求导致内存资源不足,大量的请求又带来大量磁盘IO,大量磁盘IO进一步加剧内存不足(读磁盘就是将磁盘内容读入内存,然后交给代码处理),同时加剧swap;可以看到CPU并不忙,CPU一直在等待IO,也进行httpd线程的上下文切换;系统资源几乎全部消耗在争夺内存上了,CPU得到机会做事情的时候,很快就要停下来继续等待IO。

Web服务器在工作原理是,收到请求后,去磁盘找到请求的资源(假设是静态化的资源),将资源放入内存,然后Web服务器代码再将资源发送出去。因此,Web服务器是IO密集型的服务器,这就是为什么CPU资源很充足,但是内存资源很紧张。每一个请求,都有一次磁盘IO(没有做memcache),从磁盘IO的性能指标上,可以看出,最大并发请求也就能到几百这样的量级。磁盘IO如果越高,对内存是什么需求一定也是越高,如果内存不够,就要swap,swap本身也是磁盘的IO,因此进一步加剧磁盘IO的频率。系统卡死在磁盘IO上,并不是因为磁盘IO不够快,而是内存不够大。

单纯的增大内存就可以了吗?可以的,只是太贵!

没钱买内存,麦新杰只能降低APACHE的最大并发线程数。降低最大并发线程数,降低同一时间对磁盘的IO需求,在大并发的时候,减少CPU上下文切换。源头在最大并发数这里,最大并发数一定要跟系统物理内存大小匹配起来。单核的服务器,降低最大并发数,并不会显著降低服务器的响应性能,因为单核CPU本质上是没有真正的并发的,都是按顺序处理,我们要做的就是减少系统无效IO的频率(比如swap),就能让请求顺畅的被处理,同时还能降低CPU上线文切换的消耗。因此,这次最大的教训是,不要一味追求服务器的最大并发数,要考虑服务器的CPU核数,物理内存大小,过大的最大并发数会导致很多无效IO处理,反而拉低服务器的效率,最大并发数跟物理资源匹配就好。

我的个人经验是,30个并发APACHE线程就能占用800M左右的内存。(APACHE看起来一点都不轻量呀!!)

 

针对WordPress网站,还可以做一点优化,垃圾评论基本上都带有广告链接,我们可以加一段代码,让评论在被写入数据库之前,做一次关键词过滤,麦新杰使用的代码如下,供参考:

上面这段代码可以有效的过滤任何含有http:或https:的评论(含大写),代码中的那个正则表达式,各位同学可自行修改以满足你的个性化需求。更多这方面过滤的内容,请参考:过滤含URL信息的垃圾评论

 

因此,麦新杰今天干了两件事情:

1, 降低了apache服务器的最大并发出;

2, 设置了垃圾评论关键词过滤。

服务器性能是有上限的,如果是因为正常的访问过多导致的,就只能增加硬件资源了,比如最急需的物理内存。

-- (*^-^*) --

本文链接:http://www.maixj.net/wz/gongji-sikao-caozuo-15654
云上小悟 麦新杰(QQ:1093023102)

《网站被攻击后的思考和操作》有3条评论

电子邮件地址不会被公开。 必填项已用*标注

  • 麦新杰  said:

    专业术语叫做,系统发生了颠簸(thrashing)。   [ 回复 ]

  • BanYuner  said:

    我采用的策略是评论内容禁止解析HTML代码   [ 回复 ]

    • 麦新杰  said:

      如何做到的?   [ 回复 ]


前一篇:
后一篇:


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有  备案号:苏ICP备14045477号-1  economists.cn的备案号:苏ICP备14045477号-3  
    联系我们

云上小悟,麦新杰的独立博客
网站二维码
拍拍贷
go to top