经历了自建“高防”反向代理的惨败经验后,我懂得了很多,其中,我来凭借着一点小经验谈谈CC攻击。
我们先来看看百度百科是怎么解释的CC主要是用来攻击页面的。
大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库压力就越大,被访问的频率也越高,占用的系统资源也就相当可观。
一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的数据容量有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
CC就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。
其实很多人有一个严重误区:CC攻击会大肆消耗服务器CPU使用率,直到死机为止。
我也这么认为,然而,在经历数万代理的疯狂CC攻击后,我错了。
真理便是百度百科所解释的,是大量查询数据库,使之奔溃。
我再说一遍,是奔溃,CPU倒不会耗多少资源:目前大部分软件都有对CPU使用的严格限制,即使CC到你的网站无法打开了,也只会占用5%-10%使用率。
第一奔溃的,是数据库。在网站经受大量的CC攻击后,你可以想象就是同时有几万个人甚至是几十万个人访问你的网站,你可以想象这会对数据库造成有多大的压力。
若大量CC攻击后,数据库反应过得来的,会及时进入安全模式,若反应不过来,系统会直接因为数据库占用过多内存而Kill掉数据库程序。 我曾经做过一个实验。 我用反向代理反代一个网站。
第一次反代,我没有安装任何防御CC攻击软件,在遭受几万代理疯狂攻击后,网站提示数据库奔溃。
第二次,我安装了一个CCKiller。同样也是遭受了几万代理攻击。但我进入源站时,便看到一则消息:数据库进入安全模式(Safe Mode)。Safe Mode无疑就是限制了读写,所以,在第二次防御中,网站没有崩塌,却因为CCKiller对用户的误判,失去了用户。 这说明什么,CC攻击的根本压根就不是消耗CPU资源,而是使各种软件进入奔溃。
以下这张图片,是在遭受了巨大的CC攻击时的临时用手机截的一张CPU检测图(Linode提供)
你会发现,CPU根本没有多大的波动(高使用率是在安装Apache,后面才是遭受CC攻击)我又翻了一下反向代理,发现同样也是如此,CPU使用率仅有5%。如此低的使用率,我觉得,对服务器造成不了什么影响。