做网络这一行,接触"ACL"这三个字母的时间比你想象中要早得多。基本上刚学会给设备配IP地址,下一课就是ACL(Access Control List,访问控制列表)。它解决的就是一个非常朴素的问题:网络上的数据包,哪些能过,哪些不能过,规则到底谁说了算。
ACL本质上就是设备上的一组规则列表,像公司大楼门口的安保系统:每个经过的数据包都要接受检查,符合规则的放行,不符合的拦截。别小看这套机制,从限制某台电脑访问服务器,到封禁内网某个网段的HTTP流量,再到隔离公司各部门之间的网络,背后都是ACL在起作用。标准ACL、扩展ACL、命名ACL三种最常见的形态,加上Cisco Packet Tracer实验,这次我一次给你讲透,从原理到命令再到排障,让你都能自己动手搞定。
适合谁看?刚入门网络方向的学生、准备考思科认证的考生、以及工作中第一次在路由器或防火墙上做访问控制的运维新手。如果你已经会配路由协议但对ACL总是似懂非懂,这篇文章同样能帮你把缺的细节补上。
1. 先搞清楚ACL的底层逻辑,再谈配置
1.1 ACL的本质:数据包的入场券检查
ACL的工作机制其实特别像演唱会门口的检票员。你拿着门票(数据包)走到入口,检票员手里有一份名单(ACL规则),他从第一条开始逐条核对你,只要你命中其中一条,他就立刻决定放行还是拦下你,后面的名单根本不会再往下看。也就是说,ACL列表是有顺序的,而且匹配到第一条就停止,这个特性直接决定了规则的书写顺序必须精心设计。
什么叫"命中"?ACL会检查数据包里的关键信息,比如源IP地址、目的IP地址、协议类型、端口号等。标准ACL只检查源IP,扩展ACL检查得更细。无论哪一种,最终的结果只有两个动作:permit(允许通过)或deny(拒绝通过)。可以把它理解为门卫手里的两个章,一个绿色一个红色,盖哪个取决于你踩中了哪一条规则。
刚开始学的时候,很多人容易把ACL和防火墙策略混为一谈。其实两者的核心思路是一样的,都是在做访问控制,但ACL通常是路由器、交换机这类网络设备上的轻量级过滤机制,处理速度快,规则也相对直白;防火墙则更偏重状态检测、会话跟踪、应用识别这些高级能力。先把ACL玩明白,后面接触防火墙会感觉特别亲切。
1.2 匹配顺序与默认拒绝:这两个特性决定了成败
ACL的第一条铁律:从头到尾按顺序匹配,命中即停止。比如你不想让192.168.1.5访问任何东西,在列表最前面写了一条deny,那这个流量就被拦住了,后面就算写了permit any,对这台机器也没用。反过来,如果你把permit any写在前面,那后面写多少条deny都是废的,因为所有人都在第一条就被放行了。经验不足的人最容易在这里翻车,规则一条条敲得挺整齐,结果因为顺序问题,策略压根没按预期生效。
第二条铁律:默认拒绝。每条ACL的末尾都有一条看不见的规则——deny any(对扩展ACL来说是deny ip any any)。意思是,如果你的数据包把列表里所有规则都问了个遍,哪个都没命中,那么对不起,直接丢弃。这带来的后果就是:只要把一条ACL应用到了接口上,即使里面一条permit都没写,该接口对应方向的所有流量也会全部被切断。很多人第一次做实验时发现"怎么配完ACL之后整个网都不通了",十有八九就是这个原因。
这里补充一个常见误区。有些同学会觉得,ACL只是"在已有网络基础上加几条限制",应该默认放行、只拦指定的,于是写了deny却没写permit any兜底。结果可想而知,全网瘫痪。请务必把"默认拒绝"这四个字刻在脑子里:ACL的默认态度是不信任,你没有明确说允许的东西,一律不允许。
1.3 通配符掩码:一个小知识点能卡掉80%的新手
ACL里匹配IP地址时,用的不是你熟悉的子网掩码,而是通配符掩码(Wildcard Mask)。这是新手最容易混淆的地方,网上不少提问帖都是"ACL有通配符,无法匹配掩码"这类问题。简单理解,通配符掩码由四个0到255的数字组成,其中0表示这一位必须匹配,1表示这一位不用管。本质上它是子网掩码的按位取反。
例如子网掩码是255.255.255.0,通配符掩码就是0.0.0.255。要匹配192.168.1.0/24这个网段,ACL里就写192.168.1.0 0.0.0.255。要精确匹配一台主机192.168.1.10,可以写192.168.1.10 0.0.0.0,也可以直接用简写host 192.168.1.10。要匹配所有地址,就写0.0.0.0 255.255.255.255,简写就是any。
计算通配符掩码的时候,最稳妥的方法是先写清楚子网掩码,再逐字节取反。比如子网掩码是255.255.255.128,取反得到0.0.0.127,那么"192.168.1.128 0.0.0.127"就精确匹配了192.168.1.128到192.168.1.255这半个网段。一定要养成先算再写的习惯,直接在命令行里拍脑袋写,ACL表面上能敲进去,但匹配结果完全不是你想要的。
2. 标准ACL:只能按源IP"一刀切"的简单门禁
2.1 标准ACL能用在哪、编号怎么选
标准ACL是ACL家族里最基础的一种,它只检查数据包的源IP地址。这一点既是优点也是局限。优点在于规则简单、设备处理快;局限在于它完全不在乎你要去哪里、用什么协议,因此在很多精细场景下会"误伤"。比如你要禁止研发部的某台电脑访问财务系统,但标准ACL没法指定"仅访问财务系统"这个条件,它只能按源IP决定,这台电脑的所有访问全都会被拦下来,包括它正常访问互联网的流量。
在Cisco设备上,标准ACL的数字编号范围是1到99,以及1300到1999。做实验和日常工作用1到99就够了。有人可能会问,为什么不直接从1号排到很多号,因为Cisco当初设计编号就是为了区分ACL类型,标准ACL和扩展ACL各有各的号段,设备看到编号就知道该怎么解析后面的语法。1300到1999这种扩展号段主要是为了兼容老设备或扩充数量,一般用不上。
标准ACL的配置位置很讲究。因为它只认源地址,所以通常建议放在靠近目的地的设备上,这样拦截发生在最接近目标的节点,对其它方向的流量影响最小。如果放在源端,被deny的源发出的所有访问都会被阻断,影响范围会非常广。
2.2 标准ACL配置实操:从需求到命令
给你一个最典型的场景:公司内网有办公区192.168.10.0/24和服务器区192.168.30.0/24,老板要求禁止办公区的某台员工电脑(192.168.10.8)访问服务器区,其余办公区电脑不受影响。
第一步确定规则,只需要匹配源地址,目的地址不关心。命令这样写:
Router(config)# access-list 10 deny host 192.168.10.8 Router(config)# access-list 10 permit any注意,第一条deny锁住了那台电脑,第二条permit放行其余所有流量。有人会问,这里写permit 192.168.10.0 0.0.0.255行不行?也可以,但前提是服务器区只接受来自办公网段的访问。如果后续研发网段也要访问服务器区,你就得再补一条permit。写permit any更省事,因为标准ACL本来就没法精细控制"哪些目的可以访问",不如直接放行其它源,把拦截目标限定在明确要deny的那台主机上。
然后进入服务器区那侧的接口,把ACL应用在正确方向:
Router(config)# interface GigabitEthernet0/0 Router(config-if)# ip access-group 10 out这里方向选择out,是因为数据包要从路由器发往服务器区,也就是在出接口方向做检查。配置完成后,从192.168.10.8去ping服务器区的主机,会发现丢包,而办公区其它电脑访问正常。
2.3 标准ACL的两个经典大坑
第一个坑,ACL放错位置。标准ACL只认源IP,所以你没办法精确区分"这个源IP去往特定目的地"的流量。如果你把标准ACL放到靠近源端的接口,那么被deny的源发出的所有流量都会被拦,不管它是要去服务器区,还是去访问互联网,或是访问隔壁部门的打印机。所以经验法则很明确:标准ACL尽量往目的端放,让拦截发生在最接近目标的地方,尽量减少误伤范围。
第二个坑,方向搞反。很多人分不清in和out。记住一句话:in是数据包从外部进入路由器的方向,out是数据包从路由器发出去的方向。ACL应用在哪个接口,就从那个接口的视角去判断方向。我见过一个典型案例,想要的明明是限制别人访问自己的服务器,却把ACL挂在服务器接口的out方向,结果策略完全没生效,因为流量进入路由器时就已经被放行了,到出接口再检查已经晚了。
3. 扩展ACL:把安检升级到"人证加行李"级别
3.1 扩展ACL能匹配哪些字段
扩展ACL相比标准ACL,就像是从只看身份证升级到连行李箱都打开查一遍。它能检查的内容包括:协议类型(IP、TCP、UDP、ICMP、GRE、OSPF等)、源IP地址、目的IP地址、源端口、目的端口,甚至还可以匹配TCP的标志位。正是这种精细度,让它成为实际网络中最常用的ACL类型。
在Cisco设备上,扩展ACL的编号范围是100到199,以及2000到2699。配置命令总体格式是access-list后面跟编号、permit或deny、协议、源地址反掩码、目的地址反掩码、端口条件。端口条件只有在协议为TCP或UDP时才有意义,ICMP没有端口概念,通常用ICMP类型来匹配。这里要特别提醒,很多新手在命令里写ICMP协议时还想加eq端口,这是语法错误,设备会直接报错。
3.2 扩展ACL配置实操:拿Web访问控制练手
假设你有一台Web服务器192.168.30.10,端口80。需求是:只允许研发网段192.168.20.0/24里的某台PC-B(192.168.20.9)访问Web服务,其它来源的HTTP访问全部拒绝。同时,为了让网管能正常排障,允许任意地址ping服务器。
命令这样写:
Router(config)# access-list 100 permit tcp host 192.168.20.9 host 192.168.30.10 eq 80 Router(config)# access-list 100 permit icmp any host 192.168.30.10第一条表示:允许主机192.168.20.9访问主机192.168.30.10的TCP 80端口。第二条表示:允许任何源地址对服务器发起ICMP请求。这里我故意没有写deny,因为末尾的隐式deny已经会把其他所有流量挡住了。你不需要画蛇添足去写"deny ip any any",写了反而容易给自己添乱。
然后在连接服务器网段的接口上应用:
Router(config)# interface GigabitEthernet0/1 Router(config-if)# ip access-group 100 in方向选择in,是因为这个ACL想要监控的是从外面进入路由器、再发往服务器的流量,在入口方向拦截最直接,不符合规则的流量刚进路由器就被丢掉,设备处理负担更小。
3.3 放置位置和标准ACL为什么正好相反
扩展ACL因为能精确匹配目的地址和端口,所以推荐放在靠近源设备的一端。这样做的好处是:不符合规则的流量刚出门就被掐断了,不会白白占用中间链路的带宽。比如上面的Web访问控制例子,更合理的做法是把它挂在研发网段接入路由器的接口上,这样研发区里想偷偷访问服务器的流量在源头就被拦住了。
对比一下两种ACL的部署原则,你会发现一个很有意思的现象:标准ACL内容粗,要放得离目的地近才不容易误伤;扩展ACL内容细,要放得离源端近才能尽早止损。这个差异不弄清楚,配置时方向选择很容易犯错。不过在实际生产环境里,我们会综合网络规模、设备性能和运维习惯来决定,不会死板地套一条规则。
4. 命名ACL:给你的策略起个能看懂的名字
4.1 数字ACL的天然缺陷
数字ACL的毛病很明显:一个ACL用编号指代,几个月后你再看配置文件,除了能看出"列表10放行了什么网段"之外,根本看不出它实际用于什么业务。而且数字ACL要修改规则时,基本上是删掉整条列表重写,因为Cisco的经典接口不允许单独删某一条规则,也不允许往中间插一条规则。对于生产环境的设备,动一条ACL要整表重配,确实很考验心理素质。
命名ACL就是为了解决这两个痛点出现的。它允许给ACL取一个语义化的名字,同时支持在列表中间插入规则、单独删除一条规则。配置方式也从单行命令变成了进入一个子配置模式,一条一条地写规则,阅读和排障时哪里是permit、哪里是deny一目了然。
4.2 命名ACL配置实操与规则编辑
创建命名ACL,先进入对应的模式。标准ACL用ip access-list standard,扩展ACL用ip access-list extended,后面跟名字:
Router(config)# ip access-list extended ALLOW-ONLY-WEB Router(config-ext-nacl)# 10 permit tcp host 192.168.20.9 host 192.168.30.10 eq 80 Router(config-ext-nacl)# 20 permit icmp any host 192.168.30.10 Router(config-ext-nacl)# 30 deny ip any any这里我最后写了一条deny ip any any,作用是把隐式拒绝显式化。虽然写不写效果一样,但显式写出来能让看配置的人更直观地理解"除了前面两条,其它都拒绝",尤其多人维护的设备上,这种可读性非常重要。
然后在接口下使用,把编号换成名字:
Router(config)# interface GigabitEthernet0/1 Router(config-if)# ip access-group ALLOW-ONLY-WEB in命名ACL支持使用序列号控制规则顺序。默认情况下,第一条规则从10开始,每写一条加10。这个设计是有意的,留出空间让你往中间插规则。比如要新增一条允许PC-B访问服务器的SSH(TCP 22),希望它排在ICMP规则之前,可以这样写:
Router(config-ext-nacl)# 15 permit tcp host 192.168.20.9 host 192.168.30.10 eq 22这样新规则就被编到了第15号,夹在10号和20号之间。想去掉某条规则,直接no加序列号即可:
Router(config-ext-nacl)# no 15这样的动态编辑能力,是数字ACL给不了的。我自己维护设备时,特别依赖这个功能,线上ACL要加一条临时放行策略,不用拆整表,插个号就行,比老的数字ACL舒服太多。
4.3 编辑顺序时容易踩的坑
命名ACL虽然灵活,但自由意味着责任。修改序列号时要特别小心,新插入的规则会立刻改变匹配流程,如果插在关键permit之前,可能导致它覆盖掉原本的放行规则。我在生产环境维护ACL时有个习惯:每次改动前先show access-lists把现有规则和计数器截图保存,改完立刻看计数器变化,确认没有误伤线上业务。
另外,命名ACL的名字大小写是敏感的,ALLOW-ONLY-WEB和allow-only-web是两个不同的ACL。接口上绑定的名字如果敲错大小写,配置不会报错,但ACL根本不会生效,找起原因来特别折磨人。建议所有ACL命名统一用大写加连字符,比如DENY-TO-FINANCE、ALLOW-WEB-80,简单直观又不容易敲错。
5. 完整实验:在Packet Tracer里把三种ACL串起来
5.1 实验拓扑与需求整理
纸上谈兵再多,不如动手敲一遍命令。Cisco Packet Tracer是练ACL最合适的模拟器,免费、图形化、基本命令都能跑。我们搭一个简单的三区域拓扑:两台路由器R1和R2,R1连接办公区(Office)和研发区(R&D),R2连接服务器区(Server)。办公区网段192.168.10.0/24,研发区192.168.20.0/24,服务器区192.168.30.0/24,路由器互联链路用10.0.0.0/30。
三个实验需求分开做,做完一个清一个,避免策略互相干扰。需求定义如下:
- 标准ACL:禁止办公区PC-A(192.168.10.8)访问服务器区,其它电脑不受限制。
- 扩展ACL:只允许研发区PC-B(192.168.20.9)访问服务器区Web服务(TCP 80),同时允许任意地址ping服务器用于排障。
- 命名ACL:在扩展ACL场景基础上改成命名ACL,并演示插入一条SSH规则。
5.2 基础配置
先把两台路由器的接口IP配好,IP地址规划如下表(这里略去具体接口编号,按模拟器实际接线填写即可):
| 设备 | 接口 | IP地址 |
|---|---|---|
| R1 | 连办公区 | 192.168.10.1/24 |
| R1 | 连研发区 | 192.168.20.1/24 |
| R1 | 连R2 | 10.0.0.1/30 |
| R2 | 连R1 | 10.0.0.2/30 |
| R2 | 连服务器区 | 192.168.30.1/24 |
配置完成后,在R1和R2上分别确认能学到对端网段路由。如果模拟器里用的静态路由,就按网段一条条加;如果用动态路由,确认邻居关系正常。总之,不挂任何ACL的情况下,办公区和研发区要都能访问服务器区,这是后面验证ACL效果的基准。我见过太多人跳过这一步直接配ACL,最后分不清是路由问题还是ACL问题,排障排到怀疑人生。
5.3 标准ACL实验
在R2上创建标准ACL,目标设备是服务器区那侧的接口。因为标准ACL只认源地址,放在R2连接服务器区的出方向最合适:
R2(config)# access-list 10 deny host 192.168.10.8 R2(config)# access-list 10 permit any R2(config)# interface GigabitEthernet0/1 R2(config-if)# ip access-group 10 out挂好后,从PC-A去ping服务器区的服务器,不通,从办公区其它电脑ping,通。从研发区PC-B去ping,也通。这说明标准ACL在出方向成功拦截了特定源IP,同时没有误伤整个办公网段和其它网段的访问。
实验结束后清理配置,方便下一步:
R2(config)# interface GigabitEthernet0/1 R2(config-if)# no ip access-group 10 out R2(config)# no access-list 105.4 扩展ACL实验
还是在R2上操作,这次创建扩展ACL 100,应用在连接服务器区接口的入方向:
R2(config)# access-list 100 permit tcp host 192.168.20.9 host 192.168.30.10 eq 80 R2(config)# access-list 100 permit icmp any host 192.168.30.10 R2(config)# interface GigabitEthernet0/1 R2(config-if)# ip access-group 100 in验证时,PC-B用浏览器访问192.168.30.10,可以打开Web页面。办公区的PC访问同一个Web地址,被拒绝,因为办公区源地址不满足第一条,同时ICMP第二条只管ping,不管HTTP,最终被隐式deny拦住。但是办公区PC去ping服务器是通的,因为第二条放行了ICMP。这个设计想体现的正是扩展ACL的精细度:同一个源IP,访问Web被拒,ping却放行,这在标准ACL里完全做不到。
实验结束后清理:
R2(config)# interface GigabitEthernet0/1 R2(config-if)# no ip access-group 100 in R2(config)# no access-list 1005.5 命名ACL实验
下面演示命名ACL的完整生命周期。先创建一个名为ALLOW-ONLY-WEB的扩展命名ACL:
R2(config)# ip access-list extended ALLOW-ONLY-WEB R2(config-ext-nacl)# 10 permit tcp host 192.168.20.9 host 192.168.30.10 eq 80 R2(config-ext-nacl)# 20 permit icmp any host 192.168.30.10 R2(config-ext-nacl)# 30 deny ip any any应用接口时把编号换成名字:
R2(config)# interface GigabitEthernet0/1 R2(config-if)# ip access-group ALLOW-ONLY-WEB in这时候如果想新增一条规则,允许PC-B访问服务器的SSH(TCP 22),并且希望它排在ICMP规则之前,就插入序列号15:
R2(config)# ip access-list extended ALLOW-ONLY-WEB R2(config-ext-nacl)# 15 permit tcp host 192.168.20.9 host 192.168.30.10 eq 22再执行show access-lists,你会看到规则顺序变成了10、15、20、30。这种中间插规则的能力,是数字ACL完全不具备的,生产环境改策略时非常实用。
5.6 验证:ACL有没有生效,计数器会告诉你
配完ACL后最实用的验证命令是show access-lists,它会在每条规则后面显示match计数。permit TCP那条如果match在涨,说明确实有流量命中这条规则。如果ACL好像没生效,第一步就是看计数器有没有变化。计数器完全不动,说明流量根本没走到这条ACL,要么方向选错,要么接口绑错,要么路由没通。
另外也可以用ping和浏览器实测。记住,ping用的是ICMP协议,如果ACL只放行了TCP 80而没放行ICMP,网页能打开但ping不通,这不是故障,是策略正常的体现。判断ACL效果,一定要结合具体的协议和端口来看,别一看到ping不通就以为网络断了。一个很常见的场景是,新人在服务器上配完ACL后慌慌张张报障,说自己把网络弄断了,结果一看只是ICMP被deny了,Web服务一直好好的。
6. 常见问题速查与排障技巧
6.1 高频配置错误对照表
我把自己在工作和带新人时见过的高频ACL错误整理成了表格,排查时一张张对过去,绝大多数问题都能解决。
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 配完ACL全网不通 | 漏写permit any兜底规则,隐式deny生效 | show access-lists,检查是否有permit any any |
| 规则顺序不对,策略不生效 | permit写在deny前面,流量提前被放行 | 查看规则列表,把deny挪到前面 |
| 通配符掩码写错,匹配范围不对 | 把子网掩码当反掩码填了 | 用0.0.0.255这类反掩码,不会算就用host/any简写 |
| 接口方向搞反 | in/out视角没搞清楚 | show ip interface 接口名,查看ACL应用方向 |
| ACL绑错接口或名字大小写错误 | 名字大小写敏感 | show ip interface 确认实际绑定的名称 |
| 想放行Web页面,但页面图片打不开 | 只放行了TCP 80,没放行TCP 443等端口 | 检查目标端口,确认Web服务是否走HTTPS |
| 改了ACL但流量行为没变化 | 忘了重新应用,或者配置没保存 | 检查running-config,确保接口下的access-group存在 |
需要单独强调一下方向检查。show ip interface加上接口名,输出里会明确显示Inbound access list是xxx,Outbound access list是xxx。排查时第一件事就是确认这两个位置到底绑了谁,别光盯着ACL内容看。
6.2 华为、华三设备上的ACL快速对比
实际工作中很多企业环境用的是华为或华三设备,ACL的思路与思科类似,但也有明显差异。思科的标准ACL编号是1到99,扩展ACL是100到199;华为基本ACL编号是2000到2999,高级ACL是3000到3999。华为同样使用通配符掩码来匹配地址,这点和思科是一致的。
最大的区别在应用方式上。思科在接口下用ip access-group绑定编号或名字,华为是在接口视图下用traffic-filter命令。例如在接口下应用编号为3000的高级ACL,命令是:
[Huawei-GigabitEthernet0/0/1] traffic-filter inbound acl 3000华为命名ACL的配置思路和思科很接近,都是先进入ACL视图再逐条写规则。另外,华为设备常说的"双向ACL",实际指的是同一ACL要同时应用到接口的in和out两个方向,或者需求既限制入站又限制出站。做跨厂商项目时,一定要先确认设备型号对应的命令风格,经验再丰富也不能靠死记硬背通吃,查命令参考是每个网络工程师的基本功。
7. Cisco Packet Tracer Student 下载与学习资源
7.1 为什么练ACL离不开Packet Tracer
纸上谈兵不如动手敲命令,但动真机成本太高了,一台路由器动辄几千上万,借实验室又要等排期。Cisco Packet Tracer是思科官方推出的网络模拟器,免费面向学生和初学者。它最大的价值不是模拟得有多逼真,而是把路由器、交换机的命令行交互几乎原汁原味地呈现出来,ACL、静态路由、VLAN、NAT这些基础功能都能练。对自学ACL的人来说,它就是一间不要钱的实验室。
Packet Tracer的图形界面也做得不错,拖几个设备、连几根线就能搭拓扑,比在真机上插线方便太多。实验做完还能保存工程文件,下次接着改,这在学习阶段帮助很大。尤其对ACL这种需要反复验证策略效果的实验,有模拟器可以随便试错,心里的压力会小很多。
7.2 下载安装与汉化注意事项
Packet Tracer的下载渠道是思科官网的Cisco Networking Academy网站。注册一个思科账号后,在资源中心里找到Download Packet Tracer,选择对应操作系统的安装包即可。下载包里已经包含学生版全部功能,不需要额外寻找破解版。搜索引擎里搜"cisco packet tracer student下载",第一个官方结果通常就是注册入口。
安装时注意几点。第一,选择完整安装,不要图省事选最小安装,否则部分设备模板可能缺失。第二,老电脑如果运行卡顿,可以在设置里把图形渲染效果调低,实验流畅度会好很多。第三,注意版本兼容性,高版本保存的.pkt文件在低版本里可能打不开,建议直接用较新的稳定版本,比如8.2系列。汉化包方面,社区有不少中文语言包,装上之后菜单和按钮会显示中文。我的建议是,刚开始可以用汉化版降低恐惧感,但命令行本来就是英文的,早点习惯英文提示,对之后看文档、考认证都有好处。
7.3 之后可以怎么继续练
ACL练完,可以接着玩几个进阶场景。一是ACL加NAT的组合,限制外网访问内网服务器的同时做端口映射,这种场景在公司网络里非常常见。二是在交换机上配置ACL,结合VLAN做网段间访问隔离,比单纯在路由器上做策略更贴合实际组网。三是在防火墙模拟器里做安全策略,把ACL的思路迁移到防火墙规则上,你会发现安全策略的本质逻辑是相通的。每一个都能让你对"流量控制"这四个字的理解更深一层。
另外,学ACL的同时一定要把show命令用熟。show access-lists看规则和计数器,show ip interface看绑定方向,show running-config看全局配置,这些命令看着不起眼,但排障时能救命的往往就是它们。
最后再分享一点我的个人体会。很多人学ACL喜欢死记命令,但我更建议你先把"匹配顺序""默认拒绝""通配符掩码"这三个底层概念吃透,因为不管是思科、华为还是华三的设备,不管ACL怎么改命令,背后都是同一套逻辑。我见过太多人换了一台设备就重新开始背参数,背到后面全混了。如果你把原理理解了,任何厂商的设备上手只需要查一下命令参考而已。配完ACL之后,一定要跑一遍show命令确认命中计数在变化,这不是仪式感,是让你确信策略真的在生效的最可靠办法。祝你实验一次通过,流量尽在掌握。