此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档介绍各种类型的IP访问控制列表(ACL),以及它们如何过滤网络流量。
本文档没有任何特定的前提条件。Cisco IOS®软件版本8.3或更高版本中介绍了所讨论的概念。这在每个访问列表功能下都有标注。
本文档将讨论各种类型的 ACL。其中某些类型存在于 Cisco IOS 软件版本 8.3 及更高版本中,而其他类型则在更高的软件版本中引入。这一点在讨论每种类型时都有标注。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
有关文档规则的详细信息,请参阅思科技术提示规则。
本文档介绍了 IP 访问控制列表 (ACL) 如何能过滤网络流量。其中还包含 IP ACL 类型的简要描述、功能可用性以及网络使用示例。
注:RFC 1700包含已分配的公认端口数。RFC 1918包含专用Internet的地址分配,IP地址通常不能在Internet上看到。
注意:只有注册的思科用户才能访问内部信息。
注意:ACL还可用于定义流向网络地址转换(NAT)的流量、加密或过滤非IP协议(如AppleTalk或IPX)。有关这些功能的详细信息不在本文档的讨论范围之内。
掩码与IP ACL中的IP地址一起使用,指定必须允许和拒绝的内容。掩码用于在接口上配置IP地址,从255开始,并在左侧显示大值,例如,IP地址10.165.202.129和掩码255.255.255.224。IP ACL 的掩码则相反,如掩码 0.0.0.255。它有时称为反掩码或通配符掩码。当掩码的值被分解为二进制(0和1)时,结果将确定在处理流量时要考虑的地址位。0表示必须考虑地址位(完全匹配);掩码中的1表示忽略。下表进一步说明了这一概念。
掩码示例 | |
---|---|
网络地址(要处理的数据流) | 10.1.1.0 |
掩码 | 0.0.0.255 |
网络地址(二进制) | 00001010.00000001.00000001.00000000 |
掩码(二进制) | 00000000.00000000.00000000.11111111 |
从二进制掩码可以看出,前三组(八位字节)必须与给定的二进制网络地址 (00001010.00000001.00000001) 完全匹配。最后一组数字无关紧要(.11111111)。因此,以10.1.1.开头的所有流量自最后一个八位组以来都与之匹配。因此,通过该掩码,从 10.1.1.1 到 10.1.1.255 (10.1.1.x) 的网络地址均可处理。
将 255.255.255.255 减去正常掩码可确定 ACL 反掩码。在本示例中,确定的反掩码将用于正常掩码为 255.255.255.0 的网络地址 172.16.1.0。
255.255.255.255 - 255.255.255.0(正常掩码)= 0.0.0.255(反掩码)
注意对应的ACL。
源/通配符0.0.0.0/255.255.255.255表示any。
源/通配符10.1.1.2/0.0.0.0与主机10.1.1.2相同。
注意:子网掩码也可以表示为固定长度记法。例如,192.168.10.0/24 代表 192.168.10.0 255.255.255.0。
此列表说明了如何将一系列网络汇总为单个网络以进行 ACL 优化。请考虑以下这些网络。
192.168.32.0/24 192.168.33.0/24 192.168.34.0/24 192.168.35.0/24 192.168.36.0/24 192.168.37.0/24 192.168.38.0/24 192.168.39.0/24
每个网络的前两个八位组和最后一个八位组都是相同的。该表说明了如何将这些网络汇总为单个网络。
如上表所示,可以写入前几个网络的第三个二进制八位数,对应于每个位的二进制八位数位和地址值。
十进制 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
32 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
33 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
34 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
35 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
36 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
37 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 |
38 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 |
39 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
M | M | M | M | M | D | D | D |
由于前五位匹配,因此可将以上八个网络汇总为一个网络(192.168.32.0/21 或 192.168.32.0 255.255.248.0)。三个低位的所有八个可能的组合则与相关的网络范围有关。以下命令定义了一个允许该网络的 ACL。将 255.255.255.255 减去 255.255.248.0(正常掩码),即可得到 0.0.7.255。
access-list acl_permit permit ip 192.168.32.00.0.7.255
请考虑以下这组网络以进行进一步说明。
192.168.146.0/24 192.168.147.0/24 192.168.148.0/24 192.168.149.0/24
每个网络的前两个八位组和最后一个八位组都是相同的。该表格说明了如何对这些进行汇总。
如上表所示,可以写入前几个网络的第三个二进制八位数,对应于每个位的二进制八位数位和地址值。
十进制 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
146 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
147 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 |
148 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
149 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
M | M | M | M | M | ? | ? | ? |
与上一个示例不同,您不能将这些网络汇总为单个网络。如果将它们总结为一个网络,则它们会变为192.168.144.0/21,因为第三个二进制八位数中有五个类似位。该总结网络192.168.144.0/21涵盖从192.168.144.0到192.168.151.0的一系列网络。其中,192.168.144.0、192.168.145.0、192.168.150.0和192.168.151.0网络不在四个网络的给定列表中。为了覆盖有问题的特定网络,至少需要两个总结网络。给定的四个网络可以总结为以下两个网络:
对于网络192.168.146.x和192.168.147.x,除最后一个位外,所有位都匹配,这是无关的。可以将此写为 192.168.146.0/23(或 192.168.146.0 255.255.254.0)。
对于网络192.168.148.x和192.168.149.x,除最后一个位外,所有位都匹配,这是无关的。可将此写为 192.168.148.0/23(或 192.168.148.0 255.255.254.0)。
此输出为之前的网络定义了一个汇总ACL。
!--- This command is used to allow access access for devices with IP
!--- addresses in the range from 192.168.146.0 to 192.168.147.254. access-list 10 permit 192.168.146.00.0.1.255
!--- This command is used to allow access access for devices with IP
!--- addresses in the range from 192.168.148.0 to 192.168.149.254 access-list 10 permit 192.168.148.00.0.1.255
进入路由器的数据流将按照 ACL 条目在路由器中的顺序与 ACL 条目相比较。新的语句会添加到列表末尾。路由器会继续查看,直到出现匹配。如果路由器到达列表末端时还未找到匹配,数据流将被拒绝。因此,您必须在列表顶部列出经常命中的条目。对于不允许的数据流,将默认拒绝。仅包含一个deny条目的单条目ACL可以拒绝所有流量。您必须在 ACL 中至少包含一条允许语句,否则所有数据流都会受阻。这两个 ACL(101 和 102)的作用相同。
!--- This command is used to permit IP traffic from 10.1.1.0
!--- network to 172.16.1.0 network. All packets with a source
!--- address not in this range will be rejected. access-list 101 permit ip 10.1.1.0 0.0.0.255 172.16.1.00.0.0.255
!--- This command is used to permit IP traffic from 10.1.1.0
!--- network to 172.16.1.0 network. All packets with a source
!--- address not in this range will be rejected. access-list 102 permit ip 10.1.1.0 0.0.0.255 172.16.1.00.0.0.255
access-list 102 deny ip any any
在下一个示例中,最后一个条目已足够。您不需要前三个条目,因为IP包括TCP、用户数据报协议(UDP)和Internet控制消息协议(ICMP)。
!--- This command is used to permit Telnet traffic
!--- from machine 10.1.1.2 to machine 172.16.1.1. access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet
!--- This command is used to permit tcp traffic from
!--- 10.1.1.2 host machine to 172.16.1.1 host machine. access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1
!--- This command is used to permit udp traffic from
!--- 10.1.1.2 host machine to 172.16.1.1 host machine. access-list 101 permit udp host 10.1.1.2 host 172.16.1.1
!--- This command is used to permit ip traffic from
!--- 10.1.1.0 network to 172.16.1.10 network. access-list 101 permit ip 10.1.1.0 0.0.0.255 172.16.1.00.0.0.255
您不仅可以定义ACL源和目标,还可以定义端口、ICMP消息类型和其他参数。要了解有关通用端口的信息,请参阅 RFC 1700。有关 ICMP 消息类型的说明,请参阅 RFC 792。
路由器可显示有关某些通用端口的描述性文本。使用?获得帮助。
access-list 102 permit tcp host 10.1.1.1 host 172.16.1.1 eq ? bgp Border Gateway Protocol (179) chargen Character generator (19) cmd Remote commands (rcmd, 514)
在配置过程中,路由器还会将数值转换为更加方便的值。这是一个示例,您在这里键入ICMP消息类型编号,该编号会导致路由器将该编号转换为名称。
access-list 102 permit icmp host 10.1.1.1 host 172.16.1.1 14
变成
access-list 102 permit icmp host 10.1.1.1 host 172.16.1.1 timestamp-reply
您可以定义ACL,但无法应用它们。但在应用于路由器接口之前 ACL 并不会生效。较好的做法是,在与源数据流最近的接口上应用 ACL。如本示例所示,当您尝试阻止从源到目的地的流量时,您可以将入站ACL应用到路由器A上的E0,而不是将出站列表应用到路由器C上的E1。访问列表在任何访问列表的末尾都隐含着域名ip any。如果流量与DHCP请求相关,且未明确允许,则丢弃流量,因为当您在IP中查看DHCP请求时,源地址为s=0.0.0.0(Ethernet1/0),d=255.255.255.255,len 604,rcvd 2 UDP src=68,dst=67。请注意,源IP地址为0.0.0.0,目的地址为255.255.255.255。源端口为 68,目标端口为 67。因此,您必须在访问列表中允许此类流量,否则,由于语句末尾存在隐式拒绝,流量将被丢弃。
注意:要通过UDP流量,ACL也必须明确允许UDP流量。
路由器使用“输入”、“输出”、“源”和“目标”作为引用术语。路由器上的数据流可以比作高速公路上的交通。如果你是宾夕法尼亚州的执法人员想要截停一辆从马里兰开往纽约的卡车从马里兰源头到纽约目的地是纽约路障可以在宾夕法尼亚 — 纽约边界(外)或马里兰 — 宾夕法尼亚(内)边界。
涉及到路由器时,这些术语有以下几种含义。
输出 — 已通过路由器且离开接口的数据流。源位置是它在路由器另一端曾经所在的位置,而目标位置是它要到达的位置。
输入 — 到达接口并通过路由器的数据流。源位置是它曾经所在的位置,目标位置是在路由器另一端它要到达的位置。
入站 — 如果是入站访问列表,则当路由器接收到数据包时,Cisco IOS 软件将检查访问列表中的条件语句,看是否有匹配。如果数据包被允许,则软件将继续处理该数据包。如果数据包被拒绝,则软件会丢弃该数据包。
出站 — 如果是出站访问列表,则当软件到接收数据包并将群其路由至出站接口后,软件将检查访问列表中的条件语句,看是否有匹配。如果数据包被允许,则软件会发送该数据包。如果数据包被拒绝,则软件会丢弃该数据包。
输入 ACL 的源位置在其应用的接口分段上,目标位置在其他任意接口上。输出 ACL 的源位置在除其应用的接口之外的任意接口的分段上,目标位置在其应用的接口上。
编辑 ACL 时需要特别注意。例如,如果您打算从此处所示的编号 ACL 中删除特定的某一行,则整个 ACL 将被删除。
!--- The access-list 101 denies icmp from any to any network
!--- but permits IP traffic from any to any network. router#configure terminal Enter configuration commands, one per line. End with CNTL/Z. router(config)#access-list 101 deny icmp any any router(config)#access-list 101 permit ip any any router(config)#^Z router#show access-list Extended IP access list 101 deny icmp any any permit ip any any router# *Mar 9 00:43:12.784: %SYS-5-CONFIG_I: Configured from console by console router#configure terminal Enter configuration commands, one per line. End with CNTL/Z. router(config)#no access-list 101 deny icmp any any router(config)#^Z router#show access-list router# *Mar 9 00:43:29.832: %SYS-5-CONFIG_I: Configured from console by console
将路由器的配置复制到 TFTP 服务器或文本编辑器(如记事本),以编辑编号 ACL。然后进行任意更改并将配置复制回路由器。
您也可以这样操作。
router#configure terminal Enter configuration commands, one per line. router(config)#ip access-list extended test !--- Permits IP traffic from 10.2.2.2 host machine to 10.3.3.3 host machine. router(config-ext-nacl)#permit ip host 10.2.2.2 host 10.3.3.3 !--- Permits www traffic from 10.1.1.1 host machine to 10.5.5.5 host machine. router(config-ext-nacl)#permit tcp host 10.1.1.1 host 10.5.5.5 eq www !--- Permits icmp traffic from any to any network. router(config-ext-nacl)#permit icmp any any !--- Permits dns traffic from 10.6.6.6 host machine to 10.10.10.0 network. router(config-ext-nacl)#permit udp host 10.6.6.6 10.10.10.0 0.0.0.255 eq domain router(config-ext-nacl)#^Z 1d00h: %SYS-5-CONFIG_I: Configured from console by consoles-l router#show access-list Extended IP access list test permit ip host 10.2.2.2 host 10.3.3.3 permit tcp host 10.1.1.1 host 10.5.5.5 eq www permit icmp any any permit udp host 10.6.6.6 10.10.10.0 0.0.0.255 eq domain
删除的任意内容将从 ACL 中移除,添加的任意内容将加至 ACL 末尾。
router#configure terminal Enter configuration commands, one per line. End with CNTL/Z. router(config)#ip access-list extended test !--- ACL entry deleted. router(config-ext-nacl)#no permit icmp any any !--- ACL entry added. router(config-ext-nacl)#permit gre host 10.4.4.4 host 10.8.8.8 router(config-ext-nacl)#^Z 1d00h: %SYS-5-CONFIG_I: Configured from console by consoles-l router#show access-list Extended IP access list test permit ip host 10.2.2.2 host 10.3.3.3 permit tcp host 10.1.1.1 host 10.5.5.5 eq www permit udp host 10.6.6.6 10.10.10.0 0.0.0.255 eq domain permit gre host 10.4.4.4 host 10.8.8.8
还可以按照 Cisco IOS 中的序列号将 ACL 行添加到标准编号 ACL 或扩展编号 ACL 中。以下是一个配置示例:
用以下方式配置扩展 ACL:
Router(config)#access-list 101 permit tcp any any Router(config)#access-list 101 permit udp any any Router(config)#access-list 101 permit icmp any any Router(config)#exit Router#
发出show access-listcommand以查看ACL条目。这里还显示了 10、20 和 30 等序列号。
Router#show access-list Extended IP access list 101 10 permit tcp any any 20 permit udp any any 30 permit icmp any any
为访问列表 101 添加序列号为 5 的条目。
示例 1:
Router#configure terminal Enter configuration commands, one per line. End with CNTL/Z. Router(config)#ip access-list extended 101 Router(config-ext-nacl)#5 deny tcp any any eq telnet Router(config-ext-nacl)#exit Router(config)#exit Router#
在show access-listcommand输出中,序列号5的ACL被添加为访问列表101的第一个条目。
Router#show access-list Extended IP access list 101 5 deny tcp any any eq telnet 10 permit tcp any any 20 permit udp any any 30 permit icmp any any Router#
示例 2:
internetrouter#show access-lists Extended IP access list 101 10 permit tcp any any 15 permit tcp any host 172.16.2.9 20 permit udp host 172.16.1.21 any 30 permit udp host 172.16.1.22 any internetrouter#configure terminal Enter configuration commands, one per line. End with CNTL/Z. internetrouter(config)#ip access-list extended 101 internetrouter(config-ext-nacl)#18 per tcp any host 172.16.2.11 internetrouter(config-ext-nacl)#^Z internetrouter#show access-lists Extended IP access list 101 10 permit tcp any any 15 permit tcp any host 172.16.2.9 18 permit tcp any host 172.16.2.11 20 permit udp host 172.16.1.21 any 30 permit udp host 172.16.1.22 any internetrouter#
同样,您还可以用下列方式配置标准访问列表:
internetrouter(config)#access-list 2 permit 172.16.1.2 internetrouter(config)#access-list 2 permit 172.16.1.10 internetrouter(config)#access-list 2 permit 172.16.1.11 internetrouter#show access-lists Standard IP access list 2 30 permit 172.16.1.11 20 permit 172.16.1.10 10 permit 172.16.1.2 internetrouter(config)#ip access-list standard 2 internetrouter(config-std-nacl)#25 per 172.16.1.7 internetrouter(config-std-nacl)#15 per 172.16.1.16 internetrouter#show access-lists Standard IP access list 2 15 permit 172.16.1.16 30 permit 172.16.1.11 20 permit 172.16.1.10 25 permit 172.16.1.7 10 permit 172.16.1.2
标准访问列表的主要区别在于,Cisco IOS按IP地址的后代顺序添加条目,而不是在序列号上添加。
本示例显示了不同的条目,例如,如何允许 IP 地址 (192.168.100.0) 或网络 (10.10.10.0)。
internetrouter#show access-lists Standard IP access list 19 10 permit 192.168.100.0 15 permit 10.10.10.0, wildcard bits 0.0.0.255 19 permit 10.101.110.0, wildcard bits 0.0.0.255 25 deny any
在访问列表 2 中添加条目,以允许 IP 地址 172.22.1.1:
internetrouter(config)#ip access-list standard 2 internetrouter(config-std-nacl)#18 permit 172.22.1.1
此条目添加到了列表顶部,目的是为特定 IP 地址(而不是网络)赋予优先级。
internetrouter#show access-lists Standard IP access list 19 10 permit 192.168.100.0 18 permit 172.22.1.1 15 permit 10.10.10.0, wildcard bits 0.0.0.255 19 permit 10.101.110.0, wildcard bits 0.0.0.255 25 deny any
注意:ASA/PIX防火墙等安全设备不支持之前的ACL。
访问列表应用于加密映射时更改访问列表的指南.
如果添加到当前访问列表配置,则无需删除加密映射。如果直接向其中增加条目且不删除加密映射,这也是受支持且可以接受的。
如果需要修改或删除当前访问列表中的访问列表条目,则必须从接口删除加密映射。删除加密映射后,可对访问列表做任意更改并重新添加加密映射。如果做了更改(如删除访问列表)但未删除加密映射,则不受支持且会导致无法预测的行为。
如何从接口删除 ACL?
要从接口删除 ACL,请进入配置模式并在 access-group 命令前输入 no,如本示例所示。
interface <interface-name> no ip access-group <acl-number> {in|out}
如果被拒绝的数据流过多该如何处理?
如果被拒绝的数据流过多,请检查列表的逻辑,或尝试定义并应用其他更宽松的列表。show ip access-lists 命令可提供数据包计数,其中显示匹配的 ACL 条目。除特定于端口的信息外,各 ACL 条目末尾的 log 关键字还可显示 ACL 编号以及数据包是被允许还是被拒绝。
注:log-input关键字存在于Cisco IOS软件版本11.2及更高版本中,也存在于专为服务提供商市场创建的基于Cisco IOS软件版本11.1的某些软件中。旧版本的软件不支持该关键字。此关键字的用法包括适用的输入接口和源 MAC 地址。
如何在使用 Cisco 路由器的数据包级别上进行调试?
以下程序说明了调试过程。在开始之前,请确保当前未应用 ACL,已有一个 ACL,而且未禁用快速交换。
注意:调试流量较大的系统时,请务必非常小心。请使用 ACL 调试特定的数据流。确保流程和流量。
使用access-lists命令可捕获所需数据。
在本示例中,为目标地址 10.2.6.6 或源地址 10.2.6.6 设置了数据捕获。
access-list 101 permit ip any host 10.2.6.6 access-list 101 permit ip host 10.2.6.6 any
禁用相关接口上的快速交换。如果未禁用快速交换,您将只能看到第一个数据包。
configure terminal
interfaceno ip route-cache
请在启用模式下使用 terminal monitor 命令,以显示 debug 命令的输出以及当前终端和会话的系统错误消息。
请使用debug ip packet 101 或debug ip packet 101 detail 命令开始调试过程。
请在启用模式下执行 no debug all 命令和 interface configuration 命令以停止调试进程。
重新启动高速缓存。
configure terminal
interfaceip route-cache
本部分文档将介绍各种 ACL 类型。
标准 ACL 是最早的 ACL 类型。它们可追溯到 Cisco IOS 软件版本 8.3。标准 ACL 通过将 IP 数据包源地址与 ACL 中配置的地址进行比较来控制数据流。
以下是标准 ACL 的命令语法格式。
access-list <access-list-number> {permit|deny} {host|source source-wildcard|any}
在所有软件版本中,access-list-number 可以是 1 到 99 的任何数。在 Cisco IOS 软件版本 12.0.1 中,标准 ACL 开始使用附加的编号(1300 到 1999)。这些附加的编号被称为扩展 IP ACL。Cisco IOS 软件版本 11.2 在标准 ACL 中增加了使用列表名称的功能。
source/source-wildcard 设置 0.0.0.0/255.255.255.255 可指定为 any。如果设置全部为零,则可以省略。因此,主机10.1.1.2 0.0.0.0与主机10.1.1.2相同。
定义 ACL 后,必须将其应用于接口(入站或出站)。在早期软件版本中,如果未指定关键字“输出”或“输入”,则默认为“输出”。在更高的软件版本中则必须指定该方向。
interface <interface-name>
ip access-group number {in|out}
以下是标准 ACL 的一个用例,目的是阻止来自源地址 10.1.1.x 以外的所有数据流。
interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group 1 in !
access-list 1 permit 10.1.1.0 0.0.0.255
扩展 ACL 是在 Cisco IOS 软件版本 8.3 中引入的。扩展 ACL 通过将 IP 数据包的源地址和目标地址与 ACL 中配置的地址进行比较来控制数据流。
以下是扩展 ACL 的命令语法格式。出于空间考虑,此处将换行。
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]
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]
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]
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]
在所有软件版本中,access-list-number 可从 100 到 199。在 Cisco IOS 软件版本 12.0.1 中,扩展 ACL 开始使用附加的编号(2000 到 2699)。这些附加的编号被称为扩展 IP ACL。Cisco IOS 软件版本 11.2 在扩展 ACL 中增加了使用列表名称的功能。
值 0.0.0.0/255.255.255.255 可指定为 any。定义 ACL 后,必须将其应用于接口(入站或出站)。在早期软件版本中,如果未指定关键字“输出”或“输入”,则默认为“输出”。在更高的软件版本中则必须指定该方向。
interface <interface-name> ip access-group {number|name} {in|out}
此扩展ACL用于允许10.1.1.x网络(内部)上的流量并接收来自外部的ping响应,同时阻止来自外部人员的未经请求的ping,这允许所有其他流量。
interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0 ip access-group 101 in !
access-list 101 deny icmp any 10.1.1.0 0.0.0.255 echo access-list 101 permit ip any 10.1.1.0 0.0.0.255
注意:某些应用程序(例如网络管理)需要ping才能实现keepalive功能。如果是这种情况,您可以限制被阻止的入站ping或在允许/拒绝的IP中更精细地执行入站ping。
锁和密钥(亦称动态 ACL)是在 Cisco IOS 软件版本 11.1 中引入的。此功能依赖于 Telnet、身份验证(本地或远程)以及扩展 ACL。
锁和密钥配置从应用扩展 ACL 开始,以阻止数据流通过路由器。想要穿越路由器的用户将被扩展 ACL 阻止,直至 Telnet 到路由器并经过身份验证。然后Telnet连接会断开,一个单条目的动态ACL会添加到现有的扩展ACL中。这允许流量在特定时间段内运行;可以发生空闲超时和绝对超时。
以下是含本地身份验证的锁和密钥配置的命令语法格式。
username <user-name> password <password> !
interface <interface-name> ip access-group {number|name} {in|out}
此命令中的单条目 ACL 将会在身份验证之后动态添加至已存在的 ACL 中。
access-list access-list-number dynamic name {permit|deny} [protocol] {source source-wildcard|any} {destination destination-wildcard|any} [precedence precedence][tos tos][established] [log|log-input] [operator destination-port|destination port] line vty <line_range>
login local
以下是锁和密钥的一个基本示例。
username test password 0 test !--- Ten (minutes) is the idle timeout. username test autocommand access-enable host timeout 10 ! interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group 101 in ! access-list 101 permit tcp any host 10.1.1.1 eq telnet !--- 15 (minutes) is the absolute timeout. access-list 101 dynamic testlist timeout 15 permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 ! line vty 0 4 login local
位于 10.1.1.2 的用户通过 Telnet 连接登录到 10.1.1.1 之后,动态 ACL 将得到应用。然后连接断开,用户即可进入 172.16.1.x 网络。
命名 IP ACL 是在 Cisco IOS 软件版本 11.2 中引入的。它允许为标准和扩展 ACL 指定名称而不是编号。
以下是命名 IP ACL 的命令语法格式。
ip access-list {extended|standard} name
以下是 TCP 示例:
{permit|deny} tcp source source-wildcard [operator [port]] destination destination-wildcard [operator [port]] [established] [precedence precedence] [tos tos] [log] [time-range time-range-name]
以下是命名 ACL 的一个用例,目的是阻止从主机 10.1.1.2 到主机 172.16.1.1 的 Telnet 连接以外的所有数据流。
interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group in_to_out in ! ip access-list extended in_to_out permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet
自反 ACL 是在 Cisco IOS 软件版本 11.3 中引入的。自反 ACL 允许根据上层会话信息过滤 IP 数据包。它们通常用于允许出站数据流,并限制对路由器内部发起的会话响应的入站数据流。
自反 ACL 只能通过扩展命名 IP ACL 进行定义,无法通过编号或标准命名 IP ACL 或其他协议 ACL 进行定义。自反 ACL 可与其他标准和静态扩展 ACL 结合使用。
以下是各种自反 ACL 命令的语法。
interface <interface-name> ip access-group {number|name} {in|out} ! ip access-list extended <name> permit protocol any any reflect name [timeoutseconds] !
ip access-list extended <name> evaluate <name>
这是允许ICMP出站和入站流量的示例,虽然它仅允许从内部发起的TCP流量,但其他流量被拒绝。
ip reflexive-list timeout 120 ! interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0 ip access-group inboundfilters in ip access-group outboundfilters out ! ip access-list extended inboundfilters permit icmp 172.16.1.0 0.0.0.255 10.1.1.0 0.0.0.255 evaluate tcptraffic !--- This ties the reflexive ACL part of the outboundfilters ACL,
!--- called tcptraffic, to the inboundfilters ACL. ip access-list extended outboundfilters permit icmp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 permit tcp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 reflect tcptraffic
基于时间的 ACL 是在 Cisco IOS 软件版本 12.0.1.T 中引入的。尽管与扩展 ACL 在功能上类似,但它们可根据时间进行访问控制。为了实施基于时间的 ACL,需要创建指定每天和每周特定时间的时间范围。时间范围通过名称来定义,然后被相应的功能引用。因此,函数本身将会受到时间限制。时间范围依赖于路由器的系统时钟。可以使用路由器时钟,但是此功能与网络时间协议 (NTP) 同步搭配使用时效果最佳。
以下是基于时间的 ACL 命令。
!--- Defines a named time range. time-range time-range-name !--- Defines the periodic times. periodic days-of-the-week hh:mm to [days-of-the-week] hh:mm !--- Or, defines the absolute times. absolute [start time date] [end time date] !--- The time range used in the actual ACL. ip access-list name|numbertime-rangename_of_time-range
在本示例中,允许在星期一、星期三和星期五的营业时间内从内部网络到外部网络的 Telnet 连接:
interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group 101 in ! access-list 101 permit tcp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 eq telnet time-range EVERYOTHERDAY ! time-range EVERYOTHERDAY periodic Monday Wednesday Friday 8:00 to 17:00
带有注释的 IP ACL 条目是在 Cisco IOS 软件版本 12.0.2.T. 中引入的。注释使 ACL 更加容易理解并且可用于标准或扩展 IP ACL。
以下是带有注释的命名 IP ACL 命令语法。
ip access-list {standard|extended} <access-list-name> remark remark
以下是带有注释的编号 IP ACL 命令语法。
access-list <access-list-number> remark remark
这是编号ACL中的注释示例。
interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group 101 in ! access-list 101 remark permit_telnet access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet
基于上下文的访问控制 (CBAC) 是在 Cisco IOS 软件版本 12.0.5.T 中引入的,它需要使用 Cisco IOS 防火墙特性集。CBAC 会检查通过防火墙的数据流,找到并管理 TCP 和 UDP 会话的状态信息。使用此状态信息的目的是在防火墙访问列表中创建临时空缺。在流量发起方向配置IP检测列表,以允许返回流量和允许会话(源自受保护内部网络的会话)的其他数据连接,以实现此目的。
以下是 CBAC 的语法。
ip inspect name inspection-name protocol [timeoutseconds]
以下是使用 CBAC 检查出站数据流的示例。如果没有 CBAC 空缺位置给返回数据流,则扩展 ACL 111 通常会阻止除 ICMP 外的返回数据流。
ip inspect name myfw ftp timeout 3600 ip inspect name myfw http timeout 3600 ip inspect name myfw tcp timeout 3600 ip inspect name myfw udp timeout 3600 ip inspect name myfw tftp timeout 3600
! interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0 ip access-group 111 in ip inspect myfw out !
access-list 111 deny icmp any 10.1.1.0 0.0.0.255 echo access-list 111 permit icmp any 10.1.1.0 0.0.0.255
身份验证代理是在 Cisco IOS 软件版本 12.0.5.T 中引入的。它要求拥有 Cisco IOS 防火墙特性集。身份验证代理用于对入站或/和出站用户进行身份验证。通常被 ACL 阻止的用户可让浏览器通过防火墙并在 TACACS+ 或 RADIUS 服务器上进行身份验证。服务器会将附加 ACL 条目传递到路由器中,以便在身份验证后允许用户通过。
身份验证代理类似于锁和密钥(动态 ACL)。两者的区别如下:
锁和密钥通过到路由器的 Telnet 连接启用。身份验证代理则是通过 HTTP 在路由器上启用。
身份验证代理必须使用外部服务器。
通过身份验证代理可添加多个动态列表。锁和密钥只能添加一个。
身份验证代理有绝对超时,但没有空闲超时。锁和密钥两者均有。
请参阅 Cisco 安全集成软件配置手册,查看身份验证代理的示例。
Turbo ACL 是在 Cisco IOS 软件版本 12.1.5.T 中引入的,应用于 7200、7500 和其他高端平台上。Turbo ACL 功能旨在更有效地处理 ACL 以提高路由器性能。
请使用 access-list compiled 命令查看 turbo ACL。以下是已编译 ACL 的示例。
access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 eq ftp access-list 101 permit udp host 10.1.1.2 host 172.16.1.1 eq syslog access-list 101 permit udp host 10.1.1.2 host 172.16.1.1 eq tftp access-list 101 permit udp host 10.1.1.2 host 172.16.1.1 eq ntp
定义标准 ACL 或扩展 ACL 之后,可使用 global configuration 命令进行编译。
!--- Tells the router to compile. access-list compiled ! interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0 !--- Applies to the interface. ip access-group 101 in
show access-list compiled 命令可显示有关 ACL 的统计数据。
基于时间的分布式 ACL 是在 Cisco IOS 软件版本 12.2.2.T 中引入的,目的是在启用了 VPN 的 7500 系列路由器上实施基于时间的 ACL。在引入基于时间的分布式 ACL 功能之前,Cisco 7500 系列路由器的板卡并不支持基于时间的 ACL。配置了基于时间的 ACL 后,它们便可像正常 ACL 一样运行。如果为板卡上的接口配置了基于时间的 ACL,则交换到接口中的数据包并不会通过板卡进行分布式交换,而是转发到路由处理器中进行处理。
分布式基于时间的ACL的语法与基于时间的ACL的语法相同,并且添加了与路由处理器和线卡之间的处理器间通信(IPC)消息状态相关的命令。
debug time-range ipc show time-range ipc clear time-range ipc
接收 ACL 旨在通过防止路由器的千兆路由处理器 (GRP) 收到不必要和潜在非法数据流来提高 Cisco 12000 路由器的安全性。接收 ACL 作为一个特殊的放弃被添加到 Cisco IOS 软件版本 12.0.21S2 的维护扼杀中,并集成到了 12.0(22)S 中。有关详细信息,请参阅GSR:接收访问控制列表。
使用基础设施ACL是为了将直接基础设施攻击的风险和有效性降至最低,其方法是仅明确允许授权流量流向基础设施设备,而允许所有其他中转流量。有关详细信息,请参阅保护您的核心:基础设施保护访问控制列表。
由于中转 ACL 明确规定仅允许所需的数据流进入网络,因此它们可用于提高网络安全性。有关详细信息,请参阅传输访问控制列表:在边缘过滤。
版本 | 发布日期 | 备注 |
---|---|---|
2.0 |
30-Nov-2023 |
更新的SEO和格式。 |
1.0 |
14-May-2002 |
初始版本 |