资讯动态

华为ENSP实战:ACL访问控制列表原理、配置与排错全解析

发布时间:2026/10/15 1:46:31 来源:尧图企业网站定制
最近有好几个刚学网络的朋友跟我聊起同一个困惑手里的华为ENSP模拟器打开了好几个拓扑路由器、交换机都配通了Ping也通了但一到“ACL访问控制列表”这个实验就有点找不着北——不知道ACL该建在哪、规则怎么写、在接口上应用时到底该选inbound还是outbound配完之后又不知道怎么看它到底有没有生效。其实ACL这玩意儿本身不复杂复杂的是它把“网络三层转发”和“安全策略”两件事搅在了一起很多人只背了命令没把底层逻辑吃透。这篇博文我就结合华为ENSP从原理、类型、配置、排错到实战经验把ACL这件事一次讲透。适合正在备考数通认证、刚入行做网络运维、或者在学校做课程设计的同学照着做就能跑通。1. ACL到底管什么一张“门禁卡”读懂包过滤原理1.1 从一次访问失败看ACL的价值设想一个很常见的场景某公司的办公网分成研发部和财务部研发部的服务器在192.168.10.0/24网段财务部的电脑在192.168.20.0/24网段。老板提了个需求财务部可以访问研发部的业务系统但研发这边不许反过来访问财务部的内网防止研发人员顺手打开财务共享文件夹看到不该看的东西。在没有ACL的网络里这个需求根本落地不了。路由器、交换机的默认行为是“只要能路由就转发”源地址是谁、目的地址是谁它根本不关心。两台主机只要路由可达就能双向互通。而ACL做的事情本质上就是在设备的转发路径上加了一道“门禁”数据包从接口进来或者要离开接口的时候设备会拿这个包去跟门禁规则逐条比对命中某条规则后就按这条规则的动作permit放行或deny丢弃来处理。我把这个例子放在最前面是因为很多人学ACL只盯着命令记却忘了ACL解决的是一个非常朴素的问题三层网络默认“全通”而业务需要“部分通、部分不通”。ACL就是用来在设备上做这种“部分放行”的机制。理解了这一点再看后续配置就顺了。1.2 五元组匹配ACL凭什么认出“该拦的包”ACL匹配数据包靠的不是玄学而是报文的几个固定字段。华为设备的ACL规则本质上就是对这几个字段做“等于、不等于、范围”的判断。最基本的匹配维度是五元组源IP地址、目的IP地址、协议类型TCP、UDP、ICMP、IP等、源端口、目的端口。再往细了说还能加上IP优先级、TCP标志位、分片标志、VLAN、MAC地址等。也就是说ACL能控制的策略粒度远比很多人以为的细不光能禁止“某个网段访问某个IP”还能精确到“某个IP访问某台服务器的8080端口并且只拒绝TCP的SYN报文”。打个比方公司大楼门口的门禁系统普通保安只看工牌源地址但高级门禁还能看你有没有权限进指定楼层目的IP、能不能进机房目的端口、你是不是在非工作时间进入时间范围。ACL就是网络世界里的分级门禁。华为设备在处理ACL时还有一个关键机制叫“隐含规则”在基本ACL和高级ACL的规则列表末尾存在一条系统自动添加的默认规则——报文如果没匹配到任何一条手工配置的规则最终会落到默认动作上。基本ACL、高级ACL的默认规则通常是deny但有一个前提ACL里必须已经配置了至少一条规则才走这个逻辑。如果ACL本身是空的华为设备不会拿空ACL去过滤接口流量也就是说空ACL等同于没配ACL。这个细节后面排错时还会再提。2. 华为ACL家族怎么选基本、高级、二层各有各的用武之地2.1 基本ACL只认源地址的粗放型门卫华为设备的ACL按编号范围分成好几种在ENSP里最常用的是基本ACL编号2000-2999和高级ACL编号3000-3999。基本ACL只匹配源IP地址以及少量扩展字段比如分片标记配置最简单适合做“网段级”的粗粒度控制。比如老板说“192.168.100.0这个网段的员工上班时间不许刷视频”基本ACL就能搞定acl number 2000 rule 5 deny source 192.168.100.0 0.0.0.255 rule 10 permit any这里有个新手最容易犯的错很多人习惯把deny和permit的顺序写反或者只写deny不写permit。由于华为设备对ACL规则的处理是逐条匹配、命中后就不再往下看如果你只写了rule 5 deny source 192.168.100.0 0.0.0.255ACL里再没有其他规则那么未匹配的其他网段流量会落到隐含deny上导致全网段直接“断网”。所以用基本ACL做“只拒绝某个源、放行其他源”的需求时规则列表末尾通常要显式写一条permit any。2.2 高级ACL能挑协议端口的精细化安检高级ACL是实战中的主力它可以在一条规则里同时指定源IP、目的IP、协议类型、源端口、目的端口。典型场景老板说“禁止外网用户访问内网服务器的Telnet服务但内网用户自己可以访问”或者“允许192.168.10.10这个IP访问服务器的80端口其他都不行”。高级ACL配置示例acl number 3000 rule 10 deny tcp source 192.168.1.0 0.0.0.255 destination 192.168.2.10 0 destination-port eq 23 rule 20 permit ip看到没有高级ACL的规则里多了tcp、destination 192.168.2.10 0、destination-port eq 23这就是五元组的完整用法。destination 192.168.2.10 0表示目的地址是单个主机因为通配符0.0.0.0表示每一位都必须匹配destination-port eq 23表示目的端口等于23也就是Telnet端口。高级ACL特别适合做精细化放行/禁止的场景只拒绝某网段访问指定Web服务器的80、443端口允许特定主机之间建立FTP连接TCP端口20、21用ICMP类型匹配控制ping、traceroute的响应结合IP优先级做差分服务过滤2.3 二层ACL把MAC纳入管控范围二层ACL编号4000-4999抓的是数据链路层的信息源MAC、目的MAC、VLAN编号、二层协议类型。这个在ENSP基础实验里用得少但在接入层安全里非常实用比如“某台接入交换机上只允许白名单MAC地址的设备接入网络”防止有人私接设备。acl number 4000 rule 5 deny source-mac 00e0-fc12-3456二层ACL一般应用在交换机接口上控制的是进入接口的二层帧。需要注意的是二层ACL只对二层转发流量有效如果报文需要三层路由转发它匹配的就不再是二层信息了。初学阶段不用死磕这一块知道有这个东西就行后面做接入安全时再深入。2.4 编号和规则编号看似随意实则暗藏设计华为ACL的编号不是随便定的它本身就是“类型标识”。看到2000就知道是基本ACL看到3000就知道是高级ACL排错时能快速缩小范围。除了数字编号华为也支持命名ACL用字符串代替数字可读性更好规则多、需要长期维护的拓扑里很实用。规则编号rule 5、rule 10、rule 15……也值得养成好习惯不要连续用1、2、3建议按5、10、15的间隔配置。因为ACL规则修改时经常需要undo rule删除再重新添加中间留了空隙追加新规则就不用大动干戈调整整个列表。3. ENSP实战从零搭建一个ACL过滤实验3.1 拓扑设计与IP规划我在ENSP里最常用的一套练手拓扑很简单两台PC、一台路由器。具体规划如下设备接口IP/网关说明PC1-192.168.10.10/24网关192.168.10.1模拟研发网段主机PC2-192.168.20.10/24网关192.168.20.1模拟财务网段主机R1GE 0/0/0192.168.10.1/24连接PC1侧R1GE 0/0/1192.168.20.1/24连接PC2侧因为PC直连路由器路由协议不用配只要接口IP正确、PC网关指向路由器对应接口地址两个网段就能互通。需求设计成三档方便不同难度练习基础档禁止PC1所在网段访问PC2所在网段用基本ACL进阶档允许PC1访问PC2的某个服务端口如80端口禁止其他所有访问用高级ACL综合档结合时间范围让PC1在工作时间不能访问PC2的网站下班时间可以用time-range3.2 配置步骤先通网再上ACL强烈建议遵循“先通网、再加策略”的顺序。很多新手上来就配ACL结果Ping不通又分不清是路由问题还是ACL问题排错成本直接翻倍。正确流程是第一步先给R1接口配好IP并确认PC能互通system-view interface GigabitEthernet 0/0/0 ip address 192.168.10.1 255.255.255.0 undo shutdown quit interface GigabitEthernet 0/0/1 ip address 192.168.20.1 255.255.255.0 undo shutdown quit两台PC的IP、网关配好后从PC1 ping 192.168.20.10能通再接下一步。第二步创建ACL并写规则。以“禁止PC1网段访问PC2网段”为例acl number 2000 rule 5 deny source 192.168.10.0 0.0.0.255 rule 10 permit any注意这里的0.0.0.255是通配符不是子网掩码含义是前24位必须匹配、最后8位任意。详细逻辑在第4章展开。第三步把ACL应用到接口。需求是“PC1发往R1的流量要被拦截其他流量不影响”所以在R1的GigabitEthernet 0/0/0接口的inbound方向生效最合适interface GigabitEthernet 0/0/0 traffic-filter inbound acl 2000第四步验证。回到PC1ping 192.168.20.10应该不通PC2 ping 192.168.10.10可以通。这里有一个很值得思考的点为什么禁止PC1访问PC2ACL应用在PC1一侧接口的inbound方向而不是应用在PC2一侧接口的outbound方向因为两种做法都能实现“PC1不能访问PC2”但对其他流量的影响不同。放在PC1网段的inbound过滤发生在最源头后续路径上不用担心这个流量残留对目的端设备性能压力也小放在出口outbound方向同样有效但语义上更贴近“拒绝某些出访问”适合挂在靠近目的端的设备上。3.3 验证方法从ping结果到命中计数验证ACL是否生效最直观的是ping但ping不通只说明“有结果”不能告诉你到底是ACL拒绝还是路由不通。要精准定位必须会用华为的查询命令display acl 2000这条命令会输出ACL的规则列表、匹配总数和命中次数。如果deny规则的matched计数在增长说明流量确实被ACL挡住了。再看接口上是否应用了ACLdisplay traffic-filter applied-record这条命令在华为ENSP里能列出所有接口上应用ACL的记录排错时先跑它能立刻发现“配了ACL但没应用”的低级错误。如果想看报文级别ENSP支持链路抓包抓R1的GigabitEthernet 0/0/0接口。被ACL丢弃的报文在最开始就不会进入转发流程抓包通常看不到被丢弃的包本身但能看到请求发出、没有回应配合display acl的命中计数基本就能确认是ACL丢弃。4. 匹配顺序与通配符ACL高级配置的核心细节4.1 通配符掩码0和1的“相反游戏”ACL里跟IP地址一起出现的那个数字正确名称叫wildcard mask通配符掩码和子网掩码恰好相反二进制位为0表示“这一位必须匹配”为1表示“这一位不用管”。举例说明192.168.10.0 0.0.0.255前24位固定为192.168.10后8位任意匹配整个192.168.10.0/24网段192.168.10.10 0.0.0.0每一位都必须匹配只匹配单个主机192.168.10.10等价于host 192.168.10.100.0.0.0 255.255.255.255所有位都不用匹配匹配任意地址等价于any新手最常见的错误是拿子网掩码直接填进去比如写192.168.10.0 255.255.255.0。这个通配符掩码的二进制里高24位全是1表示高24位“不用管”低8位全是0表示低8位“必须匹配”。结果匹配的是192.168.X.Y中低8位为0的地址也就是192.168.0.0、192.168.1.0、192.168.2.0……这跟“匹配192.168.10.0/24网段”完全是两码事。另一个容易翻车的是非连续网段的通配符计算。比如要匹配192.168.10.0到192.168.10.127这个范围通配符是0.0.0.127要匹配192.168.10.128到192.168.10.255地址写192.168.10.128通配符还是0.0.0.127。想当然地写“192.168.10.0 0.0.0.127”匹配的是前半段想写“192.168.10.0写成0.0.0.256”那就是完全错误的格式通配符里没有256。4.2 规则排序深度优先还是配置顺序ACL规则一多匹配顺序就变得关键。华为VRP系统默认对规则按“深度优先”自动排序基本ACL按源IP匹配范围从小精确到大宽泛排序高级ACL则按源IP、目的IP、协议、端口的精确程度逐级排序。也就是说你配置规则时写的rule 5、rule 10只是编号实际生效时设备可能按自己的排序逻辑重新组织规则。这种机制对新手极不友好。我见过有人这样写acl number 3000 rule 5 deny ip rule 10 permit tcp destination-port eq 80他以为“先deny兜底再permit放行80端口”但华为的自动排序会把更精确的rule 10放到前面结果是80端口流量被放行、其他流量被deny。这也许正好是需求但如果本意是“只拒绝某个目的IP其他全放行”语义就完全变了。解决方法是要么在acl number时明确match-order config强制按配置顺序匹配要么就老老实实把规则编号间隔好每次配置后用display acl检查实际顺序不要凭记忆判断。默认的“深度优先”排序逻辑本身没有错错的是很多人不知道它的存在。4.3 时间范围让ACL按“上下班时间”工作华为ACL支持time-range可以把规则限定在某个时间段内。配置分两步time-range worktime 08:00:00 to 18:00:00 working-day然后在ACL规则里引用acl number 3000 rule 5 deny tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0 destination-port eq 80 time-range worktime注意华为VRP的time-range语法在不同版本有差异有的写08:00 to 18:00有的要带秒。一次没生效优先在ENSP里执行display time-range查看当前时间段是否匹配再检查ACL的命中计数是否增长。5. 排错复盘我在ENSP里踩过的五个ACL坑5.1 接口方向搞错流量全部“绕道”需求是禁止PC1访问PC2的80端口我把ACL 3000应用到了GE 0/0/0的outbound方向结果PC1照样能访问。这里要明确一个基础概念接口的inbound方向指流量进入设备的方向outbound方向指流量离开设备的方向。PC1访问PC2的请求是从GE 0/0/0的inbound方向进入R1的我挂在该接口outbound方向的ACL检查的是从R1发往PC1的报文请求流量根本不经过这个过滤器。相当于我在一扇单向门上装了门禁却装反了方向进门的人畅通无阻只有出门的人被查。后来把ACL改应用到GE 0/0/0的inbound方向或者干脆应用到GE 0/0/1的outbound方向策略立刻生效。排错结论先确认流量经过哪个接口、哪个方向再决定ACL挂在哪。最保险的方法是执行display traffic-filter applied-record把每个接口上挂的ACL列出来对照流量路径检查。5.2 隐含deny把整个网段“误伤”只配了一条rule 5 deny source 192.168.10.0 0.0.0.255应用在GE 0/0/0接口后发现PC2访问PC1也失败了。一开始我怀疑是两个PC的网关配置问题排查半天才发现ACL里没有匹配到的其他网段流量全部落到了隐含deny上全部被丢弃。网络运维圈有句话叫“permit是显式的deny是隐式的”。这个特性既是安全兜底也是误伤源头。解决办法是在规则列表末尾写清rule 10 permit any把不需要deny的流量显式放行。别嫌这条规则多余它往往能救你一命。5.3 规则排序失控permit永远排不上高级ACL默认深度优先排序会把更精确的规则排在前面。如果你在配置时按“先deny后permit”的思路写而permit规则比deny规则粒度更粗实际匹配顺序可能不会按你写的编号执行。举个例子rule 5 deny tcp source 192.168.10.0 0.0.0.255 destination 192.168.20.10 0 rule 10 permit ip这里deny tcp比permit ip更精确华为自动排序后deny在前没问题。但如果你理解的顺序是“编号5先执行”当系统调整后你可能会看到display acl里的顺序和配置时的不一致然后一脸懵。解决办法就是前面说的要么用match-order config强制按配置顺序要么配置完立刻检查实际顺序。5.4 配了ACL却没有应用白忙一场这个坑几乎每个新手都踩过。在ENSP里ACL配置好后执行display acl 3000规则明明都在但测试流量却畅通无阻因为没有应用到接口上。华为VRP中ACL只是“待命”状态必须通过traffic-filter、traffic-policy或VLAN下的绑定才能放到转发路径上。顺手写一个验证习惯每次配完ACL立刻执行display traffic-filter applied-record确认ACL确实挂到了目标接口和方向再去做业务测试。这一步能省下大量的无效排查时间。5.5 只做单向过滤回程流量被自己堵死ACL是逐包过滤本身不维护连接状态除非配合ASPF等状态检测功能。你只放了单向回程流量可能被同一ACL误杀。我在ENSP里只做了这样一个实验在R1的GE 0/0/0接口inbound方向挂了基本ACL 2000规则是rule 5 deny source 192.168.10.0 0.0.0.255我的本意是“PC1不能访问PC2”。配置完发现PC2 ping PC1也不通。原因很清晰PC2向PC1发出ping请求ICMP请求到达PC1后PC1回应的ICMP响应报文源地址是192.168.10.10从GE 0/0/0接口inbound方向进入R1时正好命中ACL里deny源地址的规则响应被丢弃。PC2看到的自然是“请求发出去了但永远没有回应”。TCP业务同理A访问B的网站B返回的网页报文如果回程方向被ACL过滤表现就是“请求发出去但页面一直打不开”。所以做ACL策略时一定要把双向流量都过一遍脑子请求方向怎么走、响应方向怎么回、每条规则会匹配到哪个方向的哪个报文。6. 进阶设计从“能配通”到“不误伤”6.1 用测试矩阵验证ACL行为ACL配置完一定要用测试矩阵验证。我在ENSP里会建一个表格把源IP、目的IP、端口、期望结果、实际结果全部列出来一条条跑测试项源目的端口/协议期望结果实际结果拒绝网段互访PC1 192.168.10.10PC2 192.168.20.10ICMP不通不通放行关键服务PC1 192.168.10.10服务器 192.168.20.20TCP 80通通默认行为验证PC3 192.168.30.10服务器 192.168.20.20任意按策略预期确认注意规则末尾是否有permit any表格有个作用逼你把每个方向的流量都想清楚尤其是“默认行为”这一列。ACL配置最容易出的问题就是只考虑“要拒绝谁”忘记了“其他流量是否该放行”。测试矩阵填完基本能覆盖大多数隐含风险。6.2 变更管理小步快跑留好回退虽然ENSP是模拟器我还是建议养成三个生产级习惯变更前先save保存当前配置出问题时直接回滚先用只匹配单个主机的规则验证行为确认无误后再扩大到网段每次变更后执行display logbuffer查设备日志看看有没有因ACL丢弃导致的告警把这三条养成肌肉记忆以后真到了生产设备上能省下很多事故时间。ACL规则写在设备上是静态的但网络的流量是动态的任何一次变更都可能波及你没想到的流量路径。6.3 常用命令速查表这里整理一份我在ENSP里随手查阅的命令速查表目的命令创建基本ACLacl number 2000创建高级ACLacl number 3000创建二层ACLacl number 4000添加基本ACL规则rule 5 deny source 10.1.1.0 0.0.0.255添加高级ACL规则rule 10 permit tcp source 10.1.1.1 0 destination 10.2.2.2 0 destination-port eq 80在接口应用ACLinterface GigabitEthernet 0/0/0→traffic-filter inbound acl 3000取消接口应用undo traffic-filter inbound查看ACL规则与命中计数display acl 3000查看接口上ACL应用情况display traffic-filter applied-record配置时间范围time-range worktime 08:00:00 to 18:00:00 working-day就我个人在华为ENSP里反复练ACL的体会而言这玩意儿看起来只是几行命令但真正难的是“把流量路径和规则语义对应起来”。每次配ACL之前先在纸上把流量从源到目的经过的每一个接口、每个接口的inbound/outbound方向画出来再决定ACL挂在哪个环节、写什么规则、规则排序是什么。养成这个习惯之后你会发现ACL再也不神秘了。后面如果时间允许我还会再写一篇关于华为ENSP里ACL与路由策略、策略路由组合使用的笔记那也是ACL真正发挥威力的地方。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