在企业网络的设备通信中,常面临一些非法流量访问的安全性及流量路径不优等问题,故为保证数据访问的安全性、提高链路带宽利用率,就需要对网络中的流量行为进行控制,如控制网络流量可达性、调整网络流量路径等。而当面对更加复杂、精细的流量控制需求时,就需要灵活地使用一些工具来实现,本次博客主要介绍一些有关流量控制的常用工具及其使用场景。
1.控制网络流量可达性。
为保证网络安全性,客户常提出一些部门之间不可互访的需求,如下图所示:市场部不可以访问财务部和研发部,公司总部不能访问研发部
2.调整网络流量路径。
如下图所示,根据OSPF协议计算生成的路由,市场部和财务部访问公司总部都选择通过一条开销最小的路径,即使该路径发生拥塞也如此,而另外一条路径的链路带宽则一直处于空闲状态,这样就造成了带宽浪费的问题。
解决:控制流量的可达性,有两种方式:直接与间接
直接方式:直接针对流量进行过滤----流量工程
间接方式:对路由进行控制筛选---路由策略
解决方案一:可通过修改路由条目(即对接收和发布的路由进行过滤)来控制流量可达性,这种方式称为路由策略。
解决方案二:可使用Traffic-Filter工具对数据进行过滤,这种方式称为流量过滤。
在解决方案一中,可以利用Filter-Policy工具对RTA向OSPF引入的路由和RTC写入路由表的路由进行过滤:首先使用ACL或IP-Prefix List工具来匹配目标流量;然后在协议视图下,利用Filter-Policy向目标流量发布策略。
也可以利用Route-Policy工具,在RTA引入直连路由时对路由进行过滤:首先使用ACL或IP-Prefix List工具来匹配目标流量;然后在协议视图下,利用Route-Policy对引入的路由条目进行控制。
路由策略的实现分为两个步骤:
定义规则:首先要定义将要实施路由策略的路由信息的特征,即定义一组匹配规则,可以以路由信息中的不同属性作为匹配依据进行设置,如目的地址、AS号等;(警察)
应用规则:根据设置的匹配规则,再将它们应用于路由的发布、接收和引入等过程中。(法官)
就类似生活中警察会把小偷抓起来,但是对于这个小偷是否需要坐牢,或者是判刑是由法官来决定的事情,警察只是负责把小偷抓起来。
ACL可通过匹配报文的信息实现对报文的分类。
格式如下:
acl 2001 #创建一个基本ACL#
rule 0 permit source 1.1.0.0 0.0.255.255
#在这个列表里会允许源ip是1.1.0.0的流量通过,0.0.255.255是通配符,0代表精确匹配,1代表任意匹配,也就是说允许过去的源ip前面两位必须是1.1,后面2位随意,来自于1.1.x.x的流量都可以通过;permit--通过,deny--拒绝#
访问控制列表ACL(Access Control List)是由permit或deny语句组成的一系列有顺序规则的集合,它通过匹配报文的信息实现对报文的分类。
ACL的分类:
基本ACL:主要基于源地址、分片标记和时间段信息对数据包进行分类定义,编号范围为2000-2999。
高级ACL:可以基于源地址、目的地址、源端口号、目的端口号、协议类型、优先级、时间段等信息对数据包进行更为细致的分类定义,编号范围为3000-3999。
二层ACL:主要基于源MAC地址、目的MAC地址和报文类型等信息对数据包进行分类定义,编号范围为4000-4999。
用户自定义ACL:主要根据用户自定义的规则对数据报文做出相应的处理,编号范围为5000-5999。
一个ACL可以由多条“deny | permit”语句组成,每一条语句描述了一条规则。设备收到数据流量后,会逐条匹配ACL规则,看其是否匹配。如果不匹配,则继续匹配下一条。一旦找到一条匹配的规则,就会执行规则中定义的动作,且不再继续与后续规则进行匹配;如果找不到匹配的规则,则设备会对报文直接进行转发。
需要注意的是,ACL中定义的这些规则可能存在重复或矛盾的地方。规则的匹配顺序决定了规则的优先级,ACL通过设置规则的优先级来处理规则之间重复或矛盾的情形。
ACL可以灵活地匹配IP地址的前缀,但无法匹配掩码长度。
IP-Prefix List能够同时匹配IP地址前缀及掩码长度。 IP-Prefix List不能用于IP报文的过滤,只能用于路由信息的过滤。
示例:ip ip-prefix test index 10 permit 10.0.0.0 16 greater-equal 24 less-equal 28
IP地址范围:10.0.0.0 – 10.0.x.x 24<= 掩码长度 <=28
ip ip-prefix Pref1 index 10 permit 1.1.1.0 24 greater-equal 24 less-equal 24 像这种,“greater-equal 24 less-equal 24”表示掩码长度只能是24
Filter-Policy能够对接收或发布的路由进行过滤,可应用于ISIS、OSPF、BGP等协议。
对协议接收的路由进行过滤:
filter-policy { acl-number | ip-prefix ip-prefix-name } import
对协议发布的路由进行过滤:
filter-policy { acl-number | ip-prefix ip-prefix-name } export
应用各协议中的Filter-Policy工具可通过引用ACL或地址前缀列表,对接收、发布和引入的路由进行过滤。
Route-Policy是一种功能非常强大的路由策略工具,它可以灵活地与ACL、IP-Prefix List、As-Path-Filter等其它工具配合使用 (法官)
Route-Policy:
route-policy route-policy-name { permit | deny } node node 允许/拒绝通过node
if-match {acl/cost/interface/ip next-hop/ip-prefix} 如果满足后面的这些规则(acl/cost/interface/ip next-hop/ip-prefix)
apply {cost/ip-address next-hop/tag} 就对这个路由进行应用(cost/ip-address next-hop/tag)
Route-Policy由若干个node构成,node之间是“或”的关系。且每个node下可以有若干个if-mach和apply子句,if-match之间是“与”的关系。
路由策略配置实现:如下图所示,要求市场部不能访问财务部和研发部,公司总部不能访问研发部。
在这里我采用的动态路由协议是ospf协议,所有的路由器接口都属于骨干区域,在AR1上通过import-route 引入了直连路由,实现了全网互通,在这里不做展示,现根据要求需要针对市场部不能访问财务部和研发部,公司总部不能访问研发部来做配置。
在没有做路由策略之前,对于AR3的ospf路由表是这样的,如下图所示:
AR4上的关于ospf的路由表是这样的
二者的路由表里都有关于去往研发部的路由。
对于市场部和公司总部都不能访问研发部,我们可以在AR1上做配置,将研发部的192.168.11.0 的路由过滤掉,
配置如下:
通过创建ip-prefix 111,来允许路由192.168.1.0和192.168.111.0,也就是财务部和资料部的路由可以通过,相反,研发部的路由就被过滤掉了,此时的ip-prefix 既做警察又做法官,把相应的路由进行匹配,匹配之后的动作是允许(permit),之后在通过filter-policy 在ospf的协议视图下去调用ip-prefix,当你引入直连的时候,直连进入ospf,站在外部路由的角度去考虑,
是不是从ospf出去了,export出向去做一个过滤。
配置完成之后,在AR3和AR4上查看关于ospf的路由表,如下图所示
会发现,原来存在在ospf路由表里的192.168.11.0这个研发部的路由,被过滤掉了,相应的对于市场部和公司总部来说就不能访问研发部的数据了。
接下来,去满足市场部不能访问财务部的要求,我们可以通过ACL来做路由的过滤,ACL本身是用来过滤流量的,但是也可以用来过滤路由,但是在过滤路由的时候,缺省是拒绝其他所有的路由通过,当用ACL去过滤流量的时候,缺省是允许其他所有的流量通过,这个地方需要注意一下。
我们可以在AR1上,通过acl来过滤财务部的路由,配置如下图所示:
同样的,这里的acl 既做警察又做法官,将来自财务部的192.168.1.0 的路由过滤掉,通过filter-policy 在ospf的协议视图下应用在引入路由的方向上,同时还有一点需要注意,在acl过滤路由的时候,需要配置一条允许其他所有匹配上的路由通过,因为缺省是拒绝,为了防止其他的路由被筛选掉,需要配置一条允许其他所有的命令。
做完配置之后 ,可以在AR3上查看ospf的路由表
会发现,把来自财务部的路由192.168.1.0过滤掉了。
以上是通过ACL和ip-prefix既可以匹配流量,又可以执行动作来做配置的,下面我们来用另外一种方法,会使用到route-policy来执行动作,ACL和ip-prefix来匹配流量,也就是说,下面的acl和ip-prefix只是用来作为警察的,而route-policy是用来作为法官的。
如图所示,是总体拓扑的概况
通过配置route-policy 在AR3上的配置如下:
先通过配置ACL把财务部的路由匹配出来,这里只是匹配,并不执行动作,
通过route-policy来执行动作,如果满足acl 2000的路由,执行的动作是deny(拒绝通过),在通过在ospf的协议视图下去调用filter-policy工具执行route-policy shichang的动作(拒绝)
在AR1上的配置如下图所示
首先通过ip-prefix去匹配来自研发部的路由192.168.4.0,这里的ip-prefix只是作为警察,并不是法官。还是通过route-policy来执行拒绝的动作,最后在ospf的协议视图下在引入直连路由的时候,执行route-policy yanfa的动作即可。
以上两种方式采用的是间接的方式,通过路由策略来实现各个部门之间的访问需求。
下面我们来了解一下采用直接的方式,通过过滤流量来实现各个部门之间的访问需求。
基于自定义策略实现:使用Traffic-Filter工具对数据进行过滤。
如下图所示,是客户的网络于要求
采用流量过滤的方式,可以依靠高级acl来进行配置,如下图所示:
在AR3上的配置,通过配置高级acl 来过滤掉(deny)来自192.168.1.0(市场部),去往财务部192.168.3.0 的流量,以及过滤掉来自市场部192.168.1.0,去往研发部192.168.4.0的流量。
然后在AR3的入接口上通过使用traffic-filter工具来调用acl 3000.
在AR3上查看关于ospf的路由表,会发现,去往财务部和研发部的路由还是正常存在的,
但是作为市场部的pc1却ping不同作为财务部的pc3和作为研发部的pc4
针对流量过滤,即使路由表里有路由,数据流量还是被过滤掉,这是流量过滤的特点。
同样的针对公司总部不能访问研发部的配置,如下图所示
在AR4上的配置
结果验证:作为公司总部的pc2是不能去访问作为研发部的192.168.4.4的。
在后期对网络进行优化时,常出现调整网络流量路径的需求。
若采用解决方案一来实现以上需求,由于其只能依据数据包的目的地址做转发策略,所以无法满足需求;故当出现基于源地址、目的地址或基于应用层等一些复杂的控制需求时,就体现出其局限性。
解决方案二:采用策略路由方式
配置案例如下图所示:
在AR1上的配置,如下图所示
先创建一个高级acl匹配上从市场部到公司总部的流量,然后通过traffic classifier 去定义一个类,这个类里是需要和acl 3000做绑定,再通过traffic behavior 去标识动作,将下一跳改为了10.0.12.2,之后,在traffic policy里面将traffic classifier这个类和需要执行的动作traffic behavior做一个绑定,在入接口G0/0/0DE 入方向上执行traffic policy。
结果测试,如下图所示,作为市场部的pc1在访问公司总部的192.168.3.3的路径下一跳是10.0.12.2.
同样的,在AR1上的配置,针对财务部去往公司总部的路径的配置如下
结果验证,发现作为财务部的pc1去往公司总部的192.168.3.3的下一跳是 10.0.13.3.