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 | 老设备兼容,现在很少用 |
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类网段。
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尽量放在靠近源端的位置,这样不匹配的流量早早就被丢弃了,不用浪费带宽。
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虽然功能有限,但它是理解ACL机制的基础。你把它搞透了,后面学扩展ACL、命名ACL、动态ACL都会轻松很多。别嫌它简单,基础打牢了,后面才不慌。