目的

1
2
现在有两台服务器,分别是web(server1)和ftp(server2),局域网有两个网段,要求这两个网段不能互访,而且都要访问web(192.168.40.2)服务器,但是不能访问ftp(192.168.40.1)服务器。
采用ACL三层隔离VLAN的方法解决。

ACL概念

华为 ACL(访问控制列表)的分类

华为 ACL 主要分为以下几类,根据用途和匹配方式不同区分:

  1. 基本 ACL(编号范围:2000-2999)
    • 仅根据源 IP 地址过滤流量,无法匹配目的 IP端口等信息。
    • 示例:acl number 2000 rule 5 deny source 192.168.1.0 0.0.0.255(拒绝源网段 192.168.1.0/24 的流量)。
  2. 高级 ACL(编号范围:3000-3999)
    • 可根据源 IP目的 IP、协议类型(TCP/UDP/ICMP 等)、端口号等多条件组合过滤流量,功能更灵活。
    • 示例:acl number 3000 rule 5 permit tcp source 192.168.2.0 0.0.0.255 destination 10.0.0.1 0 destination-port eq 80(允许源网段访问目的 IP80 端口)。
  3. 二层 ACL(编号范围:4000-4999)
    • 基于二层信息过滤,如源 MAC 地址目的 MAC 地址VLAN ID以太网类型等。
    • 示例:acl number 4000 rule 5 deny source-mac 00e0-fc12-3456(拒绝指定源 MAC 的流量)。
  4. 用户自定义 ACL(编号范围:5000-5999)
    • 可根据数据包的载荷内容(如特定字段)自定义匹配规则,用于特殊场景(如识别特定应用协议)。
    • 配置较复杂,需指定偏移量、掩码等参数匹配数据包中的字节。
  5. 基于接口的 ACL
    • 直接在接口上应用 ACL,控制接口的入方向或出方向流量,无需关联到 MQCModular Quality of Service Command-Line Interface,模块化 QoS 命令行接口) 策略。
    • 示例:interface GigabitEthernet0/0/1 traffic-filter inbound acl 3000(在接口入方向应用 ACL 3000)。

不同类型的 ACL 适用场景不同:基本 ACL 适合简单的源地址过滤高级 ACL 适合精细的三层 / 四层流量控制二层 ACL 适合链路层过滤自定义 ACL 用于特殊需求。

ACL(访问控制列表)和流量策略配置中,deny(拒绝)和permit(允许)的组合主要通过规则优先级匹配逻辑产生不同结果,核心原则是:“按规则顺序匹配,一旦命中即执行对应动作,不再检查后续规则”

常见的组合场景及结果

1. 单条规则:直接生效

  • permit:匹配条件的流量被允许通过,不匹配的流量默认被拒绝(ACL 隐含 “拒绝所有” 的末条规则)。例:rule 5 permit ip source 192.168.1.0 0.0.0.255→ 结果:仅 192.168.1.0/24 网段的流量被允许,其他所有流量被拒绝。

  • deny:匹配条件的流量被拒绝,不匹配的流量默认被允许(仅当 ACL 应用场景为 “允许所有,仅拒绝特定流量” 时生效)。

    例:rule 5 deny ip source 192.168.1.0 0.0.0.255→ 结果:192.168.1.0/24 网段的流量被拒绝,其他所有流量被允许。

2. 多条规则:按优先级(编号)顺序匹配

规则编号越小,优先级越高(如 rule 5 优先于 rule 10),命中后不再执行后续规则。

场景 1:先permitdeny
1
2
rule 5 permit ip source 192.168.1.0 0.0.0.255  // 允许网段A
rule 10 deny ip source 192.168.1.1 0 // 拒绝网段A中的某个IP

→ 结果:192.168.1.1 的流量会先匹配 rule 5(属于网段 A)被允许,rule 10 不生效(因为已被前一条规则命中)。

场景 2:先denypermit
1
2
rule 5 deny ip source 192.168.1.1 0          // 拒绝某个IP 
rule 10 permit ip source 192.168.1.0 0.0.0.255 // 允许网段A
场景 3:deny特定流量,permit其余
1
2
rule 5 deny ip destination 10.0.0.1 0        // 拒绝访问特定目标 
rule 10 permit ip // 允许所有其他IP流量

→ 结果:所有访问 10.0.0.1 的流量被拒绝,其他所有 IP 流量被允许。

场景 4:permit特定流量,deny其余
1
2
rule 5 permit ip source 192.168.1.0 0.0.0.255  // 允许网段A 
rule 10 deny ip // 拒绝所有其他IP流量

→ 结果:仅网段 A 的流量被允许,其他所有 IP 流量被拒绝(与单条permit规则效果一致,末条隐含拒绝)。

