网络技术:配置扩展 ACL
ACL 数据包过滤
使用标准 ACL 就可以实现流量过滤功能,但是标准 ACL 的功能是有限的。首先标准 ACL 会将符合过滤规则的源 IP 地址的所有流量都筛出来,但是有时候并不希望过滤掉所有的流量,例如我们只是想限制某网络对 HTTP 服务的访问时,标准 ACL 会将一切流量都过滤而非只过滤 HTTP。其次标准 ACL 只能在网络层进行过夜,也就是只能对于数据包的源 IP 地址进行过滤,这就导致了最好将标准 ACL 配置在尽可能靠近目的地的接口。在实际的情况下往往目的是由目的地的管理员才有权限配置,这就导致标准 ACL 的功能效果有限。
扩展 ACL 可以在传输层和网络层进行过滤,也就是说使用扩展 ACL 可以对某种协议的流量进行过滤,这就使得安全策略可以配置得非常灵活。第二是扩展 ACL 可以对流量的目的地址进行过滤,这样不仅可以在数据包被路由之前就进行过滤减轻网络的负担,也能使过滤的功能更为强大。更重要的是,基于目的地址的过滤可以尽可能在靠近源的地方进行配置,就方便了网络管理员自行规划 ACL 策略。扩展 ACL 会对流量进行解包,根据数据包的协议类型(TCP、UDP 等协议)和端口号进行匹配。
ACL 的放置
对于接口来说,无论是扩展 ACL 还是标准 ACL,配置的规则是一样的——可以在每种协议、每个方向、每个接口上配置一个 ACL。
- 每种协议一个 ACL:控制接口的流量,必须为接口上启用的每种协议定义一个 ACL。
- 每个方向一个 ACL:一个 ACL 一次只能在一个接口上控制一个方向的流量,若要同时控制入站和出站流量,则必须分别创建两个 ACL。
- 每个接口一个 ACL:ACL 为一个接口控制流量,例如GigabitEthernet O/0。
对于整个网络来说,将扩展 ACL 放置在尽可能靠近需要过滤的流量源的位置上。这样不需要的流量会在靠近源网络的位置遭到拒绝,而无需通过网络基础设施。由于标准 ACL 不指定目的地址,所以其位置应该尽可能靠近目的地。除了 ACL 本身的功能决定了配置的方式,还有一些因素需要考虑:
- 网络管理员的控制范围:ACL 的放置位置取决于网络管理员是否能够同时控制源网络和目的网络。
- 相关网络的带宽:在源上过滤不需要的流量,可以在流量消耗通往目的地的路径上的带宽之前阻止流量传输。
- 配置的难易程度:扩展 ACL 可以在每台发出流量的路由器上使用,这通过在源上过滤流量而节省了带宽,但需要在多台路由器上创建扩展ACL。
配置标准 ACL 还是扩展 ACL,需要放置在什么地方,需要具体问题具体分析。
扩展 ACL 创建语法
扩展 ACL 根据多种属性过滤 IP 数据包:
- 协议类型;
- 源 IPv4 地址;
- 目的 IPv4 地址;
- 源 TCP 或 UDP 端口;
- 目的 TCP 或 UDP 端口;
- 用于进行精确控制的可选协议类型信息。
扩展 ACL 创建语法如下,命令涉及到了很多的参数。
Router(config)# access-list access-list-number {deny | permit | remark description protocol {source source-wildcard) [operator port [port-number|acl-name]]{destination destination-wildcard) [operator port [port-number | acl-name]]
参数 | 说明 |
---|---|
access-list-number | 使用 100~199 和 2000~2699 之间的编号标识访问列表 |
deny | 匹配条件时拒绝访问 |
permit | 匹配条件时允许访问 |
remark description | 用于输入注释,便于理解 |
protocol | Internet 协议的名称或编号,常用关键字包括 icmp、ip、tcp 或 udp,要匹配所有 Internet 协议可以使用 ip 关键字 |
source | 指定了发送数据包的网络号或主机号 |
source-wildcard | 指定了用于源地址的通配符比特 |
destination | 指定了接收数据包的网络号或主机号 |
destination-wildcard | 指定了用于目的地址的通配符比特 |
operator | (可选)比较源或目的端口,运算符包括 lt(小于)、gt(大于)、ea(等于)、neq(不等于)、range(包括的范围) |
port | (可选)指定 TCP 或 UDP 端口的编号或名称 |
established | (可选)仅用于 TCP 协议,指示已建立的连接 |
配置扩展 ACL
实验拓扑
设备 | 接口 | IP 地址 | 子网掩码 | 默认网关 |
---|---|---|---|---|
R1 | G0/1 | 192.168.10.1 | 255.255.255.0 | 不适用 |
Lo0 | 192.168.20.1 | 255.255.255.0 | 不适用 | |
S0/0/0 (DCE) | 10.1.1.1 | 255.255.255.252 | 不适用 | |
ISP | S0/0/0 | 10.1.1.2 | 255.255.255.252 | 不适用 |
S0/0/1 (DCE) | 10.2.2.2 | 255.255.255.252 | 不适用 | |
G0/0 | 209.165.200.226 | 255.255.255.224 | 不适用 | |
G0/1 | 209.165.201.2 | 255.255.255.224 | 不适用 | |
R3 | G0/1 | 192.168.30.1 | 255.255.255.0 | 不适用 |
Lo0 | 192.168.40.1 | 255.255.255.0 | 不适用 | |
S0/0/1 | 10.2.2.1 | 255.255.255.252 | 不适用 | |
S1 | VLAN 1 | 192.168.10.11 | 255.255.255.0 | 192.168.10.1 |
S3 | VLAN 1 | 192.168.30.11 | 255.255.255.0 | 192.168.30.1 |
PC-A | NIC | 192.168.10.3 | 255.255.255.0 | 192.168.10.1 |
PC-C | NIC | 192.168.30.3 | 255.255.255.0 | 192.168.30.1 |
Server0 | NIC | 209.165.200.225 | 255.255.255.224 | 不适用 |
Server1 | NIC | 209.165.201.1 | 255.255.255.224 | 不适用 |
在实验开始之前,需要先正确配置 PC、路由器和 WEB 服务器,并配置路由使得设备之间可以互通。
配置并验证扩展编号 ACL
对于该网络配置的安全策略如下:
- 允许来自 192.168.10.0/24 网络的 Web 流量访问任何网络。
- 允许 PC-A 通过 SSH 连接到 R3 串行接口。
- 允许 192.168.10.0/24 网络上的用户访问 192.168.20.0/24 网络。
- 允许来自 192.168.30.0/24 网络的 Web 流量通过 Web 界面访问 R1 及 ISP 上的 209.165.200.224/27 网络。192.168.30.0/24 网络不能通过 Web 访问其他任何网络。
扩展编号 ACL 的编号范围是 100-199 和 2000-2699,在 R1 上配置 ACL,ACL 编号使用 100。
R1(config)# access-list 100 remark Allow Web & SSH Access
R1(config)# access-list 100 permit tcp any any eq 80
HTTP 协议是 80 端口,所以应该把目的端口设为 80。如果将其置于 G0/1 上可能会阻止网络 192.168.10.0/24 上的用户访问连接到 R1 的任何其他 LAN,如 192.168.20.0/24 网络。因此,您将把它放在 S0/0/0 的 out 方向上。
R1(config)# interface s0/0/0
R1(config-if)# ip access-group 100 out
接下来查看 ACL 100 的配置情况,使用如下 2 个命令。
R1# show access-lists
R1# show ip interface s0/0/0
验证 ACL 100,在 PC-A 上打开 Web 浏览器访问 http://209.165.200.225,此操作应该会成功。
在 PC-A 的命令提示符下对 10.2.2.1 执行 ping 操作,由于 192.168.10.0/24 网络只允许 web 流量退出,所以 ping 操作会失败。
配置并验证扩展命名 ACL
在 R3 上配置策略,将该 ACL 命名为“WEB-POLICY”。
R3(config)# ip access-list extended WEB-POLICY
R3(config-ext-nacl)# permit tcp 192.168.30.0 0.0.0.255 209.165.200.224 0.0.0.31 eq 80
将 ACL “WEB-POLICY” 应用到 S0/0/1 接口。
R3(config-ext-nacl)# interface S0/0/1
R3(config-if)# ip access-group WEB-POLICY out
接下来查看 ACL “WEB-POLICY” 的配置情况,使用如下 2 个命令。
R3# show access-lists
R3# show ip interface s0/0/1
验证 ACL “WEB-POLICY”,在 PC-C 上打开 Web 浏览器访问 http://209.165.200.225 (ISP 路由器),此操作应该会成功。
在 PC-C 上打开到 http://209.165.201.1 的 Web 会话,此操作应该会失败。
在 PC-C 命令提示符下对 PC-A 执行 ping 操作,因为 192.168.30.0/24网络只允许 web 流量退出,所以 Ping 操作失败。
修改并验证扩展 ACL
由于 R1 和 R3 都应用了 ACL,因此 R1 和 R3 上的 LAN 网络之间不允许 ping 或其他流量类型。为了允许 192.168.10.0/24 和 192.168.30.0/24 网络之间的所有流量,需要修改 R1 和 R3 上的 ACL。
在 R1 上进入全局配置模式并修改 ACL。
R1(config)# ip access-list extended 100
R1(config-ext-nacl)# 20 permit ip 192.168.10.0 0.0.0.255 192.168.30.0 0.0.0.255
R1(config-ext-nacl)# end
使用 show access-lists 命令查看 ACL 100。
R1# show access-lists
在 R3 上进入全局配置模式并修改 ACL。
R3(config)# ip access-list extended WEB-POLICY
R3(config-ext-nacl)# 20 permit ip 192.168.30.0 0.0.0.255 192.168.10.0 0.0.0.255
R3(config-ext-nacl)# end
使用 show access-lists 命令查看 ACL WEB-POLICY。
R3# show access-lists
在 PC-A 上对 PC-C 的 IP 地址执行 ping 操作,或者在 PC-C 上对 PC-A 的 IP 地址执行 ping 操作,现在都可以成功。
参考资料
《思科网络技术学院教程(第6版):扩展网络》,[加] Bob Vachon,[美] Allan Johnson 著,思科系统公司 译,人民邮电出版社
《CCNA 学习指南(第 7 版)》,[美] Todd Lammle 著,袁国忠 徐宏 译,人民邮电出版社