Cisco ACL 实战:从基础隔离到服务精细化管控

张开发
2026/4/6 10:47:32 15 分钟阅读

分享文章

Cisco ACL 实战:从基础隔离到服务精细化管控
1. 企业网络隔离的起点VLAN间基础隔离第一次接触企业网络时我被VLAN间通信的问题困扰了很久。记得有次公司市场部VLAN 10突然无法访问财务系统VLAN 20排查半天才发现是有人误操作了ACL规则。这种部门间网络隔离的需求在企业环境中实在太常见了。传统标准ACL就像个严格的保安它只认IP地址。配置起来也简单比如要阻止VLAN 20192.168.2.0/24访问VLAN 10只需要几条命令Switch(config)# access-list 1 deny 192.168.2.0 0.0.0.255 Switch(config)# access-list 1 permit any Switch(config)# interface vlan 10 Switch(config-if)# ip access-group 1 out这里有个新手容易踩的坑ACL默认最后有一条隐式的deny any如果不在末尾加上permit any所有流量都会被阻断。我当年就因为这个隐形规则让整个部门断网了半小时。命名标准ACL在功能上与传统ACL完全一致但管理起来方便多了。它最大的优势是可以给规则编号后期修改时不用重写整个ACLSwitch(config)# ip access-list standard MARKET_TO_FINANCE Switch(config-std-nacl)# 10 deny 192.168.2.0 0.0.0.255 Switch(config-std-nacl)# 20 permit any实际部署时我建议把ACL应用在离源最近的接口出方向out。这样无效流量在离开源VLAN时就被丢弃不会占用核心链路带宽。曾经有个客户的核心交换机总是满载后来发现就是因为ACL应用位置不当导致大量拒绝流量穿越了整个网络。2. 服务精细化管控扩展ACL实战当网络规模扩大后仅靠IP地址过滤就力不从心了。有次安全审计发现虽然隔离了VLAN但财务部的打印机竟然能通过HTTP协议向外传输扫描件。这时候就需要扩展ACL上场了它能精确到协议和端口级别。2.1 阻断DHCP服务的骚操作DHCP使用UDP 67服务端和68客户端端口。要阻止某个VLAN获取IP地址可以这样配置Switch(config)# ip access-list extended BLOCK_DHCP Switch(config-ext-nacl)# 10 deny udp any eq 68 any eq 67 Switch(config-ext-nacl)# 20 permit ip any any Switch(config)# interface vlan 10 Switch(config-if)# ip access-group BLOCK_DHCP in这个配置有个实际应用场景我们给访客VLAN手动分配IP防止他们通过DHCP获取内部地址。但要注意如果ACL应用方向错了比如用了out可能会导致整个VLAN无法获取IP。我有次配置时手抖把市场部全员变成了离线状态。2.2 DNS管控的双刃剑阻断DNSUDP 53端口可以有效防止内网主机访问恶意域名但配置不当也会影响正常业务Switch(config)# ip access-list extended FILTER_DNS Switch(config-ext-nacl)# 10 deny udp any any eq 53 Switch(config-ext-nacl)# 20 permit ip any any在电商公司实施时我们遇到过坑某些支付接口依赖DNS解析全阻断会导致支付失败。后来改进的方案是只放行公司指定的内部DNS服务器Switch(config-ext-nacl)# 10 permit udp any host 10.1.1.10 eq 53 Switch(config-ext-nacl)# 20 deny udp any any eq 53 Switch(config-ext-nacl)# 30 permit ip any any3. 关键业务服务的精准控制3.1 HTTP管控的灰度方案完全阻断HTTPTCP 80端口太粗暴我们通常采用更精细的策略。比如只允许访问公司官网和OA系统Switch(config)# ip access-list extended WEB_POLICY Switch(config-ext-nacl)# 10 permit tcp any host 203.0.113.5 eq 80 Switch(config-ext-nacl)# 20 permit tcp any host 203.0.113.10 eq 80 Switch(config-ext-nacl)# 30 deny tcp any any eq 80 Switch(config-ext-nacl)# 40 permit ip any any实施这种策略时建议先用logging参数测试Switch(config-ext-nacl)# 30 deny tcp any any eq 80 log这样可以在日志中观察被拦截的流量逐步完善白名单。我在金融客户那实施时通过日志发现他们有个老旧系统依赖80端口通信差点酿成事故。3.2 Telnet管理的安全红线TelnetTCP 23因为明文传输应该被禁用但某些老旧设备可能还需要临时使用。最安全的做法是只允许管理VLAN访问Switch(config)# ip access-list extended TELNET_MGMT Switch(config-ext-nacl)# 10 permit tcp 192.168.8.0 0.0.0.255 any eq 23 Switch(config-ext-nacl)# 20 deny tcp any any eq 23 Switch(config-ext-nacl)# 30 permit ip any any记得一定要在所有用户VLAN的入方向应用这个ACLSwitch(config)# interface range vlan 10, vlan 20 Switch(config-if-range)# ip access-group TELNET_MGMT in有次审计发现某管理员图方便在核心交换机上开了全通ACL结果被攻击者利用Telnet漏洞入侵。后来我们强制要求所有管理协议必须限定源IP。4. ACL管理的最佳实践4.1 命名ACL的版本控制大型网络中ACL经常需要修改我习惯用日期做版本标记Switch(config)# ip access-list extended WEB_POLICY_202308 Switch(config-ext-nacl)# 10 remark 允许访问官网 Switch(config-ext-nacl)# 20 permit tcp any host 203.0.113.5 eq 80修改时先创建新版本ACL测试无误后再替换接口引用。这方法救过我多次 - 有次凌晨修改ACL导致全网断网快速回滚到旧版本避免了重大事故。4.2 巧用remark提高可读性好的ACL应该像代码一样有清晰注释Switch(config-ext-nacl)# 10 remark 电商支付专用规则 Switch(config-ext-nacl)# 20 permit tcp 192.168.10.0 0.0.0.255 host 203.0.113.100 eq 443建议每10-15条规则就加个分隔remark。我接手过客户一个200多行的ACL没有任何注释排查问题时简直像在解谜。4.3 性能优化的黄金法则把高频匹配规则放在前面合并连续IP段192.168.1.0 0.0.0.255 比四个/24子网更高效在核心设备上避免使用过于复杂的ACL曾经优化过一个客户的核心交换机ACL通过规则重组将匹配时间从15ms降到了2ms。关键是把匹配度达80%的规则从第50位提到了前三位。

更多文章