简介
本文档介绍用于过滤IP数据包的常用IP访问控制列表(ACL)的配置示例。
先决条件
要求
在尝试进行此配置之前,请确保满足以下要求:
有关其他信息,请参阅 IP 编址和子网划分入门指南。
使用的组件
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
IP访问控制列表根据以下内容过滤数据包:
为了过滤网络数据流,ACL 会控制是转发路由数据包还是将其阻止在路由器接口外。路由器检查每个数据包,从而基于在 ACL 中指定的标准来决定是转发还是丢弃数据包。ACL 标准包括:
完成以下步骤,以构建本文档中示例所示的 ACL:
- 创建 ACL。
- 将 ACL 应用到某个接口上。
IP ACL 是由应用于 IP 数据包的允许和拒绝条件组成的一个有序集合。路由器将根据 ACL 中的条件逐个测试数据包。
第一个匹配的条件将决定 Cisco IOS® 软件是接受还是拒绝数据包。由于Cisco IOS软件在第一次匹配后停止条件测试,因此条件的顺序至关重要。如果没有任何条件匹配,路由器将根据一个隐式 deny all 子句拒绝数据包。
以下是可在 Cisco IOS 软件中配置的 IP ACL 示例:
- 标准 ACL
- 扩展 ACL
- 动态(锁和密钥)ACL
- IP 命名 ACL
- 自反 ACL
- 使用时间范围的基于时间的 ACL
- 带有注释的 IP ACL 条目
- 基于上下文的 ACL
- 身份验证代理
- Turbo ACL
- 基于时间的分布式 ACL
本文档讨论一些常用的标准 ACL 和扩展 ACL。有关 Cisco IOS 软件支持的各类 ACL 以及如何配置和编辑 ACL 的详细信息,请参阅配置 IP 访问列表。
标准ACL的命令语法格式为access-list access-list-number {permit|deny} {host|source source-wildcard|any}。
标准 ACL 将 IP 数据包的源地址与 ACL 中配置的地址进行比较,以实现流量控制。
扩展 ACL 将 IP 数据包的源地址和目的地址与 ACL 中配置的地址进行比较,以实现流量控制。您也可以将扩展 ACL 设置为采用更精细的控制粒度,将其配置为根据以下标准过滤数据流:
- 协议
- 端口号
- 差分服务代码点 (DSCP) 值
- 优先级值
- 同步序列号 (SYN) 位的状态
扩展 ACL 的命令语法格式为:
IP
access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny | permit} protocol source source-wildcard destination destination-wildcard
[precedence precedence] [tos tos] [log | log-input]
[time-range time-range-name][fragments]
Internet Control Message Protocol (ICMP)
access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny | permit} icmp source source-wildcard destination destination-wildcard
[[icmp-type] [icmp-code] | [icmp-message]] [precedence precedence] [tos tos] [log | log-input]
[time-range time-range-name][fragments]
传输控制协议 (TCP)
access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny | permit} tcp source source-wildcard [operator [port]] destination destination-wildcard [operator [port]]
[established] [precedence precedence] [tos tos] [log | log-input]
[time-range time-range-name][fragments]
用户数据报协议 (UDP)
access-list access-list-number [dynamic dynamic-name [timeout minutes]]
{deny | permit} udp source source-wildcard [operator [port]] destination destination-wildcard [operator [port]]
[precedence precedence] [tos tos] [log | log-input]
[time-range time-range-name][fragments]
配置
这些配置示例使用了最常见的 IP ACL。
允许选定主机访问网络
此图显示已授予选定主机访问网络的权限。从主机 B 发往 NetA 的所有数据流都得到允许,而其他所有从 NetB 发往 NetA 的数据流都遭到拒绝。

