简介
本文档介绍用于过滤IP数据包的常用IP访问控制列表(ACL)的示例配置。
先决条件
要求
在尝试进行此配置之前,请确保满足以下要求:
有关详细信息,请参阅 IP 寻址和子网划分入门。
使用的组件
本文档不限于特定的软件和硬件版本。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
本文档讨论一些常用的标准ACL和扩展ACL,有关Cisco IOS软件支持的不同类型ACL的详细信息,以及如何配置和编辑ACL,请参阅配置IP访问列表。
IP访问控制列表根据以下内容过滤数据包:
为了过滤网络流量,ACL 在路由器接口处控制是转发还是阻止路由数据包。路由器检查每个数据包,从而基于在 ACL 中指定的标准来决定是转发还是丢弃数据包。ACL 条件包括:
完成以下步骤,以构建本文档中示例所示的 ACL:
- 创建 ACL。
- 将 ACL 应用于接口。
IP ACL 是由应用于 IP 数据包的允许和拒绝条件组成的一个有序集合。路由器按照 ACL 中的条件逐个测试数据包。
第一个匹配的条件决定了思科 IOS® 软件是接受还是拒绝数据包。由于Cisco IOS软件在第一次匹配后停止条件测试,因此条件的顺序至关重要。如果任何条件均不匹配,则路由器会由于隐式 deny all 而拒绝该数据包。
以下是可以在思科 IOS 软件中配置的 IP ACL 示例:
- 标准 ACL
- 扩展 ACL
- 动态(锁定和密钥)ACL
- IP 命名 ACL
- 自反 ACL
- 基于时间的 ACL(使用时间范围)
- 附有注释的 IP ACL 条目
- 基于情景的 ACL
- 身份验证代理
- Turbo ACL
- 基于时间的分布式 ACL
标准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]
互联网控制消息协议 (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 的 Ethernet 0 接口,而允许所有的其他数据包通过该接口。您必须使用access list 1 permit any命令显式允许所有其他内容,因为每个ACL都有一个隐式deny all子句。
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 报头中源地址位于 192.168.10.0/24 网络内、目的地址位于 192.168.200.0/24 网络内的 IP 数据包访问 NetA。此 ACL 末尾的隐式 deny all 子句拒绝所有其他流量通过 R1 的 Ethernet 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流量,这允许NetA发起并与NetB建立Telnet会话,同时允许所有其他IP流量。
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 的 Ethernet 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 的回应应答(ping 响应)数据包通过 Ethernet 0 接口传入 NetA。但是,此配置阻止因 ping 操作而从 NetB 发往 NetA 的所有回应请求 ICMP 数据包。因此,NetA 中的主机可以 ping NetB 中的主机,而 NetB 中的主机不能 ping NetA 中的主机。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit icmp any any echo-reply
允许 HTTP、Telnet、邮件、POP3、FTP
此图显示仅允许HTTP、Telnet、简单邮件传输协议(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 命令的重要信息。
有关通过 debug命令使用 ACL 的详细信息,请参阅了解 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> 0000.0000.0000命令,拒绝不能访问的MAC地址,然后允许其余地址(例如aaaaa.bbb.cccc)。
注意:在访问列表中,为每个 MAC 地址添加相应的配置行。
验证
当前没有可用于此配置的验证过程。
故障排除
当前没有故障排除此配置的特定可用资料。
相关信息