思科路由器反射 ACL 的简单用法


一、反射 ACL 简介

如果现在要求在思科路由器上通过配置 ACL 来实现以下功能:

A 网段中的主机可以主动访问 B 网段中的主机,但 B 网段中的主机不可以主动访问 A 网段中的主机。

估计很多新人的给出的答案都是:

配置一个包含「A 网段允许访问 B 网段」和「B 网段禁止访问 A 网段」这两个条目的扩展 ACL 并应用在 A 网段或 B 网段所在接口的入方向上。

虽然思路是没问题的,但这种普通的扩展 ACL 只会机械地阻止所有 B 网段到 A 网段的流量,并不能放行由于 A 网段主动访问 B 网段而产生的 B 网段到 A 网段的流量。

请记住,在正常情况下,网络通信必须是双向的!

而通过配置反射 ACL 就可以轻松地解决这个问题。

反射 ACL 会记录每个连接的状态,然后根据记录来放行合法的反向流量。

不过,反射 ACL 还是有它的局限性的。

它对于那种正反向流量特征不相同的服务(例如主动式 FTP、NFS 等正反向端口不同的服务)就无能为力了。

不这样的话,防火墙还怎么卖,对吧。


二、网络拓扑图及说明

如上图,有 192.168.1.0/24192.168.2.0/24 两个网段。

现要求使用反射 ACL 来实现允许 192.168.1.0/24 主动访问 192.168.2.0/24,由此产生的反向流量也要被允许;但不允许 192.168.2.0/24 主动访问 192.168.1.0/24

以下路只介绍路由器反射 ACL 的配置方法。


三、配置方法

3.1 配置正向 ACL

说明
• 只有扩展命名式 ACL 才支持反射功能。

Router(config)#ip access-list extended net1_to_net2  % 创建一个名为 net1_to_net2 的扩展 ACL
Router(config-ext-nacl)#permit ip any 192.168.2.0 0.0.0.255 reflect back_to_1 timeout 30 % 允许 192.168.1.0/24 访问 192.168.2.0/24,且当该条目匹配到流量时,自动向名为 back_to_1 的反射 ACL 中添加一条超时时间为 30s 的反向允许条目
Router(config-ext-nacl)#exit

说明
• 反向 ACL 条目的超时时间指的是:当正向流量停止发送多久之后,反向 ACL 条目才会被删除。超时时间的默认值为 300s,但我感觉这太长了。另外,对于像 TCP 这种可以追踪到状态的流量,路由器会在连接结束时直接删除反向 ACL 条目,不必等到超时时间到。

3.2 配置反向 ACL

Router(config)#ip access-list extended net2_to_net1  % 创建一个名为 net2_to_net1 的扩展 ACL
Router(config-ext-nacl)#evaluate back_to_1  % 将名为 back_to_1 的反射 ACL 中的所有条目映射到该 ACL 上
Router(config-ext-nacl)#exit

说明
• 请记住,ACL 规则末尾都有一条拒绝所有流量的隐藏条目。

3.3 应用 ACL

Router(config)#interface ethernet 0/0
Router(config-if)#ip access-group net1_to_net2 in  % 应用正向 ACL
Router(config-if)#exit
Router(config)#interface ethernet 0/1
Router(config-if)#ip access-group net2_to_net1 in  % 应用反向 ACL
Router(config-if)#exit

四、验证结果

4.1 PING 测试

下面让 PC1 ping PC2,对比 ping 前后路由器 ACL 条目的状态。最后测试 PC2 ping PC1。

ping 之前路由器 ACL 条目的状态

Router#show ip access-lists 
Reflexive IP access list back_to_1  ← 反射 ACL 中没有条目
Extended IP access list net1_to_net2
    10 permit ip any 192.168.2.0 0.0.0.255 reflect back_to_1
Extended IP access list net2_to_net1
    10 evaluate back_to_1

PC1 ping PC2

VPCS> ping 192.168.2.2
84 bytes from 192.168.2.2 icmp_seq=1 ttl=63 time=0.740 ms
84 bytes from 192.168.2.2 icmp_seq=2 ttl=63 time=0.370 ms
84 bytes from 192.168.2.2 icmp_seq=3 ttl=63 time=0.934 ms
84 bytes from 192.168.2.2 icmp_seq=4 ttl=63 time=0.701 ms
84 bytes from 192.168.2.2 icmp_seq=5 ttl=63 time=0.947 ms
↑ ping 成功

ping 之后路由器 ACL 列表的状态