R1 表中的输出显示了网络如何向主机授予访问权限。该输出说明:
默认情况下,每个 ACL 末尾都有一个隐式 deny all 子句。任何没有显式允许的数据流都将遭到拒绝。
R1
hostname R1
!
interface ethernet0
ip access-group 1 in
!
access-list 1 permit host 192.168.10.1
注意:ACL过滤从NetB到NetA的IP数据包,但源自主机B的数据包除外。仍允许源自主机B到NetA的数据包。
注意:ACL access-list 1 permit 192.168.10.1 0.0.0.0 是配置相同规则的另一种方法。
拒绝选定主机访问网络
下图显示了这种情况:从主机 B 发往 NetA 的数据流遭到拒绝,而其他所有从 NetB 发出以访问 NetA 的数据流都得到了允许。

此配置拒绝主机 192.168.10.1/32 上的所有数据包通过 R1 上的以太网 0 接口,但允许其他所有数据包。由于每个 ACL 都有一个隐式 deny all 子句,因此您必须使用 access list 1 permit any 命令显式允许其他所有数据包。
R1
hostname R1
!
interface ethernet0
ip access-group 1 in
!
access-list 1 deny host 192.168.10.1
access-list 1 permit any
注意:语句顺序对 ACL 的操作至关重要。如果颠倒了条目顺序,如此命令所示,则第一行与每个数据包的源地址都匹配。因此,ACL 无法阻止主机 192.168.10.1/32 访问 NetA。
access-list 1 permit any
access-list 1 deny host 192.168.10.1
允许访问一个范围内的连续 IP 地址
下图显示了 NetB 中网络地址为 192.168.10.0/24 的所有主机都能访问 NetA 中地址为 192.168.200.0/24 的网络。

如果某个 IP 数据包的 IP 报头显示的源地址在网络 192.168.10.0/24 中,而目标地址在网络 192.168.200.0/24 中,此配置将允许这种数据包访问 NetA。ACL 末尾有隐式 deny all 子句,将拒绝其他所有数据流通过 R1 上的以太网 0 入站。
R1
hostname R1
!
interface ethernet0
ip access-group 101 in
!
access-list 101 permit ip 192.168.10.0 0.0.0.255 192.168.200.0 0.0.0.255
注意:在access-list 101 permit ip 192.168.10.0 0.0.255 192.168.200.0 0.0.0.255命令中,“0.0.0.255”是掩码为255.255.255.0的网络192.168.10.0的反掩码。ACL使用反掩码来了解网络地址中需要多少位匹配。上表中,ACL 允许源地址位于 192.168.10.0/24 网络中且目标地址位于 192.168.200.0/24 网络中的所有主机。
要详细了解网络地址的掩码以及如何计算 ACL 所需的反掩码,请参阅配置 IP 访问列表的掩码部分。
拒绝 Telnet流量(TCP、端口 23)
为了满足更高的安全要求,您可以禁止从公共网络对您的专用网络进行Telnet访问。下图显示了如何拒绝从 NetB(公共)发往 NetA(专用)的 Telnet 数据流,但同时允许其他所有 IP 数据流,也允许 NetA 发起并建立与 NetB 的 Telnet 会话。

Telnet使用TCP端口23。此配置显示,所有发往NetA的TCP流量都将被阻止,而且所有其他IP流量都将被允许。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 deny tcp any any eq 23
access-list 102 permit ip any any
只允许内部网络发起 TCP 会话
下图显示了允许从 NetA 发往 NetB 的 TCP 数据流,但拒绝从 NetB 发往 NetA 的 TCP 数据流。

