在华为交换机的流策略(Traffic Policy)中,最终决定“允许”还是“拒绝”的,是“流行为(Traffic Behavior)”中的动作。ACL规则中的permit/deny,只决定“这个流量是否匹配本分类”,不直接决定最终是否转发。
不同场景匹配结果
| 场景 | ACL规则 | 流行为动作 | 最终结果 | 原因 |
|---|---|---|---|---|
| 场景1 | deny |
permit |
✅ 允许 | ACL deny 表示“不匹配”本分类,流量跳过此策略,不执行该行为。若后续有其他策略或默认路由,则正常转发。 |
| 场景2 | deny |
deny |
✅ 允许(但不会执行deny动作) | 同上,ACL deny 让流量根本不进入该分类,行为不生效。流量继续匹配后续策略或走普通转发。 |
| 场景3 | permit |
permit |
✅ 允许 | ACL permit 表示“匹配”本分类,执行行为中的permit,流量被允许通过。 |
| 场景4 | permit |
deny |
❌ 拒绝 | ACL permit 表示“匹配”本分类,执行行为中的deny,流量被丢弃。 |
核心结论:
-
ACL中的
permit= 进入这个分类,ACL中的deny= 不进入这个分类。 -
流行为中的
permit= 转发,流行为中的deny= 丢弃。
深度解析:华为流策略的两层匹配机制
为了更好地理解,我给您拆解一下华为的处理流程:
具体流程:
-
第一层判断(流分类):使用ACL匹配流量。
-
ACL
permit→ 匹配成功,进入此分类。 -
ACL
deny→ 匹配失败,不进入此分类(流量继续匹配后面的策略,或走普通路由转发)。
-
-
第二层判断(流行为):对已经进入分类的流量执行动作。
-
Behavior
permit→ 允许该流量通过。 -
Behavior
deny→ 丢弃该流量。
-
实际配置中的常见用法
用法一:白名单(只允许特定源,其他拒绝)
acl 3000
rule permit ip source 192.168.1.100 0 # 允许的源进入分类
rule deny ip source any # 这行其实不需要,ACL末尾隐含deny all
traffic classifier c1
if-match acl 3000
traffic behavior b1
permit # 允许通过
traffic policy p1
classifier c1 behavior b1 # 匹配ACL 3000的流量放行
# 未匹配的流量(隐含deny)不进入分类,最终被默认丢弃
注意:ACL末尾默认
deny all,不匹配的流量不会进入分类,流策略的默认行为也是丢弃未匹配流量,所以最终效果=白名单。
用法二:黑名单(只禁止特定IP,其他允许)
acl 3000
rule deny ip source 192.168.1.100 0 # 想禁止的源
rule permit ip source any # ⚠️ 这条必须有,让其他流量进入分类
traffic classifier c1
if-match acl 3000
traffic behavior b1
deny # 丢弃
traffic policy p1
classifier c1 behavior b1 # ACL匹配到的(包括deny和permit规则)都进入分类
# 执行deny动作,全部丢弃 ❌ 这是错的!
这样配置是错的! 因为ACL中的deny规则和permit规则都会让流量进入分类,然后统一执行deny,导致所有流量都被丢弃。
正确的黑名单配置应该是:
acl 3000 rule deny ip source 192.168.1.100 0 # 要禁止的源 # 不要在策略中放行其他流量,而是在接口上不应用策略,或应用更宽松的策略 # 或者在ACL中将黑名单流量用deny规则匹配后,不进入任何策略,直接走默认转发
实际上,纯粹的黑名单通常用traffic-filter更简单:
acl 3001 rule deny ip source 192.168.1.100 0 rule permit ip source any # 允许其他所有流量通过 interface GigabitEthernet 0/0/1 traffic-filter inbound acl 3001 # 直接过滤
记忆口诀
ACL决定是否进门,行为决定进门后是请坐还是赶走。
permit= 请进门
deny= 不让进门(直接跳过)Behavior
permit= 进门后请坐(允许)Behavior
deny= 进门后赶走(丢弃)
总结表格(速查)
| ACL规则 | 流行为 | 结果 | 适用场景 |
|---|---|---|---|
permit |
permit |
允许 | 白名单:只允许特定流量 |
permit |
deny |
拒绝 | 精细化过滤:匹配特定流量后丢弃 |
deny |
permit |
允许(不匹配该策略) | 用于排除某些流量,不让其进入本策略 |
deny |
deny |
允许(不匹配该策略) | 同上面,deny在ACL层就跳过了 |