我们先来简单的讲解一下ACL访问控制列表,ACL的本质,是对流量进行分组的策略,对数据流进行直接控制,或者用作决策。在ACL的一般应用中通常用来过滤有风险的流量分组或者放行安全的流量分组,拥有非常高的灵活性。
ACL访问控制列表相当于一些列的if、else if语句,从上到下依次匹配,当匹配成功便执行ACL的操作,而不继续进行匹配,一致匹配到ACL列表的末尾,在每个ACL访问控制列表的末尾都有一条隐藏的deny all的选项,也就是说如果配置了ACL的话,一条数据流量若没有满足你配置的ACL中任何条目,它将被过滤掉,所以在通常情况下我们都会在ACL的最后加上一条permit any的语句,来放行没有匹配的流量。而且ACL只对穿过设备的流量进行控制,无法对设备产生的流量进行控制。
ACL共分为两类,标准访问控制列表(1-99)和扩展访问控制列表(100-199),在标准ACL中只将流量的源作为判定条件,所有策略均根据原IP地址来设计,在标准ACL中不能指定协议类型等具体项。扩展ACL能够判断第三层和第四层的网络协议数据包中的多种字段,如源与目的IP地址,端口号,协议种类等,能在标准ACL的基础上做出更细致更精准的策略。
使用ACL可以缓解多种安全威胁,如IP地址出入站欺骗,DDOS拒绝服务攻击,拒绝ICMP和traceroute消息出入站来防止攻击者窥探内部网络环境或者控制Telnet和SSH的访问。
访问控制列表举例
Access-list 110 deny tcp any host 172.16.50.5 eq 21
Access-list 110 deny tcp any host 172.16.50.5 eq 23
Access-list 110 permit ip any any
这条access-list 110说的是这是一个扩展ACL(110>100),对访问主机172.16.50.6的tcp协议的21端口和23端口的所有数据进行过滤。这两个端口分别表示FTP和Telnet,any的意思是源地址是任意,host标识目的地址是一个主机,ip地址是172.16.50.5。综上,这条ACL的意思就是除了去往172.16.50.5的FTP和Telnet会被过滤外,其他的均可正常通过。
接下来进入正题,如何使用ACL进行策略路由。我们一定听说过route-map,route-map是一种复杂的访问列表,使用match命令对数据包进行条件测试,若条件满足,就会采取一些由set命令指定的行为。同ACL一样,route-map也不能对本设备产生的流量进行控制。
Route-map的原理是:首先route-map本身也是一个列表,流量到来之后会从列表的上至下进行匹配,一旦匹配成功,进行相应的动作。匹配的条件时基于ACL或者prefix-list,若匹配至route-map列表末尾后仍没有找到对应项,则根据route-map应用场景的不同有不同的结果。在路由协议的转发策略中,若没有匹配项则本条路由不会被转发,若route-map应用在端口上则本次直接将它视为普通流量处理(该路由路由,该处理处理),并不会因为没有匹配到route-map而将此流量丢弃,这是route-map应用在端口和协议转发中的本质区别。
既然如此,route-map就可以在流量的入接口上进行一些凌驾于路由表之上的操作,比如非等价负载均衡,强制的负载均衡,用下面拓扑来举例子:
我们只想让源为5.5.5.0的VIP用户使用上面的VIP专用快速通道访问服务器1.1.1.1,而其他的普通用户使用下面的普通链路访问服务器,在这里我们就可以使用route-map进行强制的负载均衡,哪怕在R4上没有路由表,下面视具体配置。
首先我们先把EIGRP和R5的网络配好:
在R1上配置:
R1>en
R1#conf t
R1(config)#int lo 0
R1(config-if)#ip add 1.1.1.1 255.255.255.255
R1(config-if)#no sh
R1(config-if)#int f0/0
R1(config-if)#ip add 12.1.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#int s2/0
R1(config-if)#ip add 13.1.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#exi
R1(config)#router ei 90
R1(config-router)#no au
R1(config-router)#net 1.1.1.1 0.0.0.0
R1(config-router)#net 12.1.1.0 0.0.0.255
R1(config-router)#net 13.1.1.0 0.0.0.255
R1(config-router)#exi
在R2上配置:
R2>en
R2#conf t
R2(config)#int f0/0
R2(config-if)#ip add 12.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#int f0/1
R2(config-if)#ip add 24.1.1.2 255.255.255.0
R2(config-if)#no sh
R2(config-if)#exi
R2(config)#router ei 90
R2(config-router)#no au
R2(config-router)#net 12.1.1.0 0.0.0.255
R2(config-router)#net 24.1.1.0 0.0.0.255
R2(config-router)#exi
在R3上配置:
R3>en
R3#conf t
R3(config)#int s2/0
R3(config-if)#ip add 13.1.1.3 255.255.255.0
R3(config-if)#no sh
R3(config-if)#int s2/1
R3(config-if)#ip add 34.1.1.3 255.255.255.0
R3(config-if)#no sh
R3(config-if)#exi
R3(config)#router ei 90
R3(config-router)#no au
R3(config-router)#net 13.1.1.0 0.0.0.255
R3(config-router)#net 34.1.1.0 0.0.0.255
R3(config-router)#exi
在R4上配置:
R4>en
R4#conf t
R4(config)#int f0/1
R4(config-if)#ip add 24.1.1.4 255.255.255.0
R4(config-if)#no sh
R4(config-if)#int s1/1
R4(config-if)#ip add 34.1.1.4 255.255.255.0
R4(config-if)#int f0/0
R4(config-if)#ip add 45.1.1.4 255.255.255.0
R4(config-if)#no sh
R4(config-if)#exi
R4(config)#router ei 90
R4(config-router)#no au
R4(config-router)#net 24.1.1.0 0.0.0.255
R4(config-router)#net 34.1.1.0 0.0.0.255
R4(config-router)#exi
在R5进行配置:
R5>en
R5#conf t
R5(config)#int lo 0
R5(config-if)#ip add 5.5.5.5 255.255.255.255
R5(config-if)#no sh
R5(config-if)#int lo 1
R5(config-if)#ip add 50.5.5.5 255.255.255.255
R5(config-if)#no sh
R5(config-if)#int f0/0
R5(config-if)#ip add 45.1.1.5 255.255.255.0
R5(config-if)#no sh
R5(config-if)#exi
接下来在R4上配置去往5.5.5.5和50.5.5.5的静态路由并把R4的静态路由和直连重分发进EIGRP,然后在R5上配置默认路由:
R4(config)#ip route 5.5.5.0 255.255.255.0 f0/0
R4(config)#ip route 50.5.5.0 255.255.255.0 f0/0
R4(config)#router ei 90
R4(config-router)#redistribute connected metric 10000 1 255 1 1500
R4(config-router)#redistribute static metric 10000 1 255 1 1500
R4(config-router)#exi
R5(config)#ip route 0.0.0.0 0.0.0.0 f0/0
接下来就是重头戏了,我们在R4上配置策略来满足要求:5.5.5.0的用户流量可以走上面的快速通道,而50.5.5.0的用户只能走下面的普通通道。
R4(config)#access-list 10 permit 5.5.5.0 0.0.0.255
R4(config)#access-list 20 permit 50.5.5.0 0.0.0.255
R4(config)#route-map cisco permit 10
R4(config-route-map)#match ip address 10
R4(config-route-map)#set ip next-hop 24.1.1.2
R4(config-route-map)#exi
R4(config)#route-map cisco permit 20
R4(config-route-map)#match ip address 20
R4(config-route-map)#set ip next-hop 34.1.1.3
R4(config-route-map)#exi
R4(config)#int f0/0
R4(config-if)#ip policy route-map cisco
R4(config-if)#exi
这里一共三步:
接下来我们在R5上验证是否满足:
R5#traceroute 1.1.1.1 source 5.5.5.5
Type escape sequence to abort.
Tracing the route to 1.1.1.1
1 45.1.1.4 60 msec 60 msec 4 msec
2 24.1.1.2 192 msec 104 msec 120 msec
3 12.1.1.1 100 msec 116 msec 112 msec
R5#traceroute 1.1.1.1 source 50.5.5.5
Type escape sequence to abort.
Tracing the route to 1.1.1.1
1 45.1.1.4 52 msec 28 msec 36 msec
2 34.1.1.3 92 msec 100 msec 60 msec
3 13.1.1.1 132 msec 160 msec 144 msec
R5#traceroute 1.1.1.1 source 50.5.5.5
Type escape sequence to abort.
Tracing the route to 1.1.1.1
1 45.1.1.4 40 msec 48 msec 28 msec
2 34.1.1.3 68 msec 96 msec 72 msec
3 13.1.1.1 132 msec 180 msec 180 msec
R5#traceroute 1.1.1.1 source 5.5.5.5
Type escape sequence to abort.
Tracing the route to 1.1.1.1
1 45.1.1.4 36 msec 32 msec 28 msec
2 24.1.1.2 148 msec 68 msec 36 msec
3 12.1.1.1 148 msec 208 msec 144 msec
ok!达成!!