华为交换机ACL配置:限制不同网段互访实例 - 夜莺博客

华为交换机ACL配置:限制不同网段互访实例

公司内部不同部门往往被划分在不同 VLAN 和网段,但二层隔离并不等于访问隔离——只要 VLANIF 之间存在路由,研发部和市场部的 PC 依然可以互访,机密数据就有泄露风险。华为交换机上用ACL(访问控制列表)配合流策略,可以精确地拒绝指定网段之间的互访。本文用一个"限制两个部门网段互访"的真实组网案例,演示高级 ACL 的完整配置流程:创建 ACL → 配置流分类 → 配置流行为 → 配置流策略 → 在接口入方向应用,每一步都给出真实命令。

组网需求与配置思路

某公司通过 Switch 互连各部门:研发部在 VLAN 10(10.1.1.0/24),市场部在 VLAN 20(10.1.2.0/24)。要求 Switch 拒绝两个网段之间的互访。配置思路:

  • 配置接口所属 VLAN 及 VLANIF 接口 IP;
  • 创建高级 ACL 匹配两网段互访报文;
  • 配置流分类(if-match acl)、流行为(deny)与流策略,并在入方向接口应用。

需要提前明确一点:ACL 本身只负责"判断报文长什么样",真正决定丢弃还是放行的是引用它的流行为或接口应用命令。这也是后面所有排障的起点——ACL 写得再对,只要没被引用,就完全不起作用。

第一步:创建 VLAN、配置接口与 VLANIF

<HUAWEI> system-view
[HUAWEI] sysname Switch
[Switch] vlan batch 10 20
[Switch] interface gigabitethernet 1/0/1
[Switch-GigabitEthernet1/0/1] port link-type trunk
[Switch-GigabitEthernet1/0/1] port trunk allow-pass vlan 10
[Switch-GigabitEthernet1/0/1] quit
[Switch] interface vlanif 10
[Switch-Vlanif10] ip address 10.1.1.1 24
[Switch-Vlanif10] quit
[Switch] interface vlanif 20
[Switch-Vlanif20] ip address 10.1.2.1 24
[Switch-Vlanif20] quit

生产环境里通常用 port trunk allow-pass vlan 10 20 让同一条上联链路承载多个 VLAN,这里为了演示隔离效果只放通单 VLAN。配置完成后先确认两个网段本身可以互通(ping 通再去做限制),否则无法区分"ACL 生效"和"路由本来就不通"。

第二步:创建高级 ACL

创建高级 ACL 3001,拒绝研发部(10.1.1.0/24)访问市场部(10.1.2.0/24)的报文:

[Switch] acl 3001
[Switch-acl-adv-3001] rule deny ip source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255
[Switch-acl-adv-3001] quit

ACL 编号决定类型,写错编号会直接限制住匹配能力:基本 ACL(2000~2999)只能匹配源 IP;高级 ACL(3000~3999)可以匹配源/目的 IP、协议号、源/目的端口、报文优先级、时间段;二层 ACL(4000~4999)按源/目的 MAC 和以太网类型匹配;用户 ACL(6000~6999)用于匹配自定义的非 IP 协议字段。跨网段互访必须用高级 ACL。

第三步:配置流分类、流行为与流策略

[Switch] traffic classifier tc1
[Switch-classifier-tc1] if-match acl 3001
[Switch-classifier-tc1] quit
[Switch] traffic behavior tb1
[Switch-behavior-tb1] deny
[Switch-behavior-tb1] quit
[Switch] traffic policy tp1
[Switch-trafficpolicy-tp1] classifier tc1 behavior tb1
[Switch-trafficpolicy-tp1] quit

三段式配置的分工要记牢:流分类定义"哪些报文",流行为定义"对它们做什么"(deny 丢弃、permit 放行,还可以做重标记、限速、重定向),流策略把两者绑定成一条可用规则。同一策略里可以绑定多个"分类器 + 行为"组合,未匹配任何分类器的报文默认放行。

第四步:在接口入方向应用流策略

研发部访问市场部的流量从 GE1/0/1 进入 Switch,因此在 GE1/0/1 的入方向应用:

[Switch] interface gigabitethernet 1/0/1
[Switch-GigabitEthernet1/0/1] traffic-policy tp1 inbound
[Switch-GigabitEthernet1/0/1] quit

入方向(inbound)是推荐做法:报文在进入设备的第一时间就被过滤,省掉后续查表和转发开销。出方向(outbound)只在需要控制"本机发出流量"时才用。另外,物理口、VLANIF、VLAN 都可以应用流策略,注意只在一处应用一次,重复应用容易出现规则互相覆盖、排查困难的情况。

ACL 规则匹配顺序:为什么编号不等于执行顺序

高级 ACL 采用的是深度优先匹配原则,而不是按规则编号从小到大逐条比较。直白地说,源/目的地址范围越精确(掩码越长、指定端口)的规则优先级越高,会先被拿来比对报文。这带来两个实操结论:

  • 规则编号建议留步长(5、10、15……),方便后续在中间插入新规则;
  • 不要靠"我把 permit 写在 deny 前面"来保证结果,要用语义清晰的规则表达意图,例如把精细的 permit 规则写成更精确的匹配条件。

