流量策略及令牌桶的工作原理

转自:http://kendy.blog.51cto.com/147692/52210
TCP/IP协议在设计之初,没有过多的考虑安全这一方面,因此许多协议存在着被黑客利用的弱点。随着互联网络急剧的膨胀,这些弱点将对我们的企业网络构成日益严峻的威胁。一个很好的例子就是TCP协议,这个协议要求在传输数据之前使用一个“三次握手”过程来建立一个连接。如下图所示.
                                 source                   destination
                                             syn=x
                                        ------------>
                                             
                                             ack=x+1
                                        <------------
                                             syn=y
 
                                             ack=y+1
                                        ------------>
                                             syn=x+1

source端最初发送一个syn=x的报文,请求建立一个连接。
destination端以一个在报文头中设置了ack,syn标记的报文作为响应。
ack标记是对source端请求的响应,syn标记指示自身的连接建立请求。
source端通过向destination端发送一个带ack标记的报文确认目的端的连接建立请求。
当完成上述“三次握手”之后,source端可以发送数据给destination端。
 
TCP协议中的弱点之一是目的端期望源端发送一个最后的ack给目的端,完成连接的建立。黑客可以利用这个弱点,通过向一个服务发送大量的tcp syn请求报文,但不紧跟着完成这些连接,这种连接类型被称为半开连接(Half-Open Connection)。这样将导致destination端的资源被大量占用,从而致使目的端为新的服务拒绝连接,这就是有名的拒绝服务攻击(Denial of Service Attack)。
网络攻击的分类:
1.侦测攻击
  从严格意义上讲,侦测攻击不能算是真正的攻击,它主要指黑客利用各种手段对网络中的具体的信息(网络拓朴、网络内的主机、主机上开启的服务)进行侦测,但是侦测攻击往往是真正攻击的前奏。
2.访问攻击
  在这种攻击中,黑客企图获得对网络和网络资源的未经授权的或非法的访问,尤其是如file、e-mail、web服务器这样的资源。
3.DOS攻击
  使用DOS攻击,黑客企图拒绝到特定资源的合法流量和用户访问,或者至少降低对资源的服务质量。
  DOS攻击除了TCP的half-open connection以外,还有象基于TCP syn、UDP echo、ICMP echo的flood攻击。
  缓解DOS攻击的方法很多,比如说用ACL,URPF等技术都可以实现,但本专题仅专注于用traffic-police(流量策略)技术实现。
traffic-police可以执行两个基本功能:
1.速率限制
2.流量分类
traffic-police的命令结构如下:
police <bps> <burst-normal> <burst-max> conform-action <action> exceed-action <action> [violate-action <action>]
<bps>:CIR。(定义了向token buckets中注入token的平均数率)
<burst-normal>:BC。(定义了BC token buckets的大小)
<burst-max>:BE。(定义了BE token buckets的大小)
<action>:定义行为,可选的行为如下:
?drop—Drops the packet. 
?set-prec-transmit new-prec—Sets the IP precedence and sends the packet. 
?set-dscp-transmit new-dscp—Sets the DSCP value and transmits the packet. 
?transmit—Sends the packet.
接下来,我们将用两个具体的实例来说明CAR的工作原理。
实例1:
在这个例子中,traffic policing被配置为CIR 8000bit/s , BC被配置为1000byte,
初始到达一个450字节的数据包,0.25秒之后,到达一个900字节的数据包。
police被关联在fa0/0的output方向。
Router(config)# class-map access-match
Router(config-cmap)# match access-group 1
Router(config-cmap)# exit
Router(config)# policy-map police-setting
Router(config-pmap)# class access-match
Router(config-pmap-c)# police 8000 1000 conform-action transmit exceed-action drop
Router(config-pmap-c)# exit
Router(config-pmap)# exit
Router(config)# interface fastethernet 0/0
Router(config-if)# service-policy output police-setting

   在这个例子中,初始的token buckets中装满1000byte的tokens,如果在初始阶段到达450字节的数据包,那么需要从token bucket中流出450字节的tokens, 此时,token buckets中剩余(1000-450)byte=550字节的tokens,token bucket中的token数量有富裕,将触发comform-action行为,450字节的数据包将被transmit。0.25秒之后,一个900字节的数据包到达,在0.25秒的时间间隔之内,token buckets中将注入(8000bps/8)*0.25s=250字节的tokens,此时,token buckets中共剩余(550+250)byte=800字节的tokens, 由于到达的数据包的大小为900字节,需要从token buckets中流出相应字节的token数,而此时,token buckets中的token数量不够,将会触发exceed-action行为,此900字节大小的数据包将被drop。