本示例中 ACL 的目的是:
当数据报具备以下条件时,此配置允许数据报通过 R1 上的以太网 0 接口入站:
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any any gt 1023 established
由于大多数已知的IP服务端口使用的值小于1023,因此ACL 102会拒绝目标端口小于1023或未设置ACK/RST位的任何数据报。因此,当来自NetB的主机发起TCP连接并为小于1023的端口号发送第一个TCP数据包(未设置同步/开始数据包(SYN/RST)位)时,它会遭到拒绝,TCP会话失败。从 NetA 发往 NetB 的 TCP 会话将得到允许,因为它已设置用于返回数据包的 ACK/RST 位并且使用的端口值大于 1023。
有关端口的完整列表,请参阅 RFC 1700 。
拒绝 FTP 数据流(TCP、端口 21)
下图显示了拒绝从 NetB 发往 NetA 的 FTP(TCP,端口 21)和 FTP 数据(端口 20)流量,但允许其他所有 IP 数据流。

FTP使用端口21和端口20。将拒绝发往端口21和端口20的TCP流量,并明确允许其他所有流量。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 deny tcp any any eq ftp
access-list 102 deny tcp any any eq ftp-data
access-list 102 permit ip any any
允许 FTP 数据流(主动 FTP)
FTP 能以主动和被动两种不同模式进行操作。
当 FTP 以主动模式操作时,FTP 服务器将端口 21 用于控制,将端口 20 用于数据。FTP 服务器 (192.168.1.100) 位于 NetA 中。下图显示了允许从 NetB 发往 FTP 服务器 (192.168.1.100) 的 FTP(TCP,端口 21)和 FTP 数据(端口 20)流量,但拒绝其他所有 IP 数据流。

R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any host 192.168.1.100 eq ftp
access-list 102 permit tcp any host 192.168.1.100 eq ftp-data established
!
interface ethernet1
ip access-group 110 in
!
access-list 110 permit host 192.168.1.100 eq ftp any established
access-list 110 permit host 192.168.1.100 eq ftp-data any
允许 FTP 数据流(被动 FTP)
FTP 能以主动和被动两种不同模式进行操作。
当 FTP 以被动模式操作时,FTP 服务器将端口 21 用于控制,将编号大于或等于 1024 的动态端口用于数据。FTP 服务器 (192.168.1.100) 位于 NetA 中。下图显示了允许从 NetB 发往 FTP 服务器 (192.168.1.100) 的 FTP(TCP,端口21)和 FTP 数据(端口大于或等于 1024)流量,但拒绝其他所有 IP 数据流。

R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any host 192.168.1.100 eq ftp
access-list 102 permit tcp any host 192.168.1.100 gt 1023
!
interface ethernet1
ip access-group 110 in
!
access-list 110 permit host 192.168.1.100 eq ftp any established
access-list 110 permit host 192.168.1.100 gt 1023 any established
允许 ping (ICMP)
下图显示了允许从 NetA 发往 NetB 的 ICMP,但拒绝从 NetB 发往 NetA 的 ping。

此配置仅允许从 NetB 到 NetA 的 Echo 应答(ping 响应)数据包通过以太网 0 接口入站。但是,当 ping 是从 NetB 发往 NetA 时,此配置将阻止所有的 Echo 请求 ICMP 数据包。因此,NetA 中的主机能对 NetB 中的主机执行 ping 操作,但 NetB 中的主机不能对 NetA 中的主机执行 ping 操作。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit icmp any any echo-reply
允许 HTTP、Telnet、Mail、POP3、FTP
下图显示了仅允许 HTTP、Telnet、Simple Mail Transfer Protocol (SMTP)、POP3 和 FTP 数据流,并拒绝其他所有从 NetB 发往 NetA 的数据流。

此配置允许目标端口值与 WWW(端口 80)、Telnet(端口 23)、SMTP(端口 25)、POP3(端口 110)、FTP(端口 21)或 FTP 数据(端口 20)匹配的 TCP 数据流。 请注意,ACL 末尾的隐式 deny all 字句将拒绝其他所有不匹配 permit 子句的数据流。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any any eq www
access-list 102 permit tcp any any eq telnet
access-list 102 permit tcp any any eq smtp
access-list 102 permit tcp any any eq pop3
access-list 102 permit tcp any any eq 21
access-list 102 permit tcp any any eq 20
允许 DNS
下图显示了仅允许域名系统 (DNS) 数据流,并拒绝其他所有从 NetB 发往 NetA 的数据流。

