流量攻击,又叫做拒绝服务攻击。顾名思义,让服务器拒绝服务,从而达到使服务器瘫痪的效果
这种攻击让百万网管非常纠结,从外层来看,这种攻击就像强奸一样,只能受着不能防御,谁更有耐心谁就是最终的胜利着
首先,先让百度来给我们更详细的解释
从百度给我们的资料来看,一切流量攻击围绕着一个原则,让你的服务器拒绝服务
百度提供的资料都是集思广益的,可能不尽全面也不尽合理
下面本人就拿自己的设想来浅谈一下拒绝服务攻击的惯用手法和防御方式
针对服务器的流量攻击从实质上大致可以分为这么几种 : 1 多流量,少session。 2 多session ,少流量 3:少session ,少流量
从外壳看来,大致可以这样区分:分布式拒绝服务DDOS攻击、分布式拒绝服务CC攻击、拒绝服务纯流量攻击
危害最大的还是纯流量攻击,最直接的攻击方式,常用的手法有集群攻击,也可以叫做僵尸网络,实质操控一大堆主机对目标发起请求
针对多流量,少session,我们可以这样理解,我要打击某台服务器,该服务器的动态流量是50MB,我有一台或者N台傀儡机。能发起51MB的数据请求。那么我不断的从该服务器下载东西,达到50MB以上。这样,这台服务器就会死掉。从而不能对其他用户进行服务,运行在服务器上面的程序也不能与外界相连接
多session少流量攻击。我们可以这样来理解,一台服务器的并发连接数目是有限的。每次创建session后所有属性保存在session对象里面,客户端关闭浏览器或者软件的时候服务器在一定的时间销毁session。session对象在创建之后保存在内存中。正是因为这样,所以一台服务器不能创建无限个session,比方说某台服务器可以供一千人在一秒钟内同时发起数据请求,那我要让这个服务器出现拒绝服务怎么处理呢。很简单,用一些工具模拟与服务器的通讯协议,并且留下非空的随机session,那么只要我能在一秒钟内发起一千次请求以上,这个服务器就瘫痪了
少session,少流量,这个该怎么理解,又没多少session,也没多少流量,针对一些庞然大物的服务器压根就构不成一点威胁,那么我们是怎么达到效果的呢,或许许多人喜欢用cc来解释这种拒绝服务攻击。打个比方,在一个服务器的程序上有一个搜索/查询/列表/资料的任何接口。这个接口的数据从数据库或者io获得,也可能连接第三方接口获得,那么,问题来了,服务器获得这个数据是经历一个过程的,比方说从数据库获得,首先要加载驱动、创建连接对象、执行sql语句、解析结果等等这么一些步骤,而与数据库的数据交互是本机端口通讯,那么这个过程肯定不如程序里面的while for case等等语句的执行速度,甚至达不到百万分之一。也就是说我不断的向这个接口提交数据。多线程循环。并且增加动态参数绕过缓存机制,这样,客户端提交一起,服务器执行N次操作,就达到了一个非常不平衡的机制,如果服务器查询的是百万数据。那么只要用很少的session和流量就会让服务器出现内存溢出、CPU爆掉等等现象、如果是IO获得数据,那服务器程序开发过程肯定考虑并发、多线程等等现象,正所谓没有十全十美的程序,那么更会让IO爆掉,正台机器陷入半瘫痪状态。如果是第三方接口获得,那速度只会更慢,在从接口获得数据的connection里面容易出现超时、连接重置、连接失败等等现象,如果这时候发起攻击,那么服务器肯定直接造成拒绝服务,时间一长造成内存溢出等
流量攻击这么头疼,那我们怎么防止呢?
先从最基本的说起,一台主机向你服务器发送数据频率过高,比方说每秒钟达到一百条甚至更多的时候,应当主动终止这台主机的连接并且不接受该主机的数据。这个原理,就出来了网上大大小小的各种防火墙,像什么安全狗,360网站卫士等等在流量攻击的防御基本都是这样。优点,这种防御能够有效的防止单纯的流量攻击。缺点,这是一种治标不治本的防御,不能防御动态地址发起的请求,同时防御本身也是一次session,并不能防止多并发的攻击
另外小型网站上用得最多的一种防御:CDN加速
这里有必要解释一下CDN加速的原理,CDN和集群攻击几乎是同根同祖,那我们先来看下集群攻击的基本构架
【攻击者操控一大批傀儡机对目标服务器发起攻击】
下面是CDN加速的构架
所谓的CDN加速可以理解成一个分布式缓存,也可以理解成一个多服务器集群
当客户端访问CDN中转服务器的时候,中转服务器分配请求给某个节点,节点先查询本地有没有缓存,如果有,就响应给客户端,如果没有,就访问真实服务器,并且把返回数据保存到本地缓存,然后响应给客户端
这样,就实现了很多固定数据以缓存的形式保存在节点上,客户端访问并没有请求到真实的服务器,从而打到预防一般流量攻击的效果
当然,还有最生硬的防御,一些大型企业站点所采用的集群
把一台或十台甚至几百台几千台机器的服务器用同一套系统,并且共享session,数据同步。由服务器入口来分配负载压力
根据不同的集群机配置来分配优先级别,这样如果受到攻击除非把这些集群的全部服务器统统打掉,要不然是感觉不到压力的
这种集群一般用在大型企业的机房
另外预防攻击的一些方式:缓存机制、数据库优化等待,尽可能的减少服务器上面的操作步骤
附测试工具:http://www.jianshu.com/p/2a06435c7f1e