3. 特殊情况:规则无匹配

当所有规则都未命中时,取决于 ACL 的 “默认动作”:

  • 华为设备 ACL 默认动作:拒绝所有未匹配的流量(隐含rule 65535 deny ip)。
    例:ACL 中仅配置rule 5 permit ip source 192.168.1.0 0.0.0.255,未匹配的流量会被默认拒绝。
  • 若显式配置rule 10 permit ip(允许所有),则未匹配的流量会被允许。

核心总结

  1. 规则按编号从小到大依次匹配,命中即停止
  2. permitdeny的组合需注意顺序:先拒绝特定流量,再允许其余(或反之)。
  3. 未匹配任何规则时,默认拒绝所有(华为设备)。

合理的规则顺序是关键,否则可能出现 “优先级低的规则被优先级高的规则覆盖” 的问题(如场景 1 中后配置的deny不生效)。

实验拓扑图

三层交换机设置ACL.png

配置思路

  • 华为交换机的ACL规则没变,但下发需要通过流策略traffic policy下发;
  • 流策略又包括相应的流分类trafficclassifier,流行为trafficbehavior;
  • 流分类traffic classifier用于绑定相应的ACL规则,流行为traffic behavior决定匹配的流分类是否permitdeny;
  • ACL规则里只需配置匹配的流,使用permit标识,而deny基本没啥用;
  • 如果有多个ACL number,在流策略traffic policy里需要按顺序绑定(根据业务是先允午后禁止或先禁止后允许);
  • 在接口(或者vlan)的inbound方向下发;

操作步骤

SW1配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
sysname SW1  // 设置交换机名称为SW1
#
undo info-center enable // 关闭信息中心,不再输出日志信息
#
vlan batch 20 30 40 // 批量创建VLAN 20、30、40
#
dhcp enable // 启用DHCP服务
#
acl number 3001 // 创建高级ACL 3001
rule 5 permit ip source 192.168.20.0 0.0.0.255 destination 192.168.40.1 0 // 允许192.168.20.0/24网段访问192.168.40.1
rule 10 permit ip source 192.168.30.0 0.0.0.255 destination 192.168.40.1 0 // 允许192.168.30.0/24网段访问192.168.40.1
acl number 3002 // 创建高级ACL 3002
rule 5 deny ip source 192.168.20.0 0.0.0.255 destination 192.168.30.0 0.0.0.255 // 拒绝192.168.20.0/24网段访问192.168.30.0/24网段
rule 10 deny ip source 192.168.20.0 0.0.0.255 destination 192.168.20.0 0.0.0.255 // 拒绝192.168.20.0/24网段内的通信(可能是配置错误,掩码重复)
rule 15 deny ip source 192.168.20.0 0.0.0.255 destination 192.168.40.2 0 // 拒绝192.168.20.0/24网段访问192.168.40.2
rule 20 deny ip source 192.168.30.0 0.0.0.255 destination 192.168.40.2 0 // 拒绝192.168.30.0/24网段访问192.168.40.2
#
traffic classifier tc1 operator and // 创建流量分类器tc1,匹配方式为"与"
if-match acl 3001 // 关联ACL 3001的匹配条件
traffic classifier tc2 operator and // 创建流量分类器tc2,匹配方式为"与"
if-match acl 3002 // 关联ACL 3002的匹配条件
#
traffic behavior tb1 // 创建流量行为tb1
permit // 允许匹配的流量通过
traffic behavior tb2 // 创建流量行为tb2
deny // 拒绝匹配的流量通过
#
traffic policy tp // 创建流量策略tp
classifier tc1 behavior tb1 // 将分类器tc1与行为tb1绑定
classifier tc2 behavior tb2 // 将分类器tc2与行为tb2绑定
#
drop-profile default // 默认丢弃配置文件(系统默认)
#
vlan 20 // 进入VLAN 20配置视图
traffic-policy tp inbound // 在VLAN 20的入方向应用流量策略tp
vlan 30 // 进入VLAN 30配置视图
traffic-policy tp inbound // 在VLAN 30的入方向应用流量策略tp
#
ip pool vlan2pool // 创建DHCP地址池vlan2pool
gateway-list 192.168.20.254 // 设置网关地址为192.168.20.254
network 192.168.20.0 mask 255.255.255.0 // 分配的网段为192.168.20.0/24
lease day 7 hour 0 minute 0 // 地址租期为7天
dns-list 8.8.8.8 114.114.114.114 // DNS服务器地址
#
ip pool vlan3pool // 创建DHCP地址池vlan3pool
gateway-list 192.168.30.254 // 设置网关地址为192.168.30.254
network 192.168.30.0 mask 255.255.255.0 // 分配的网段为192.168.30.0/24
lease day 7 hour 0 minute 0 // 地址租期为7天
dns-list 8.8.8.8 114.114.114.114 // DNS服务器地址
#
ip pool vlan4pool // 创建DHCP地址池vlan4pool
gateway-list 192.168.40.254 // 设置网关地址为192.168.40.254
network 192.168.40.0 mask 255.255.255.0 // 分配的网段为192.168.40.0/24
excluded-ip-address 192.168.40.1 192.168.40.2 // 排除不分配的地址(192.168.40.1和192.168.40.2)
lease day 7 hour 0 minute 0 // 地址租期为7天
dns-list 8.8.8.8 114.114.114.114 // DNS服务器地址
#
interface Vlanif1 // 进入Vlanif1接口(默认VLAN接口,未配置IP)
#
interface Vlanif20 // 进入Vlanif20接口(VLAN 20的三层接口)
ip address 192.168.20.254 255.255.255.0 // 配置IP地址和子网掩码
dhcp select global // 选择全局DHCP地址池为该VLAN分配IP
#
interface Vlanif30 // 进入Vlanif30接口(VLAN 30的三层接口)
ip address 192.168.30.254 255.255.255.0 // 配置IP地址和子网掩码
dhcp select global // 选择全局DHCP地址池为该VLAN分配IP
#
interface Vlanif40 // 进入Vlanif40接口(VLAN 40的三层接口)
ip address 192.168.40.254 255.255.255.0 // 配置IP地址和子网掩码
dhcp select global // 选择全局DHCP地址池为该VLAN分配IP
#
interface GigabitEthernet0/0/1 // 进入千兆以太网接口0/0/1
port link-type trunk // 设置接口类型为Trunk
port trunk allow-pass vlan 20 // 允许VLAN 20通过该Trunk接口
#
interface GigabitEthernet0/0/2 // 进入千兆以太网接口0/0/2
port link-type trunk // 设置接口类型为Trunk
port trunk allow-pass vlan 30 // 允许VLAN 30通过该Trunk接口
#
interface GigabitEthernet0/0/3 // 进入千兆以太网接口0/0/3
port link-type access // 设置接口类型为Access
port default vlan 40 // 将接口加入VLAN 40(默认VLAN)
#
interface GigabitEthernet0/0/4 // 进入千兆以太网接口0/0/4
port link-type access // 设置接口类型为Access
port default vlan 40 // 将接口加入VLAN 40(默认VLAN)