实例2:
在这个例子中,traffic policing被配置为CIR 8000bit/s , BC被配置为1000bytes,BE被配置为1000bytes。
初始到达一个450字节的数据包,0.25秒之后,到达一个900字节的数据包。
0.4秒之后,到达一个1000字节的数据包,0.2秒之后,到达一个400字节的数据包。
police被关联在fa0/0的output方向。
Router(config)# class-map access-match
Router(config-cmap)# match access-group 1
Router(config-cmap)# exit
Router(config)# policy-map police-setting
Router(config-pmap)# class access-match
Router(config-pmap-c)# police 8000 1000 1000 conform-action transmit exceed-action set-prec-transmit 1  violate-action drop
Router(config-pmap-c)# exit
Router(config-pmap)# exit
Router(config)# interface fastethernet 0/0
Router(config-if)# service-policy output police-setting
   在这个例子中,初始的token buckets中装满1000byte的token,如果在初始阶段到达450字节的数据包,那么需要从token bucket中流出450字节的tokens, 此时,token buckets中剩余(1000-450)byte=550字节的token,token bucket中的token数量有富裕,将触发comform-action行为,450字节的数据包将被transmit。0.25秒之后,一个800字节的数据包到达,在0.25秒的时间间隔之内,token buckets中将注入(8000bps/8)*0.25s=250字节的token,此时,token buckets中共剩余(550+250)byte=800字节的token , 由于到达的数据包的大小为900字节,需要从token buckets中流出相应字节的token数,而此时,BC桶中的token只有800字节,数量不够,但是BE桶中有1000字节,路由器会直接向BE桶借900字节的token,此时,BC桶中token数量不够,但是BE桶中token数量足够,将触发exceed-action行为,900字节的数据包将会被set-prec-transmit 1。900字节的数据包被处理完成之后,BC桶中剩余800字节的tokens,BE桶中剩余100字节的tokens。0.4秒之后又到达一个1000字节大小的数据包,在这0.4秒之内,BC桶中将被新注入(8000bps/8*0.4)=400bytes的token,BC桶现在800字节的token,BC桶最多只能容纳1000字节的token,故路由器先将BC桶注满(增加200bytes的tokens,BC桶此时共1000字节的tokens),多余的200字节的tokens将被注入进BE桶(增加200bytes的tokens,BE桶共300字节的tokens)。当把1000字节的数据包传递之后,BC桶中的剩余的tokens数量刚好为0,BE桶中的token数量保持不变(300字节),将会触发conform-action行为,此数据包将被transmit。0.2秒之后又到达一个400字节的数据包,在这0.2秒之内,BC桶中将新注入(8000bps/8*0.2)=200bytes的tokens,此时BC桶中总的tokens数量为200bytes的tokens,BE桶中共有300bytes的tokens,需要传递的数据包为400字节,BC桶、BE桶中的tokens数量都不够,此时,将会触发violate-action行为,此数据包将被drop。
在深入理解了Traffic-Police的工作原理之后,接下来我们讲述一个利用此技术缓解smurf攻击的实例。
smurf攻击的工作原理:

                         R1 (H11: 1.1.1.1)          |----H1(192.168.20.1)
                         |                                    |----H2(192.168.20.2)
               --------------------R2-----------|----H3(192.168.20.3)
                   |                                          |----H4(192.168.20.4)
                   |s0/0                                   |----H5(192.168.20.5)
                   R3(H33: 3.3.3.3)
                                         
路由器R1后方有一真实主机H11的IP地址为1.1.1.1,路由器R3后方有一真实主机H33的IP地址为3.3.3.3,R2后方的ethernet网络内有多台主机:H1,H2,H3,H4,H5...假设主机H11是一个攻击者,它发起一个到子网192.168.20.0的ICMP echo广播报文,报文的源IP地址被伪造成3.3.3.3,目的地址为192.168.20.255(子网广播地址),当R2后方网段内的每台主机收到此广播报文后,都将作出相同的响应:返回单播报文,此报文的目的地址为3.3.3.3(此时,R2后方的ethernet网络被攻击者利用,成为一个攻击的放大器)。这样真实主机H33将收到许多ICMP echo-reply的洪泛,最终主机H33的系统资源将被耗尽。
理解了smurf攻击的工作原理之后,我们可以用traffic-police减缓smurf攻击。
下面的示例给出了路由器R3上的配置:
Router3(config)# access-list 101 permit icmp any any echo-reply
Router3(config)# class-map DOS
Router3(config-cmap)# match access-group 101
Router3(config-cmap)# exit
Router3(config)# policy-map DENY_DOS
Router3(config-pmap)# class DOS
Router3(config-pmap-c)# police 25600 8000 conform-action transmit exceed-action drop
Router3(config-pmap-c)# exit
Router3(config-pmap)# exit
Router3(config)# interface serial 0/0
Router3(config-if)# service-policy input DENY_DOS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值