3. 标准ACL配置:编号范围、配置、应用与局限性

标准ACL,说白了就是最基础的访问控制列表。它只看数据包的源IP地址,不关心你要去哪、用什么协议。我刚开始接触网络时,觉得这东西太简单了,后来才发现——越简单的东西,坑往往越深。

3.1 标准ACL的编号范围

标准ACL的编号范围是固定的。Cisco设备上,标准ACL用1到99,以及1300到1999。为什么有两个范围?1300-1999是扩展编号,给老设备兼容用的。现在新设备基本都支持命名ACL了,但考试和现网里,数字ACL依然很常见。

ACL类型 编号范围 说明
标准IP ACL 1 - 99 最常用,基本覆盖所有场景
标准IP ACL(扩展) 1300 - 1999 老设备兼容,现在很少用
我的习惯:我个人习惯把ACL编号和用途绑定。比如10-19给管理流量用,20-29给办公网段用。这样排错时一看编号就知道大概用途,不用一条条翻配置。

3.2 配置标准ACL

配置标准ACL,核心就两条命令:access-list 和 permit/deny。语法很简单,但顺序很重要——ACL是自上而下匹配的,匹配到一条就停止,不再往下看。

Router(config)# access-list 10 permit 192.168.1.0 0.0.0.255
Router(config)# access-list 10 deny any

这里有个关键点:通配符掩码。很多人把它和子网掩码搞混。通配符掩码中,0表示必须匹配,1表示可以忽略。所以 0.0.0.255 的意思是前24位必须匹配,后8位任意——说白了就是一个C类网段。

我曾经踩过的坑:我曾经在项目里把通配符掩码写成了子网掩码的格式,结果ACL死活不生效。排查了半天,才发现 0.0.0.255 写成了 255.255.255.0。记住:ACL里用的是反掩码,不是子网掩码。

再来看一个更具体的例子。假设我只允许192.168.1.0/24网段访问服务器,其他全部拒绝:

Router(config)# access-list 10 permit 192.168.1.0 0.0.0.255
Router(config)# access-list 10 deny any

注意最后那条 deny any。虽然ACL末尾默认隐含一条 deny any,但我建议你显式写出来。为什么?因为排错时一眼就能看到拒绝策略,不用去猜隐含规则。

3.3 应用标准ACL到接口

配置完ACL,它只是躺在设备里的一条规则。要让它生效,必须应用到接口上。命令是 ip access-group,后面跟方向——in 或 out。

Router(config)# interface gigabitethernet 0/0
Router(config-if)# ip access-group 10 in

方向怎么选?记住一句话:站在接口的角度看流量方向。

  • in方向:流量进入接口时匹配ACL。适合控制谁可以进入你的网络。
  • out方向:流量从接口出去时匹配ACL。适合控制谁可以离开你的网络。

举个例子。你公司出口路由器上,内网口接192.168.1.0/24,外网口接公网。如果你想禁止内网访问某个公网IP,ACL应该应用在外网口的out方向,或者内网口的in方向。效果一样,但性能有差别——我个人习惯把ACL尽量放在靠近源端的位置,这样不匹配的流量早早就被丢弃了,不用浪费带宽。

关键点:标准ACL只能基于源IP过滤。所以它通常放在离目标最近的接口上。为什么?因为标准ACL不关心目的IP,如果放在源端,可能会误伤其他流量。你想想看,如果我在内网口上拒绝了一个源IP,那这个IP的所有流量都被拦了,不管它要去哪。

3.4 标准ACL的局限性

标准ACL最大的问题,就是它太「标准」了——只能看源IP。这在很多场景下根本不够用。

我记得有一次帮客户做网络改造。客户说:「我要禁止财务部访问服务器A,但允许他们访问服务器B。」标准ACL能做到吗?不能。因为它只看源IP,不看目的IP。财务部的源IP是固定的,你一旦拒绝了它,它哪台服务器都去不了。

标准ACL的局限性,说白了就三点:

局限性 具体表现 影响
只能基于源IP 无法区分目的IP、端口、协议 无法实现精细化控制
放置位置受限 必须靠近目标端,否则误伤 浪费带宽,增加延迟
规则顺序敏感 匹配到第一条就停止 配置不当会导致策略失效

那什么时候用标准ACL?我总结了几种场景:

  • 简单场景:只允许或拒绝某个网段访问整个网络。比如只允许管理网段SSH登录设备。
  • 流量过滤:在边界路由器上,拒绝某些已知的恶意源IP。
  • 配合其他技术:比如在NAT、路由策略中调用ACL做匹配条件。

如果场景复杂了,比如要控制特定端口、特定协议,那就得上扩展ACL了。下一章我们会详细讲。

嗯,这里要注意一点:标准ACL虽然简单,但配置错误造成的后果可能很严重。我曾经见过一个案例,工程师把ACL方向搞反了,结果整个部门断网半天。所以配置完一定要用 show access-list 和 show ip interface 验证。

Router# show access-list 10
Standard IP access list 10
    10 permit 192.168.1.0, wildcard bits 0.0.0.255
    20 deny any

Router# show ip interface gigabitethernet 0/0
GigabitEthernet0/0 is up, line protocol is up
  Inbound access list is 10

看到 Inbound access list is 10,说明ACL已经生效了。如果没看到,检查一下是不是忘了应用,或者接口shutdown了。

避坑指南:配置完ACL后,建议先用一个测试源IP做连通性测试。比如从192.168.1.100 ping一下目标,看看通不通。如果通了但业务还是不行,那可能是ACL没匹配到正确的流量方向——换个方向试试。

最后,我想说一句:标准ACL虽然功能有限,但它是理解ACL机制的基础。你把它搞透了,后面学扩展ACL、命名ACL、动态ACL都会轻松很多。别嫌它简单,基础打牢了,后面才不慌。

标准ACL配置全流程 配置ACL规则 选择编号范围 编写permit/deny 应用到接口 选择in/out方向 验证ACL生效 排错与调整 关键注意事项 1. 通配符掩码不要写成子网掩码格式 2. 标准ACL只能基于源IP过滤,放在离目标最近的位置 3. 配置后务必用 show access-list 和 show ip interface 验证