此配置允许目标端口值为53的TCP流量。ACL末尾的隐式deny all子句拒绝与permit子句不匹配的所有其他流量。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit udp any any eq domain
access-list 102 permit udp any eq domain any
access-list 102 permit tcp any any eq domain
access-list 102 permit tcp any eq domain any
允许路由更新
当您对接口应用入站 ACL 时,请确保路由更新没有被过滤掉。使用此列表中的相关 ACL,以便允许路由协议数据包:
输入以下命令以允许路由信息协议 (RIP) 数据包通过:
access-list 102 permit udp any any eq rip
输入以下命令以允许内部网关路由协议 (IGRP) 数据包通过:
access-list 102 permit igrp any any
输入以下命令以允许增强型 IGRP (EIGRP) 数据包通过:
access-list 102 permit eigrp any any
输入以下命令以允许开放最短路径优先 (OSPF) 数据包通过:
access-list 102 permit ospf any any
输入以下命令以允许边界网关协议 (BGP) 数据包通过:
access-list 102 permit tcp any any eq 179
access-list 102 permit tcp any eq 179 any
根据 ACL 调试数据流
要使用 debug 命令就需要分配系统资源(如内存和处理能力),在极少数情况下会导致系统因负载过高而停止运行。因此请慎用 debug 命令。使用ACL可以有选择地定义需要检查的流量,以减少debug命令的影响。这样的配置不会过滤任何数据包。
此配置仅针对主机 10.1.1.1 和主机 172.16.1.1 之间的数据包启用 debug ip packet 命令。
R1(config)#access-list 199 permit tcp host 10.1.1.1 host 172.16.1.1
R1(config)#access-list 199 permit tcp host 172.16.1.1 host 10.1.1.1
R1(config)#end
R1#debug ip packet 199 detail
IP packet debugging is on (detailed) for access list 199
要了解关于 debug 命令影响的其他信息,请参阅有关 debug 命令的重要信息。
要了解关于配合使用 ACL 与 debug 命令的其他信息,请参阅了解 ping 和 traceroute 命令中的使用 debug 命令部分。
MAC 地址过滤
您可以过滤带有特定 MAC 层站点的源地址或目标地址的帧。可以向系统中配置任意数量的地址,而不会对性能产生影响。要按照 MAC 层地址进行过滤,请在全局配置模式下使用以下命令:
Router#config terminal
Router(config)#bridge irb
Router(config)#
bridge 1 protocol ieee
Router(config)#
bridge 1 route ip
将网桥协议应用于需要过滤流量的接口,并使用命令bridge-group <group number> {input-address-list <ACL number>创建的访问列表 | output-address-list <ACL number>}:
Router#config terminal
Router(config-if)#
interface fastEthernet0/0
Router(config-if)#
no ip address
Router(config-if)#
bridge-group 1 input-address-list 700
Router(config-if)#
exit
创建桥接虚拟接口并应用分配给物理以太网接口的IP地址:
Router#config terminal
Router(config-if)#
int bvi1
Router(config-if)#
ip address 192.168.1.1 255.255.255.0
Router(config-if)#
exit
Router(config)#
access-list 700 deny aaaa.bbbb.cccc 0000.0000.0000
Router(config)#
access-list 700 permit 0000.0000.0000 ffff.ffff.ffff
使用此配置,路由器仅允许在access-list 700上配置的MAC地址。使用access list命令access-list <ACL number> deny <mac address> 000.0000.0000,拒绝不能访问的MAC地址,然后允许其余地址(例如aaaaa.bbb.cccc)。
注意:为每个 MAC 地址创建访问列表的每一行条目。
验证
当前没有可用于此配置的验证过程。
故障排除
当前没有故障排除此配置的特定可用资料。
相关信息