SW2配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sysname SW2  // 设置交换机名称为SW2
#
undo info-center enable // 关闭信息中心,停止输出日志信息
#
vlan batch 20 // 创建VLAN 20(这里只创建了一个VLAN)
#
interface Vlanif1 // 进入Vlanif1接口(默认VLAN接口,未做任何配置)
#
interface GigabitEthernet0/0/1 // 进入千兆以太网接口0/0/1
port link-type trunk // 将接口类型设置为Trunk(干道模式)
port trunk allow-pass vlan 20 // 配置该Trunk接口允许VLAN 20的数据帧通过
#
interface GigabitEthernet0/0/2 // 进入千兆以太网接口0/0/2
port link-type access // 将接口类型设置为Access(接入模式)
port default vlan 20 // 将该接口加入VLAN 20,作为其默认VLAN

SW3配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sysname SW3  // 设置交换机名称为SW3
#
undo info-center enable // 关闭信息中心,停止输出日志信息
#
vlan batch 30 // 创建VLAN 30(仅创建一个VLAN)
#
interface Vlanif1 // 进入Vlanif1接口(默认VLAN接口,未进行任何配置)
#
interface GigabitEthernet0/0/1 // 进入千兆以太网接口0/0/1
port link-type trunk // 将接口类型设置为Trunk(干道模式)
port trunk allow-pass vlan 30 // 配置该Trunk接口允许VLAN 30的数据帧通过
#
interface GigabitEthernet0/0/2 // 进入千兆以太网接口0/0/2
port link-type access // 将接口类型设置为Access(接入模式)
port default vlan 30 // 将该接口加入VLAN 30,作为其默认VLAN

测试

PC1.png
PC2.png

总结

  • ACL规则下的permit用于匹配流,流行为里的permitdeny才是真正的对报文的允许与禁止动作。

  • 基于硬件的应用:ACL被下发到硬件,例如配置QoS 功能时引用ACL,对报文进行流分类。

  • 需要注意的是,当ACLQoS 功能引用时,如果ACL规则中定义的动作为deny,则匹配此ACL的报文就被丢弃。如果ACL规则中定义的动作为permit,则S5700对匹配此ACL的报文采取的动作由QoS中流行为定义的动作决定。