另外要注意:ACL 命中失败时不会自动丢弃报文,匹配不上就继续走后续流程;因此在需要"默认拒绝"的场景,必须在流行为里显式配 deny,或在 ACL 末尾补一条范围更宽的 deny 规则。

进阶写法一:只放行必要业务,其余拒绝

现实需求往往不是"两个部门完全隔离",而是"研发部可以访问市场部网站,但不能访问其他服务"。这种白名单式写法比全拒绝更常用:

[Switch] acl 3002
[Switch-acl-adv-3002] rule 5 permit tcp source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255 destination-port eq www
[Switch-acl-adv-3002] rule 10 deny ip source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255
[Switch-acl-adv-3002] quit
[Switch] traffic classifier tc2
[Switch-classifier-tc2] if-match acl 3002
[Switch-classifier-tc2] quit
[Switch] traffic behavior tb2
[Switch-behavior-tb2] permit
[Switch-behavior-tb2] quit
[Switch] traffic policy tp2
[Switch-trafficpolicy-tp2] classifier tc2 behavior tb2
[Switch-trafficpolicy-tp2] quit
[Switch] interface vlanif 10
[Switch-Vlanif10] traffic-policy tp2 inbound
[Switch-Vlanif10] quit

把流策略挂在 VLANIF 10 的入方向,等于对"本网段发起的三层流量"统一管控,比逐口配置更省事,也更适合终端接口经常变动的场景。

进阶写法二:按时间段限制访问

如果只想在上班时间禁止两部门互访,可以用时间段(time-range)替代全天封锁:

[Switch] time-range work-time 08:00 to 18:00 working-day
[Switch] acl 3001
[Switch-acl-adv-3001] rule 5 deny ip source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255 time-range work-time
[Switch-acl-adv-3001] quit
[Switch] display time-range all

时间段生效依赖设备系统时钟,别忘了配置 NTP,否则时间一漂移,规则在错误的时段才会生效,这类问题在现场极难排查。

traffic-filter 与 flow policy 怎么选

对比项 traffic-filter inbound acl traffic classifier / behavior / policy
配置复杂度 一条命令绑定 ACL 三段式配置,步骤较多
能力范围 只做简单过滤(permit / deny) 可过滤,还可限速、重标记、重定向、统计
匹配依据 ACL 规则本身 if-match 支持 ACL、VLAN、MAC、协议等多种条件组合
可维护性 改 ACL 即生效,不涉及策略重建 策略可复用、可批量下发,适合规范化管理
适用场景 单接口、单一目的的快速隔离 多条件组合、需要统计或附加动作

简单隔离可以直接写 traffic-filter inbound acl 3001,一旦涉及限速、统计命中数、按协议细分,就换成流策略写法。

验证配置结果

[Switch] display acl 3001
[Switch] display traffic classifier user-defined
[Switch] display traffic policy user-defined tp1
[Switch] display traffic policy statistics interface gigabitethernet 1/0/1 inbound
[Switch] display time-range all

配置完成后,两个部门之间 ping 不通,即达到隔离目的。display traffic policy statistics 会分别显示匹配报文数与丢弃报文数——这是判断"规则到底有没有命中"最直接的证据,比反复 ping 更快定性。

ACL 配了却不生效:四类高频原因

  • 没有真正应用:ACL 创建了但没被流分类或 traffic-filter 引用,等于一张废纸;用 display current-configuration | include traffic 确认应用点。
  • 方向或位置不对:两个网段在交换机内部三层互访,流量不会经过你配的那条物理口;这种情况应挂到对应的 VLANIF 上。
  • 规则被更宽泛的规则先匹配:高级 ACL 按深度优先匹配,掩码更长的 deny 规则并不会自动胜过更精确的 permit 规则,需要逐条核对语义。
  • 时间段未生效:系统时间不对、或 time-range 定义与规则引用不一致;用 display time-range all 看状态是 active 还是 inactive。

配置回退与顺序

撤销时顺序要和配置相反——先解绑策略,再删策略、行为、分类器,最后删 ACL,否则会因被引用而删除失败:

[Switch] interface gigabitethernet 1/0/1
[Switch-GigabitEthernet1/0/1] undo traffic-policy inbound
[Switch-GigabitEthernet1/0/1] quit
[Switch] undo traffic policy tp1
[Switch] undo traffic behavior tb1
[Switch] undo traffic classifier tc1
[Switch] undo acl 3001
[Switch] save

在线修改策略前建议先 save 备份当前配置,改完立刻回读验证,避免留下半成品策略影响业务。

相关阅读

ACL 生效的前提是 VLAN 二层转发正常,可参考站内《华为交换机 VLAN 配置详解:Access、Trunk 与 Hybrid 端口》;链路聚合场景见《华为交换机 Eth-Trunk 链路聚合配置》;接入侧防私接与地址仿冒可配合《华为交换机 DHCP Snooping 与 IPSG 配置》使用;设备下线重装可参考《华为交换机恢复出厂设置三种方法》。

原文链接:https://www.cmd8.com/post/2471.html