Router#show ip access-lists % 这里手速要快,不能过了超时时间
Reflexive IP access list back_to_1
     permit icmp host 192.168.2.2 host 192.168.1.2  (10 matches) (time left 26)  ← 反射 ACL 已经有相应的反向条目了
Extended IP access list net1_to_net2
    10 permit ip any 192.168.2.0 0.0.0.255 reflect back_to_1 (6 matches)
Extended IP access list net2_to_net1
    10 evaluate back_to_1

PC2 ping PC1

VPCS> ping 192.168.1.2
*192.168.2.1 icmp_seq=1 ttl=255 time=0.719 ms (ICMP type:3, code:13, Communication administratively prohibited)
*192.168.2.1 icmp_seq=2 ttl=255 time=0.482 ms (ICMP type:3, code:13, Communication administratively prohibited)
*192.168.2.1 icmp_seq=3 ttl=255 time=0.529 ms (ICMP type:3, code:13, Communication administratively prohibited)
*192.168.2.1 icmp_seq=4 ttl=255 time=0.355 ms (ICMP type:3, code:13, Communication administratively prohibited)
*192.168.2.1 icmp_seq=5 ttl=255 time=0.197 ms (ICMP type:3, code:13, Communication administratively prohibited)
↑ ping 失败(访问请求被禁止)

4.2 TCP 测试

下面大家看下现象就好了,原理都差不多,就不再做过多解释了。

PC1 连接 PC2

VPCS> ping 192.168.2.2 -P 6
Connect   [email protected] seq=1 ttl=63 time=3.596 ms
SendData  [email protected] seq=1 ttl=63 time=1.283 ms
Close     [email protected] seq=1 ttl=63 time=2.343 ms
Connect   [email protected] seq=2 ttl=63 time=1.164 ms
SendData  [email protected] seq=2 ttl=63 time=1.188 ms
Close     [email protected] seq=2 ttl=63 time=2.478 ms
Connect   [email protected] seq=3 ttl=63 time=2.400 ms
SendData  [email protected] seq=3 ttl=63 time=1.225 ms
Close     [email protected] seq=3 ttl=63 time=2.447 ms
Connect   [email protected] seq=4 ttl=63 time=2.511 ms
SendData  [email protected] seq=4 ttl=63 time=1.251 ms
Close     [email protected] seq=4 ttl=63 time=2.475 ms
Connect   [email protected] seq=5 ttl=63 time=1.218 ms
SendData  [email protected] seq=5 ttl=63 time=1.245 ms
Close     [email protected] seq=5 ttl=63 time=2.442 ms
↑ TCP 连接成功

PC2 连接 PC1

VPCS> ping 192.168.1.2 -P 6
*192.168.2.1 tcp_seq=1 ttl=255 time=1.256 ms (ICMP type:3, code:13, Communication administratively prohibited)
*192.168.2.1 tcp_seq=3 ttl=255 time=1.177 ms (ICMP type:3, code:13, Communication administratively prohibited)
*192.168.2.1 tcp_seq=5 ttl=255 time=1.216 ms (ICMP type:3, code:13, Communication administratively prohibited)
↑ TCP 连接失败(访问请求被禁止)

4.3 UDP 测试

下面大家看下现象就好了,原理都差不多,就不再做过多解释了。

PC1 连接 PC2

VPCS> ping 192.168.2.2 -P 17
84 bytes from 192.168.2.2 udp_seq=1 ttl=63 time=2.281 ms
84 bytes from 192.168.2.2 udp_seq=2 ttl=63 time=1.106 ms
84 bytes from 192.168.2.2 udp_seq=3 ttl=63 time=0.961 ms
84 bytes from 192.168.2.2 udp_seq=4 ttl=63 time=0.791 ms
84 bytes from 192.168.2.2 udp_seq=5 ttl=63 time=0.862 ms
↑ UDP 连接成功

PC2 连接 PC1

VPCS> ping 192.168.1.2 -P 17
*192.168.2.1 udp_seq=1 ttl=255 time=0.379 ms (ICMP type:3, code:13, Communication administratively prohibited)
*192.168.2.1 udp_seq=2 ttl=255 time=0.274 ms (ICMP type:3, code:13, Communication administratively prohibited)
*192.168.2.1 udp_seq=3 ttl=255 time=0.528 ms (ICMP type:3, code:13, Communication administratively prohibited)
*192.168.2.1 udp_seq=4 ttl=255 time=0.497 ms (ICMP type:3, code:13, Communication administratively prohibited)
*192.168.2.1 udp_seq=5 ttl=255 time=0.607 ms (ICMP type:3, code:13, Communication administratively prohibited)
↑ UDP 连接失败(访问请求被禁止)

发表评论

电子邮件地址不会被公开。