DoS对于网站而言是最可怕的威胁之一。DoS是目前黑客广泛使用的一种手段,它通过独占网络资源、使其他主机不能进行正常访问,从而导致网络瘫痪,我们可以通过在接入路由器上采用CAR限速策略来达到抵御的目的。
DoS是DenialofService的简称,即拒绝服务,造成DoS的行为被称为DoS,其目的是使计算机或网络无法提供正常的服务。DoS网络的一个重要特征是网络中会着大量带有非法源地址的ICMP包,我们可以通过在路由器上对ICMP包配置CAR来设置速率上限的方法来网络。
CAR工作机制
CAR是CommittedAccessRate的简写,意思是:承诺访问速率,CAR主要有两个作用:对一个端口或子端口(Subintece)的进出流量速率按某个标准上限进行;对流量进行分类,划分出不同的QoS优先级。CAR只能对IP包起作用,对非IP流量不能进行,另外CAR只能在支持CEF交换(CiscoExpressForward)的路由器或交换机上使用。
要对流量进行控制我们首先要做的是对数据包分类识别(PacketClassification),然后再对其进行流量控制(AccessRateLimiting),CAR就是两者的结合。其工作流程如图1所示。
首先我们要定义感兴趣的流量,所谓感兴趣的流量就是对其进行流量控制的数据包类型。可以选择以下几种不同的方式来进行流量识别:
(1)基于IP前缀,此种方式是通过rate-limitaccesslist来定义的。
(2)QoS分组。
(3)IPaccesslist,可通过standard或extendedaccesslist来定义。
采用上述方义了感兴趣的流量后,进行第二步的流量(TrafficLimitation)。CAR采用一种名为tokenbucket的机制来进行流量限制(如图2所示)。
限流器使用tokenbucket的算法流量flow的带宽利用率。在每个流入的帧到达的时候,就把它们的长度加到tokenbucket(记号桶)上。每隔0.25毫秒(四千分之一秒),就从tokenbucket减去CIR(CommittedInformationRate,承诺信息速率)或者说是平均限流速率的值。这样做的思是,保持tokenbucket等于0,从而稳定数据速率。
限流器允许流量速率突发超出平均速率一定的量。tokenbucket增长到突发值(以字节为单位)水平之间的质量是允许的有效突发量,这也叫做in-profiletraffic(限内流量)。当tokenbucket的大小超过了突发值,限流器就认为流量“过大”了。这时我们可以定义一个PIR(PeakInformationRate,峰值信息速率)。
当流量超出最大突发值达到PIR的时候,限流器就认为流量违规,这类流量也叫做out-of-profiletraffic(限外流量)。所以当实际的流量通过限流器(tokenbucket)后,可以看到会有两种情况发生:
(1)实际流量小于或等于用户希望速率,帧离开bucket的实际速率将和其来到的速率一样,bucket内可以看作是空的。流量不会超过用户的希望值。
(2)实际流量大于用户希望速率。帧进入bucket的速率比其离开bucket的速率快,这样在一段时间内,帧将填满该bucket,继续到来的帧将溢出(excess)bucket,则CAR采取相应的动作(一般是丢弃或将其IP前缀改变以改变该token的优先级)。这样就了数据流量速率在用户定义的希望值内。
CAR的配置
我们通常在网络的边缘路由器上配置CAR。配置CAR主要包括以下几部分:
1.确定“感兴趣”的流量类型也就是我们需要监视的流量,主要通过下列方式确定:
(1)基于IP前缀,此种方式是通过rate-limitaccesslist来定义的。
(2)基于QoS分组。
(3)基于MAC地址。
(4)基于standard或extended的IPaccesslist。
2.在相应的端口配置rate-limit:
一般的写法是:
- interfaceX
- rate-limit{inputoutput}[access-groupnumber]bpsburst-normalburst-maxconform-
- actionactionexceed-actionaction
上述命令的含义是:
interface:用户希望进行流量控制的端口,可以是Ethernet也可以是serial口,但是不同类型的interface在下面的input、output上选择有所不同。
Inputoutput:确定需要限制输入或输出的流量。如果在以太网端口配置,则该流量为output;如果在serial端口配置,则该流量为input。
access-groupnumber:number是前面用accesslist定义流量的accesslist号码。
bps:用户希望该流量的速率上限,单位是bps。
burst-normalburst-max:这个是指tokenbucket的大小,一般采用8000、16000、32000这些值,视bps值的大小而定。
conform-action:在速率限制以下的流量的处理策略。
exceed-action:超过速率限制的流量的处理策略。
action:处理策略,包括以下几种:
1.transmit:传输。
2.drop:丢弃。
3.setprecedenceandtransmit:修改IP前缀然后传输。
4.setQoSgroupandtransmit:将该流量划入一个QoSgroup内传输。
5.continue:不动作,看下一条rate-limit命令中有无流量匹配和处理策略,如无,则transmit。
6.setprecedenceandcontinue:修改IP前缀然后continue。
7.setQoSgroupandcontinue:划入QoSgroup然后continue。
CAR具体应用
CAR限制某种流量的速率之外,还可以用来抵挡DoS型攻击,诸如Smurf攻击使得网络上充斥着大量带有非法源地址的ICMP,占用网络的资源。我们可以通过在路由器上对ICMP包通过配置CAR来设置速率上限的方法来保护网络(如图3所示)。
客户端边界路由器上的配置:
- interfaces0rate-limitinputaccess-group20030000008000080000
- conform-actiontransmitexceed-actiondrop
这里我们把icmp包的流量定义在3Mbps,tokenbucket的大小为8000字节。
access-list200permiticmpanyanyecho-reply
这样一旦受到Smurf攻击时,在一定程度上我们可以限制ICMP包的转发速率和大小,减少对网络和主机造成的破坏。
CAR限速策略要想有效地被使用,我们需要弄清楚DoS攻击的原理,这样才能针对DoS攻击的不同类型采取相应的防范措施。