华为H3C实战 | 第26章 防火墙安全区域与基本策略
📚 本系列共 43 篇(第 26 / 43 篇) · 第四卷 设备与安全篇 —— 路由器与防火墙
← 上一篇:第 25 章 路由器基础配置 下一篇:第 27 章 防火墙 NAT 与部署模式 →
本章导读:路由器"能路由就转发",防火墙"没放行就丢弃"——这条默认行为差异是转岗第一道坎。本章讲清安全区域、安全策略及其匹配规则:通是配出来的,不通才是默认。
本章结构:
- 26.1 功能原理与业务场景 —— 区域划分与优先级、报文过防火墙的六个处理步骤(含会话与状态检测)、“默认拒绝一切"的三层含义,以及和路由器的六维思维差别
- 26.2 华为设备配置详解 —— 区域创建、接口挂区、安全策略规则、
service-manage管理面放行的完整模板 - 26.3 H3C 设备配置详解 —— H3C 安全域模型 + 包过滤 ACL 的对照写法
- 26.4 华为 / H3C 命令对照表
- 26.5 配置验证 —— 会话表、策略命中计数、
display/display security-policy一类命令怎么看 - 26.6 排错与故障树 —— “策略明明配了却不通"的分支排查
- 26.7 新手踩坑与注意事项
- 26.8 本章小结
重点提示:配完接口和路由发现内网 ping 不通外网,别怀疑设备坏了,先回 26.1.3 确认是不是没放行;从外网登录不上、内网能登录,看 local 区域和 service-manage 那一段;两个网段互访不受管控,检查 26.1.3 第三层讲的"同区域默认放行”。
关联章节:路由器基础与转发逻辑见第 25 章;ACL 的写法与匹配顺序见第 17 章;NAT 与安全策略的先后关系见第 27 章。
26.1 功能原理与业务场景
26.1.1 这功能是干嘛的(通俗版)
前面第 25 章的路由器,门口站的是个「只管指路、不管你是谁」的问事处——谁来问路它都告诉对方怎么走,从不拦人。防火墙不是问事处,它是机场安检口,每个人、每件行李都要过机器,没有明确「放行条」的,一律不许过。
安全区域(Security Zone) 就是机场的分区:国内出发厅(trust,自己人)、国际中转区(dmz,外来但要办事的)、登机口外(untrust,外面的世界)。安检口分得很细——每个分区之间的门都有一个专属安检通道,从国内厅到国际区的通道、从国际区到登机口的通道,各有一条,各自有一张「允许通过清单」。
安全策略(Security Policy) 就是那张清单:谁(源)、去哪(目的)、干什么(服务/应用)、什么时间(时间段)——四个条件全对上,才按清单上的动作处理(放行或拒绝)。
理解这两件事,就理解了防火墙 90% 的配置。剩下的 10% 是:区域怎么划、接口怎么挂、策略怎么排、怎么知道策略有没有命中。
26.1.2 在网络里怎么落地(设计视角)
一个中型企业防火墙的典型区域划分:
Internet
|
203.0.113.10 (untrust 区域)
|
+------------+------------+
| USG6000E |
| |
| GE1/0/1 GE1/0/3 GE1/0/4
| untrust trust dmz
+-----+--------+--------+
| | |
192.168.10.0/24 | 192.168.30.0/24
内网办公区 | DMZ 服务器区
(trust) |
(访客网 192.168.20.0/24 可另接一个接口,
单独划入 guest 区域,本章不展开)
四个内置区域的定位和默认信任级别:
| 区域 | 优先级 | 谁在里面 | 典型诉求 |
|---|---|---|---|
| local | 100 | 防火墙自己(接口本身) | 管理、PING、SNMP、SSH |
| trust | 85 | 内部员工办公网 | 能出去上网,能被严格管控 |
| dmz | 85 | 对外提供服务的服务器 | 外网能访问指定端口,但访问不到内网 |
| untrust | 5 | Internet | 什么都不可信 |
优先级数字代表「谁更可信」,不代表「谁能访问谁」。 这是零基础读者最容易误解的一点:很多人以为「trust 优先级高,所以 trust 能自动访问 untrust」,其实不是,从哪个区域到哪个区域都必须显式配安全策略。优先级在双机热备等场景中还会被 VGMP 之类的机制引用,但绝不能当成放行依据——任何把「优先级高」理解成「自动放行」的想法,都会在第一次配策略时翻车。
一个报文从内网 PC 访问外网,防火墙上的完整处理:
| 步骤 | 发生什么 | 关键判断 |
|---|---|---|
| 1 | 报文从 GE1/0/3 进入 | 该口属于 trust 区域 |
| 2 | 查会话表 | 已有会话?有则直接转发,跳过 3~6 |
| 3 | 无会话,匹配安全策略 | 从规则顶部逐条匹配,命中即停 |
| 4 | 命中 trust→untrust action permit |
放行并建会话 |
| 5 | 后续报文走会话,不再逐条匹配策略 | 性能关键 |
| 6 | 返回报文根据会话表直接放回 | 反向流量不需要单独配策略 |
第 4 步和第 6 步是防火墙「状态检测」的核心。防火墙是有状态的:一条策略放行了「A 到 B」的去向,那么「B 到 A」的返回流量自动放行,不需要再配一条反方向策略。这个特性能省掉一半配置量,但也是新手误解的来源——很多人配了两条相反方向的策略,其实只需要一条。
适用版本:华为 USG6000E(VRP V500R005 及以上);H3C F1000 系列(Comware V7 R8860 及以上)。两家产品的安全区域与策略模型思路一致,但命令结构差异较大,请以本章对照表为索引。
26.1.3 「默认拒绝一切」— 全章最核心的一句话
防火墙的默认行为是:没有明确放行的流量,一律丢弃。 这条铁律有三层含义,缺一层都会翻车:
第一层:区域之间的流量,默认全部拒绝。 你配完接口地址、配好路由,从内网 PING 外网,不通。不是配置错了,是因为你还没放行。路由器上「通」是默认状态,防火墙上「通」是配置出来的状态。这是从路由器转岗到防火墙的工程师最容易卡住的坎,有时候会误以为「设备坏了」。
第二层:防火墙自己所在的区域(local)也受控。 你要从外网 SSH 登录防火墙做远程管理,必须配一条 untrust → local 的策略放行 SSH。很多人以为「管理流量是设备自己的事,不归策略管」,结果发现外网登录不上、内网登录得上,怎么查都查不出来。
第三层:同区域内的流量默认放行。 这一层看起来跟前面矛盾,其实不冲突:同一个区域内的接口之间,比如 trust 的两个接口互相访问,默认是通的。这是一个安全坑——如果两个本来该隔离的网段被划进了同一个区域(比如把办公网和访客网都划进 trust),它们之间就完全不受管控。区域划分必须与安全边界一致,不能为了方便把不该在一起的网段塞进同一个区域。
26.1.4 与路由器的思维差别
这一节值得单独拿出来讲,因为它是「从会配路由器到会配防火墙」的认知分水岭。
| 维度 | 路由器 | 防火墙 |
|---|---|---|
| 默认行为 | 收到报文就查路由,能路由就转发 | 收到报文先查策略,没明确放行就丢弃 |
| 配置重点 | 路由表 | 安全策略 + 区域划分 |
| 排障第一步 | 看路由表 | 看会话表 + 看策略命中计数 |
| 区域概念 | 没有 | 核心概念,一切策略围绕区域 |
| 流量方向 | 只关心「往哪走」 | 关心「从哪来、到哪去、算不算同一区域」 |
| 管理面 | 网线插上就能管 | 接口 service-manage + 安全策略两层都要放行 |
如果你是从路由器转过来的,请把这张表贴在桌上念三遍。后面所有的坑,本质都是「用路由器的思维去配防火墙」。
26.2 华为设备配置详解
26.2.1 命令行基础速览
USG6000E 的区域与策略相关命令族:
| 命令族 | 代表命令 | 作用 |
|---|---|---|
| 接口与区域 | firewall zone trust + add interface GE1/0/3 |
把接口挂到区域下 |
| 接口管理面 | service-manage ssh permit |
允许在这个接口上做 SSH 管理 |
| 安全策略 | security-policy → rule name X |
建规则 |
| 策略条件 | source-zone / destination-zone / source-address / service |
五元组与区域条件 |
| 策略动作 | action permit / action deny |
放行或拒绝 |
| 默认动作 | default action deny |
无匹配时的兜底动作,默认就是 deny |
| 查看命中 | display security-policy rule name X |
看规则命中次数 |
| 会话表 | display firewall session table |
看当前会话 |
进入策略视图后提示符是 [USG6000E-policy-security],进入某条规则后是 [USG6000E-policy-security-rule-XXX]。
26.2.2 安全区域规划的实战方法论
在敲命令之前,先把区域规划做对,比后面配一百条策略都值钱。下面是可执行的四步法:
第一步,按「信任等级」而不是「部门」划分区域。 区域是安全边界的抽象,不是组织架构的映射。一个部门里既有普通办公电脑又有服务器,如果都划进 trust,那么服务器就暴露在办公网的全部风险下。正确做法是「按角色划区域」:员工终端一个区、服务器一个区、对外服务一个区、访客一个区。
第二步,一个区域内的接口,安全诉求必须一致。 这是检查区域规划是否合理的试金石:如果区域内两个接口之间的访问需要区别对待(比如同一个区域里 A 能访问 B 但 C 不能),那说明它们不该在同一个区域。因为区域内的流量默认放行,你没法「区域内再细管」。
第三步,给每个区域定一个「允许进出的清单」。 用一张矩阵表把业务需求写死,然后照着表配策略,配完逐条核对:
| 源区域 → 目的区域 | 业务需求 | 策略动作 | 备注 |
|---|---|---|---|
| trust → untrust | 员工上网 | permit | 只放行 HTTP/HTTPS/DNS |
| trust → dmz | 员工访问内部业务系统 | permit | 按服务器逐个列 |
| dmz → untrust | 服务器主动更新/回源 | 仅特定 IP + 特定端口 permit | 不要整域放行 |
| untrust → dmz | 外网访问对外服务 | permit | 只开必要端口 |
| untrust → trust | 无 | — | 绝不配置 |
| dmz → trust | 无 | — | 绝不配置 |
| 各区域 → local | 运维管理 | permit | 只允许管理网段 |
这张表是本章最有价值的产出物之一。它一旦写好,策略配置就从「凭感觉」变成了「照表执行」,后面谁接手都能看懂。
第四步,先配拒绝、再配放行,最后审计。 具体到华为设备上,就是先清空默认策略、把 default action 保持为 deny,再按表逐条放行;上线一周后看命中计数,把没命中的规则清理掉。审计这一步不是可选项,因为企业防火墙最大的安全隐患往往不是「少配了拒绝」,而是「多配了放行」——那些遗留的历史规则,没人敢删,最后成了后门。
26.2.3 完整配置模板(办公网出口 + DMZ 服务器)
这个模板覆盖三个方向的业务:内网信任区上网、外网访问 DMZ 的 Web 服务器、内网访问 DMZ 服务器。注意每条策略的顺序——这是本章的重点之一。
# 接口地址配置
system-view
sysname FW-EDGE
interface GigabitEthernet1/0/1
description TO-ISP
ip address 203.0.113.10 255.255.255.0
quit
interface GigabitEthernet1/0/3
description TO-OFFICE
ip address 192.168.10.1 255.255.255.0
quit
interface GigabitEthernet1/0/4
description TO-DMZ
ip address 192.168.30.1 255.255.255.0
quit
# 接口加入安全区域(关键一步,漏了接口就等于没接策略)
firewall zone untrust
add interface GigabitEthernet1/0/1
quit
firewall zone trust
add interface GigabitEthernet1/0/3
quit
firewall zone dmz
add interface GigabitEthernet1/0/4
quit
# 接口管理面放行(第一层:允许从这个接口做 ping/ssh/https 管理)
interface GigabitEthernet1/0/3
service-manage ping permit
service-manage ssh permit
service-manage https permit
quit
# 路由:默认路由指向运营商,回程路由指向内网核心
ip route-static 0.0.0.0 0.0.0.0 203.0.113.1
ip route-static 192.168.20.0 255.255.255.0 192.168.10.254
在写策略之前,先说清楚「服务」这个概念,因为这是本章最容易写错的一处。
华为安全策略里 service 后面跟的是「服务对象名称」,不是端口号。 三种写法:
| 写法 | 含义 | 例子 |
|---|---|---|
| 引用内置服务对象 | 华为预定义了常见协议的服务对象 | service http、service https、service dns |
| 引用自定义服务对象 | 先把端口封装成对象,再在策略里引用 | service mysql_svc |
| 省略不写 | 表示任意服务(等于放行全部协议端口) | — |
自定义服务对象用 ip service-set 创建(依据华为《维护宝典》原文示例):
# 先把 MySQL 3306 端口封装成一个服务对象
system-view
ip service-set mysql_svc type object
service protocol tcp source-port 0 to 65535 destination-port 3306
quit
关键:service protocol tcp ... destination-port 这条命令是在 ip service-set 服务对象视图下敲的,不是在安全策略规则视图下。 策略规则里只能写 service <对象名>。把服务对象视图的命令直接抄进策略规则,设备会报错——这是新手最常见的混淆点,我第一轮就写错过。
接下来是策略部分。每一条策略的顺序都有讲究,我们按「先精确、后宽泛」的原则排列:
# 安全策略:按精确到宽泛的顺序排列,命中即停
security-policy
# 规则1:内网特定服务器访问 DMZ 数据库,只放行特定端口(最精确,放最前)
rule name OFFICE_TO_DMZ_DB
description office-app-to-db
source-zone trust
destination-zone dmz
source-address 192.168.10.0 24
destination-address 192.168.30.10 32
service mysql_svc
action permit
quit
# 规则2:外网访问 DMZ 的 Web 服务,只开 80/443
rule name UNTRUST_TO_DMZ_WEB
description publish-web
source-zone untrust
destination-zone dmz
destination-address 192.168.30.10 32
service http
service https
action permit
quit
# 规则3:内网办公区允许访问 DMZ 全部服务器
rule name TRUST_TO_DMZ
description office-to-dmz
source-zone trust
destination-zone dmz
source-address 192.168.10.0 24
action permit
quit
# 规则4:内网办公区允许访问 Internet(最宽泛,放最后)
rule name TRUST_TO_UNTRUST
description office-to-internet
source-zone trust
destination-zone untrust
source-address 192.168.10.0 24
action permit
quit
# 兜底:保持默认拒绝(这是默认值,写出来是为了自证)
default action deny
quit
# 管理员从内网 SSH 管理防火墙(local 区域,第二层放行)
security-policy
rule name MANAGE_FROM_TRUST
description admin-ssh
source-zone trust
destination-zone local
source-address 192.168.10.0 24
service ssh
action permit
quit
quit
保存配置:
# 保存,否则重启全部丢失
save
26.2.4 逐行讲解
先解释模板的整体思路:每一条策略回答一个明确的业务问题,而不是「一条策略放行所有」。这种写法看起来啰嗦,但三个月后有人问「为什么外网能访问 8080 端口」,你能一眼看出是哪个业务需要、哪条策略放通的。
| 命令 | 作用 | 新手常填错的地方 |
|---|---|---|
firewall zone trust + add interface GE1/0/3 |
把接口挂进区域 | 配了接口地址却忘了加区域,报文进来直接丢,且没有任何日志 |
service-manage ping permit |
允许该接口接受 PING 管理 | 以为这一条就能登录了,其实还要策略 |
rule name XXX |
建规则并命名 | 名字随便写 rule1,半年后没人看得懂 |
source-zone trust / destination-zone untrust |
指定方向 | 方向写反:写成 source-zone untrust destination-zone trust,内网就出不去 |
source-address 192.168.10.0 24 |
指定源网段 | 写成 192.168.10.0/24,VRP 不接受斜杠写法 |
service mysql_svc |
引用自定义服务对象(对象里定义了 3306 端口) | 写成 service protocol tcp destination-port 3306 会报错——那是服务对象视图的命令 |
action permit |
放行 | 每条规则必须显式给动作,不写则规则不生效 |
default action deny |
兜底动作 | 有人为了「先通了再说」改成 permit,等于把防火墙变成路由器 |
三个必须展开讲的细节:
第一,service-manage 与安全策略是「两层门」。 华为防火墙上,管理流量要过两道关:第一道是接口的 service-manage 开关(接口层面允不允许这类管理报文进来),第二道是 local 区域的策略(策略层允不允许)。两层都放行才能登录。 实测经验充分:只开 service-manage https permit 而策略没配 → Web 登不上;只配了策略而 service-manage 没开 → 同样登不上。这个设计看起来冗余,其实是纵深防御:运维可以临时只关掉一层来隔离故障范围。
⚠ 一处需要据版本核实的细节:网络上流传一种说法——接口上开了
service-manage之后,管理流量的判定会「先走 service-manage、而绕过安全策略」,甚至需要undo service-manage enable才能让策略生效。我查了多个来源,说法互相矛盾,且未找到厂商官方原文支撑,因此本书不采信这个结论。生产环境请以设备实测为准:配完 security-policy 与service-manage后,从对侧实际登录验证一次即可确定本版本的判定顺序。⚠ 待核实:待核实 service-manage 与 security-policy 的判定先后顺序(是否存在 service-manage 放行后绕过策略的版本行为),需厂商文档或真机验证
第二,default action deny 是默认值,为什么还要写? 写出来是一种「自证」:任何人接手这台设备,display security-policy 一眼就能看到兜底是拒绝,不需要去记默认值。更重要的是——这个值是可以被改的,如果前一位工程师为了调试把它改成 permit 且忘了改回,整个防火墙就变成了没锁的门。把它显式写出来,能让你在巡检时马上发现异常。
第三,规则顺序决定了安全效果,不是「反正都匹配得上」。 模板里规则 1(精确到单一 IP 的 3306 端口)放在最前面,规则 4(整个网段访问 Internet)放在最后。假设反过来,把规则 4 放最前,那么内网到 DMZ 的流量会先匹配到规则 4 吗?不会,因为规则 4 的目的区域是 untrust,而 DMZ 流量目的区域是 dmz,两者不匹配。真正的顺序问题发生在「目的区域相同、条件宽窄不同」的规则之间。 举个真实例子:你想禁止 192.168.10.100 访问外网,但允许整个 192.168.10.0/24 上网,就必须把禁止规则放前面:
# 反例演示:精确拒绝必须在宽泛允许之前
security-policy
rule name DENY_ONE_HOST
source-zone trust
destination-zone untrust
source-address 192.168.10.100 32
action deny
quit
rule name TRUST_TO_UNTRUST
source-zone trust
destination-zone untrust
source-address 192.168.10.0 24
action permit
quit
quit
如果这两条顺序反了,192.168.10.100 会先命中第二条被放行,第一条永远不命中——display security-policy rule name DENY_ONE_HOST 的命中计数会一直是 0。命中计数是判断「策略顺序有没有写错」最直接的工具。
26.2.5 local 区域的坑(全章最容易翻车的一节)
这一节单独拿出来讲,因为它是新手卡住时间最长、最难自己想明白的问题。
问题:我从外网 SSH 登录防火墙,接口 service-manage ssh permit 已经开了,安全策略也配了,为什么还是登不上?
答案:因为 local 区域的特殊性。
华为防火墙的 local 区域代表「防火墙自身」。它有三条铁律:
- local 区域不能添加任何接口。你执行
firewall zone local→add interface会报错。防火墙上的所有业务接口,本身就「属于」local 区域。 - 凡是防火墙自己主动发出的报文,都视为从 local 区域发出。比如防火墙主动 PING 别人、向 syslog 服务器发日志、向 NTP 服务器同步时间。
- 凡是需要防火墙自己响应并处理(而不是转发)的报文,都视为由 local 区域接收。别人 PING 防火墙的接口地址、别人 SSH 登录防火墙,都是「发往 local 区域」。
所以「从外网 SSH 登录防火墙」这个动作,在策略看来是 source-zone untrust → destination-zone local 的流量,必须显式放行:
# 允许管理员从外网特定地址 SSH 登录防火墙
security-policy
rule name MANAGE_FROM_UNTRUST
description admin-ssh-from-internet
source-zone untrust
destination-zone local
source-address 198.51.100.50 32
service ssh
action permit
quit
quit
同时接口上也要开 service-manage ssh permit。两层缺一层都不行,这是华为防火墙的设计。
反过来,还有一类更隐蔽的情况:防火墙自己要访问别人。比如你让防火墙做 NTP 客户端去同步时间、做 syslog 客户端往外发日志、做 DNS 代理向外查询,这些都是防火墙主动发出的报文,视为从 local 发出,也需要 local → untrust(或对应区域)的策略放行:
# 允许防火墙主动发出的 NTP / DNS / syslog 报文出去
security-policy
rule name LOCAL_TO_UNTRUST
description fw-self-outbound
source-zone local
destination-zone untrust
service ntp
service dns
action permit
quit
quit
这类问题最坑的地方在于:现象是「时间不同步」「日志收不到」「DNS 代理不生效」,你根本不会想到是安全策略拦的。 记住一句话:防火墙自己的任何对外行为,都是一条从 local 出发的流量,都要过策略。
26.2.6 查看命中计数与调整策略顺序
策略配了一大堆,怎么知道每条到底有没有用、有没有配错?靠命中计数。
# 查看某条策略的匹配次数
display security-policy rule name TRUST_TO_UNTRUST
输出里的 Hit count 字段就是这条规则被命中的次数。三条经验:
- 命中计数为 0 的「精确规则」,大概率被前面的宽泛规则吃掉了。这就是顺序问题。
- 命中计数在一段时间内不增长,说明这条规则是「死规则」,可以考虑清理。企业防火墙配了三年不清理,策略列表能有几百条,其中一半是死的——这本身就是一个安全隐患。
- 命中计数暴增的规则要关注。如果一条「允许任何源访问任何目的」的宽泛规则计数在飞涨,说明有人在用它兜底,得去查是谁。
调整顺序有两条路:命令行下用移动规则的命令,或者在 Web 界面上直接拖动。命令行的准确语法随版本不同:
本项未能核实:USG6000E 调整规则顺序的命令我查不到官方原文(rule move 及其 before/after 参数是否存在、是否仅 Web 界面可调)。因此本书只建议「删掉重建」这一确定可行的替代做法,不提供未经验证的移动命令。
⚠ 待核实:待核实 USG6000E 调整安全策略规则顺序的准确命令,需厂商文档或真机
对初学者最省事的做法是:先删掉配错的规则,再按正确顺序重新建一遍。策略规则的匹配顺序与创建顺序一致,重建成正确的先后顺序,比研究移动命令更快。
看全貌用整体统计命令:
# 查看所有策略的命中统计
display security-policy statistics
26.2.7 查看会话表并手工清除会话
改完策略后如果发现「改了还是不生效」,十有八九是旧会话还在。防火墙对已有会话不做策略再匹配,改了策略必须清掉相关会话才会重新走策略。
# 查看与某个源地址相关的会话
display firewall session table verbose source 192.168.10.100
# 清掉所有从该地址发起的会话(改策略后常用)
reset firewall session table source 192.168.10.100
这一条是现场排障的高频动作:策略改了不生效,先清会话。不清会话然后怀疑设备坏了,是新手最常见的自我耽误。
26.2.8 策略的写法规范(企业级建议)
小企业配两三条策略就够,但企业级场景下策略会越积越多,没有规范就会失控。华为官方推荐的策略规划原则,这里整理成可执行的六条:
| 序号 | 原则 | 落地做法 |
|---|---|---|
| 1 | 使用安全区域划分网络 | 区域划分与安全边界一致,不要为了省事把网段合并 |
| 2 | 遵循最小授权 | 能指定目的 IP 就不要写 any,能指定端口就不要写全程服务 |
| 3 | 先精确后宽泛 | 精确规则靠前,宽泛规则垫底 |
| 4 | 出入方向都识别与控制 | 出方向和入方向都要有面对应的策略,别只配出方向 |
| 5 | 定期审计与优化 | 每季度看一次命中计数,清理死规则 |
| 6 | 每条策略都记录意图 | 用 description 写清业务场景和申请单号 |
第 6 条最容易被省略,但它的价值在半年后爆发:一条 rule name rule_12 和一条 rule name OA_ACCESS_ERP_3306_2024Q3 在排障时的价值差一个数量级。
26.2.9 用应用识别把策略管到「是什么应用」
前面所有策略都是按「五元组」(源 IP、目的 IP、协议、源端口、目的端口)写的。五元组的管理粒度有天花板:今天几乎所有业务都跑在 443 端口上,你能不让员工访问 443 吗?不允许就是全公司打不开网页。这就引出了应用识别(Application Identification)。
应用识别不做「看端口」,而是「看内容特征」:同一个 443 端口,识别出这是企业微信、那是抖音、那是某个网盘。识别出来之后,策略就能管到应用层:
# 按应用放行:只允许办公类应用出网,其余应用拒绝
security-policy
rule name ALLOW_OFFICE_APPS
source-zone trust
destination-zone untrust
source-address 192.168.10.0 24
application WeiXin
application DingTalk
action permit
quit
rule name DENY_OTHER_APPS
source-zone trust
destination-zone untrust
source-address 192.168.10.0 24
action deny
quit
quit
⚠ 待核实:待核实 USG6000E 应用识别库中应用名称的准确写法(如 WeiXin / DingTalk 等),以设备上
display sa application或应用识别配置指南列出的名称列表为准
几个必须知道的现实约束:
- 应用识别库要升级,不升级的新应用识别不出来,会被当成未知流量。建议配好定时升级,否则库里还是三年前的应用特征。
- 加密流量识别率有限。TLS 加密后只能靠 TLS 指纹、SNI、行为特征猜,识别率达不到明文时那么高。所以「按应用管控」必须有「未知流量怎么办」的兜底策略。
- 应用识别的性能开销比五元组大。高带宽场景下要评估防火墙的「应用层吞吐」指标,不能按「三层吞吐」买设备。
application与service是 AND 关系。同一条规则里既写service https又写application WeiXin,意思是「https 上的微信流量」,两者都满足才命中。
理解这四点的价值在于:不要指望「按应用管控」能一次到位,它是「五元组策略 + 应用识别兜底」的组合拳。先按五元组把大体框架搭起来(哪些网段能出去),再用应用识别做精细化(出去之后能干什么)。
26.3 H3C 设备配置详解
26.3.1 H3C 的安全区域与域间策略模型
H3C F1000 的区域概念与华为同构(trust/untrust/dmz/local),但默认行为有三条重要差异,这三条直接决定了「配少一步就全不通」:
| 差异点 | 华为 USG6000E | H3C F1000 |
|---|---|---|
| 跨区域流量 | 由安全策略控制,默认拒绝 | 由域间策略控制,若域间策略不存在或不生效,报文被丢弃 |
| 同区域接口之间 | 默认放行 | 默认丢弃 |
| 未加入任何安全域的接口 | — | 该接口与安全域内接口之间的报文会被丢弃 |
| 发往本机(local)的报文 | 需 →local 策略 |
缺省丢弃,需匹配域间策略才放行 |
| 缺省安全域集合 | trust / untrust / dmz / local | Local / Trust / DMZ / Management / Untrust(多一个 Management) |
第三条特别隐蔽:H3C 上新装的防火墙,接口配了地址、配了路由,但不加入安全域,那么「接口之间的流量全部丢弃」,而且丢弃得很安静。所以 H3C 上的第一件事一定是把接口 import interface 进安全域。
第四条同样重要,它是 H3C 的一个额外便利:设备管理口(如 MEth0/0/0 这类专用管理接口)缺省属于 Management 安全域,而 Management 与 Local 之间的报文默认放行,不需要配策略。 这意味着用管理口登录 F1000 时,不用额外放行。但反过来说,如果你用业务接口做管理(而不是管理口),就没有这个"默认放行"待遇,必须显式配 →local 策略——这和华为的规则一致。
把第四条和第二条合起来看,H3C 的默认姿态比华为更严格:华为「同域默认放行、本机流量需策略」,H3C 是「同域默认丢弃、未加域丢弃、本机流量缺省丢弃」,只有 Management ↔ Local 是例外。记住这个「三丢弃一例外」,H3C 防火墙的默认行为就全清楚了。
26.3.2 完整配置模板(安全域 + 安全策略)
H3C 有两个时代的策略写法:老的「包过滤策略(packet-filter)+ 域间实例」和新的「安全策略(security-policy ip)」及「对象策略(object-policy ip)」。新版本 F1000 主推 security-policy ip,本章以它为主线,packet-filter 作为对照讲解。
# 接口地址配置
system-view
sysname F1000-EDGE
interface GigabitEthernet1/0/1
description TO-ISP
ip address 203.0.113.10 24
quit
interface GigabitEthernet1/0/3
description TO-OFFICE
ip address 192.168.10.1 24
quit
interface GigabitEthernet1/0/4
description TO-DMZ
ip address 192.168.30.1 24
quit
# 安全域创建与接口导入(H3C 必做,否则报文全丢弃)
security-zone name trust
import interface GigabitEthernet1/0/3
quit
security-zone name untrust
import interface GigabitEthernet1/0/1
quit
security-zone name dmz
import interface GigabitEthernet1/0/4
quit
# 路由
ip route-static 0.0.0.0 0 203.0.113.1
策略部分用 security-policy ip,规则写法与华为有相似之处但关键词不同:
# 安全策略:源/目的区域 + 地址条件 + 动作 pass/drop
security-policy ip
# 规则1:内网访问特定 DMZ 服务器的数据库端口(最精确)
rule name OFFICE_TO_DMZ_DB
source-zone trust
destination-zone dmz
source-ip-subnet 192.168.10.0 24
destination-ip-host 192.168.30.10
service-port tcp destination eq 3306
action pass
quit
# 规则2:外网访问 DMZ 的 Web
rule name UNTRUST_TO_DMZ_WEB
source-zone untrust
destination-zone dmz
destination-ip-host 192.168.30.10
service-port tcp destination eq 80
action pass
quit
# 规则3:内网访问 Internet(最宽泛,放最后)
rule name TRUST_TO_UNTRUST
source-zone trust
destination-zone untrust
source-ip-subnet 192.168.10.0 24
action pass
quit
quit
# 管理员从内网登录防火墙(local 区域同样要放行)
security-policy ip
rule name MANAGE_FROM_TRUST
source-zone trust
destination-zone local
source-ip-subnet 192.168.10.0 24
service-port tcp destination eq 22
action pass
quit
quit
H3C 上指定「服务」有两种写法,容易混:一种是引用预定义的服务对象(service https),另一种是直接写端口条件(service-port tcp destination eq 80)。前者依赖对象组里已定义好服务,后者更直接。上面模板用的是后者。
26.3.3 逐行讲解与陷阱标注
| 命令 | 作用 | 与华为的差异 | 陷阱 |
|---|---|---|---|
security-zone name trust |
创建安全域 | 华为 firewall zone trust |
名字大小写,H3C 建的是自定义域,不代表它就是「高信任」 |
import interface GE1/0/3 |
接口导入安全域 | 华为 add interface |
漏配 = 报文全丢,且无日志 |
security-policy ip |
进入安全策略视图 | 华为 security-policy |
H3C 多了 ip 后缀 |
source-ip-subnet 192.168.10.0 24 |
指定源网段 | 华为 source-address 192.168.10.0 24 |
命令词不同,逻辑一致 |
destination-ip-host 192.168.30.10 |
指定单一目的主机 | 华为 destination-address X 32 |
H3C 有 -host 专用形式 |
action pass |
放行 | 华为 action permit |
H3C 是 pass,不是 permit |
action drop |
拒绝 | 华为 action deny |
— |
顺带澄清一个常见的疑问:H3C 的缺省安全域名,官方文档写作 Local / Trust / DMZ / Untrust(首字母大写),但命令参考明确写了「安全域名称不区分大小写」,所以 security-zone name trust 与 security-zone name Trust 操作的是同一个域。本书为了与命令示例的可复制性,统一用小写。这不是错误,也不是版本差异,纯粹是书写习惯。
H3C 独有的一个大坑:安全域名字是自定义的,不代表信任级别。 华为的 trust / untrust / dmz 是内置区域且自带优先级语义;H3C 虽然也有这几个名字的安全域,但你可以用 security-zone name Zone_RND 建任意名字的域。名字本身不带任何语义,全部依赖你在策略里的显式配置。这意味着你可以把访客网擅自 import 进名为 trust 的域——策略不会帮你拦,因为访客网与办公网此时是「同域」,而 H3C 同域默认丢弃,反而把访客网和办公网都互相隔离了。这个结果碰巧符合预期,但逻辑上是错的,换个版本或换个场景就会出事。
26.3.4 老写法:域间实例 + 包过滤策略
很多现网存量 F1000 用的是老写法,排障时必须看得懂:
# 老写法:建域间实例,在实例上挂 ASPF 与包过滤 ACL
acl advanced 3500
rule 5 permit ip source 192.168.10.0 0.0.0.255 destination 203.0.113.0 0.0.0.255
quit
zone-pair security source trust destination untrust
aspf apply policy 1
packet-filter 3500
quit
这套写法的核心是「ACL 决定放不放行、域间实例决定在哪两个域之间生效」。ASPF(Application Specific Packet Filter)负责识别多通道协议(FTP、SIP 等),把控制连接里协商出来的动态端口自动放行——不配 ASPF,FTP 主动模式必然不通。
新老写法的关系:security-policy ip 是新一代的统一策略引擎,zone-pair + packet-filter 是老一代的包过滤。存量的 F1000 上很可能两种同时存在,排障时要两者都看:
# 查看当前生效的安全策略规则
display security-policy ip
# 查看域间实例上的包过滤配置
display zone-pair security
26.3.5 H3C 的 local 区域
H3C 同样有 local 安全域,同样代表设备自身。三条铁律与华为一致:设备自己发出的报文视为从 local 发出;需要设备响应的报文视为发往 local;local 区域不能导入物理接口。
# 允许管理员从内网 SSH 管理防火墙
security-policy ip
rule name MANAGE_FROM_TRUST
source-zone trust
destination-zone local
source-ip-subnet 192.168.10.0 24
action pass
quit
quit
同样地,设备自己往外发的 NTP、syslog、DNS 也要 local → untrust 的策略放行。这一条与华为完全同构,迁移知识不需要重学。
26.3.6 H3C 上「策略不生效」的三个高频原因
H3C 的排障顺序与华为略有不同,因为它多了一个「域间实例」的中间层。以下是现场最高频的三个原因:
原因一:接口没导入安全域。 这是 H3C 独有的第一大坑。华为上「接口没加区域」会让报文丢弃,H3C 上同样,但更隐蔽的是——H3C 还有一条「安全域内接口与不属于任何安全域的接口之间的报文会被丢弃」。所以假如你把内网口导入了 trust,外网口忘了导入,那么内外网之间双向都不通,而策略里明明是配了方向正确的规则的。查 display security-zone 是排障第一步。
原因二:同安全域内接口之间默认丢弃。 如果你的组网里有两个接口同时属于 trust,且需要互访,那么必须显式配 source-zone trust destination-zone trust 的策略(或者用域内策略)。华为上这件事默认是通的,直接迁移过来会出问题。
原因三:老写法与新写法冲突。 存量设备上经常同时存在 zone-pair + packet-filter 与 security-policy ip,两者都会生效。有时一条旧的 packet-filter 规则把流量提前拒了,你在新策略里怎么加都不通。排障时必须两边都看:
# 同时检查两套策略引擎
display zone-pair security
display security-policy ip
display packet-filter
第 3 条命令能列出所有接口/域间上挂的包过滤配置。「新策略加了不生效」先去查有没有旧的包过滤拦截,这是存量设备迁移时最耗时的坑。
26.4 华为 / H3C 命令对照表
| 功能 | 华为(USG6000E) | H3C(F1000 Comware V7) | 差异说明 |
|---|---|---|---|
| 进入区域配置 | firewall zone trust |
security-zone name trust |
命令词完全不同 |
| 接口加区域 | add interface GE1/0/3 |
import interface GE1/0/3 |
add vs import |
| 进入策略视图 | security-policy |
security-policy ip |
H3C 多 ip 后缀 |
| 建规则 | rule name XXX |
rule name XXX |
相同 |
| 源区域 | source-zone trust |
source-zone trust |
相同 |
| 源地址(网段) | source-address 192.168.10.0 24 |
source-ip-subnet 192.168.10.0 24 |
命令词不同 |
| 目的地址(单主机) | destination-address X 32 |
destination-ip-host X |
H3C 有 host 专用形式 |
| 服务端口 | 先 ip service-set 建对象,策略里 service <对象名>;内置服务直接 service http |
策略里直接 service-port tcp destination eq 80 |
华为必须先建服务对象,H3C 可内联写端口 |
| 放行动作 | action permit |
action pass |
permit vs pass |
| 拒绝动作 | action deny |
action drop |
deny vs drop |
| 默认动作 | default action deny(默认) |
域间策略不存在即丢弃 | H3C 无显式 default 命令 |
| 接口管理面 | service-manage ssh permit |
由安全策略 + 服务使能控制 | 机制不同 |
| 同域流量 | 默认放行 | 默认丢弃 | 重要差异 |
| 查看策略 | display security-policy |
display security-policy ip |
— |
| 查看会话 | display firewall session table |
display session table |
— |
26.5 配置验证
26.5.1 华为验证命令
第一组:确认接口与区域的绑定关系。 这是所有排障的起点。
两个命令都能用,别被绕晕(已核实华为官方原文):
display zone——简写,官方排障案例里高频使用,直接列出各区域及其接口display firewall zone [zone-name] [interface | priority]——命令参考里的正式条目,可以按区域名、按接口、按优先级查看两者都能查到想查的信息。本书统用
display zone。
# 查看所有安全区域及其包含的接口
display zone
期望输出里能看到 trust 区域下面列着 GigabitEthernet1/0/3、dmz 下面列着 GigabitEthernet1/0/4。如果某个业务接口没出现在任何区域下,它收到的报文会被直接丢弃,且不会有任何日志。
第二组:确认策略配置与默认动作。
# 查看全部安全策略及默认动作
display security-policy
第三组:确认策略命中情况。 这是判断策略是否真的生效的关键:
# 查看单条策略的命中计数
display security-policy rule name TRUST_TO_UNTRUST
# 查看全部策略的命中统计
display security-policy statistics
第四组:确认会话建立成功。
# 查看会话表,确认流量真的有会话
display firewall session table
正常输出会包含源地址、目的地址、协议、端口、所属策略等字段。会话表是防火墙的「活体证据」:策略配得再对,会话表空着就说明流量根本没进来或没匹配上。
第五组:端到端验证。 从终端依次做:
1. ping 网关 192.168.10.1 → 验证到防火墙本身的连通(需要 local 策略)
2. ping 公网 8.8.8.8 → 验证 trust→untrust 策略 + NAT + 路由
3. 浏览器访问 DMZ 服务器 → 验证 trust→dmz 策略
4. 外网 telnet/浏览器访问 203.0.113.10 → 验证 untrust→dmz 策略
第 1 步很重要但经常被跳过:PING 网关都通不了,说明连 local 区域都没放行,此时去查 trust→untrust 策略是白费功夫。
26.5.2 H3C 验证命令
# 查看安全域与成员接口
display security-zone
# 查看安全策略规则
display security-policy ip
# 查看会话表
display session table
H3C 的 display security-zone 输出里,每个域名下面会列出成员接口。接口列表为空的安全域等于没配。
26.6 排错与故障树
26.6.1 主故障树:策略配了还是不通
这是防火墙排障最高频的问题,按下面的顺序查,不要跳步:
| 顺序 | 检查项 | 华为命令 | 判断依据 |
|---|---|---|---|
| 1 | 接口是否 up | display interface brief |
物理与协议都 up |
| 2 | 接口是否在区域内 | display zone(或 display firewall zone) |
业务口必须出现在某区域下 |
| 3 | 路由是否存在 | display ip routing-table |
去程与回程都要有 |
| 4 | 会话是否建立 | display firewall session table |
有会话说明策略已放行 |
| 5 | 策略是否命中 | display security-policy statistics |
命中数是否增长 |
| 6 | 是否旧会话残留 | 清会话后重试 | 改策略后必做 |
| 7 | 对端是否放通回程 | 对端设备上查 | 防火墙单向不通常见 |
这套顺序的价值在于「分层隔离」:第 13 步是「网络层能不能到」,第 46 步是「防火墙让不让过」,第 7 步是「对端认不认返回」。哪一步断了,问题就锁定在哪一层,不会在策略里瞎找。
26.6.2 常见症状对照
| 症状 | 最可能原因 | 排查命令 | 解决 |
|---|---|---|---|
| 内网 PING 不通网关 | 接口没加区域 / local 策略没放行 ICMP | display zone |
加区域 + service-manage ping permit + local 策略 |
| 能 PING 网关、PING 不通公网 | trust→untrust 策略没配或方向写反 | display security-policy |
检查 source-zone/destination-zone |
| 外网访问 DMZ 不通,内网访问 DMZ 通 | 缺 untrust→dmz 策略 | display security-policy |
补策略 |
| 远程 SSH 登录不上,本地能登 | 缺 →local 策略或 service-manage 未开 |
display security-policy |
两层都放行 |
| 时间不同步、日志收不到 | 缺 local→untrust 策略 | display security-policy |
放行 local 到目标区域 |
| 改了策略仍不生效 | 旧会话残留 | display firewall session table |
reset firewall session table |
| 某条精确策略命中数为 0 | 被前面的宽泛策略吃掉 | display security-policy statistics |
rule move 调整顺序 |
| 所有流量都不通、无任何日志 | 接口未加入任何区域 | display zone |
加区域 |
26.6.3 一个真实的排错案例
现象:新上线的防火墙,内网办公区上网正常,但所有内网用户都访问不了 DMZ 的数据库服务器(192.168.30.10 的 3306 端口)。策略配了 trust → dmz 放行整个 192.168.10.0/24,display security-policy 看得到这条规则,命中计数在涨。
排查过程:
display zone看到 dmz 区域下有GE1/0/4,正常;display ip routing-table看到192.168.30.0/24是直连路由,正常;display firewall session table能看到会话——说明策略放行了,问题不在策略;- 那么问题在「放行之后到达服务器」这一段。检查 DMZ 服务器的默认网关,发现服务器网关配的是
192.168.30.254,而防火墙接口是192.168.30.1; - 结论:去程报文到了服务器,回程报文发给了
192.168.30.254(一个不存在的地址),服务器永远收不到响应。
这个案例的典型意义是:防火墙「策略命中」≠「业务通」。策略只是第一关,回程路径、服务器自身网关、服务器本地防火墙都是后面的关卡。查防火墙的人容易陷入「我策略配对了就是你的问题」,而查服务器的人容易陷入「网络不通找网络」,双方都觉得对方有问题。排障时把「去程」和「回程」分开验证,是最快的解法。
26.7 新手踩坑与注意事项
- 接口配了地址却没有加入安全区域——报文进来直接丢弃,没有任何日志,让你误以为设备坏了。配完地址立刻加区域。
- 把「区域优先级高」当成「自动放行」——trust 优先级 85,不代表 trust 能访问 untrust,所有跨区流量都要显式策略。
- 策略方向写反——
source-zone和destination-zone写反,策略一条都不命中。建议改完策略立刻看命中计数。 - 忘记配
→ local策略——远程管理、PING 防火墙、SNMP 采集全部失败,且现象是「设备明明活着但管不了」。 - 以为管理只需开
service-manage——接口开关和安全策略是两层,缺一层就不通。 - 同区域默认放行被当成隔离——把办公网和访客网都划进 trust,两者完全互通。区域划分必须对应安全边界。
- 改了策略不清会话——旧会话继续按旧策略转发,「改了没效果」的假象。改完必清会话。
- 精确规则放在宽泛规则后面——永远不命中。
display security-policy statistics一眼看出死规则。 default action被改成 permit 且无人察觉——防火墙退化成路由器,全部流量放行。巡检时必看。- 防火墙自己发出的流量没放行——NTP 不同步、日志发不出、DNS 代理不生效,这些「功能坏了」的故障其实是策略问题。
- H3C 上忘记
import interface——与华为漏add interface同类,但 H3C 更隐蔽,因为连「同域丢弃」也一并生效。 - 策略用
any兜底——一条source-zone any destination-zone any action permit能让所有测试都通过,但等于没防火墙。上线前检查有没有 any 兜底规则。 description全部留空——三个月后的自己看不懂,交接时全部重做。- 上线前没有备份策略——一条误删的
undo security-policy可能删掉所有策略,先display current-configuration导出。
26.8 本章小结
26.8.1 要点清单
- 防火墙默认拒绝一切;路由器默认转发。这是两个设备的根本差别。
- 安全区域:trust(85)/ dmz(85)/ untrust(5)/ local(100),优先级不构成放行依据。
- 接口必须加入区域,否则报文丢弃且无日志。
- 安全策略四要素:源区域、目的区域、源/目的地址、服务/应用,动作
permit/deny,命中即停。 - 规则顺序:先精确后宽泛;用命中计数验证顺序是否正确。
- local 区域:设备自己发出/接收并处理的流量都走 local。远程管理必须配
→local策略,设备对外行为必须配local→策略,且接口service-manage是另一层开关。 - 状态检测:去程放行后反向自动放行,不需要配反方向策略。
- 改策略不生效先清会话。
- H3C 三差异:同域默认丢弃、未加安全域接口的报文丢弃、
action pass/drop替代permit/deny。
26.8.2 自测题
- 为什么「接口配了地址、路由也对、PING 不通外网」在防火墙上非常正常?至少要补哪几步配置?
local区域为什么不能加入接口?「从外网 SSH 登录防火墙」在策略看来是什么方向的流量?- 策略 A:允许
192.168.10.0/24访问外网;策略 B:拒绝192.168.10.100访问外网。B 放在 A 后面会怎样?怎么验证? - 防火墙自己要做 NTP 客户端同步时间,需要配安全策略吗?配什么方向?
- H3C F1000 上「同区域接口之间默认丢弃」和华为「同区域默认放行」相比,各有什么安全影响?
- 因为防火墙默认拒绝一切跨区流量。至少补:①接口加入安全区域;②trust→untrust 的安全策略并
action permit;③如果请求是发往防火墙自身(如 PING 网关),还要→local策略和接口service-manage ping permit。 - local 代表防火墙自身,其成员是「所有业务接口本身」,不是某个具体物理口,因此不能添加接口。从外网 SSH 登录防火墙在策略看来是
source-zone untrust→destination-zone local的流量。 - B 永远不命中,
192.168.10.100会先被 A 放行。验证方法:display security-policy rule name B看命中计数是否长期为 0;解决用rule move把 B 移到 A 之前。 - 需要。防火墙主动发出的 NTP 报文视为从 local 发出,需要配
source-zone local→destination-zone untrust的策略放行 NTP 服务。 - H3C 同域默认丢弃更安全(默认更严),但配置量大,同域内需要互通的接口必须显式放行;华为同域默认放行更方便,但如果把不该互通的网段划进同一个区域,会形成安全漏洞。两种机制都要求「区域划分与安全边界一致」。
关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录
本人保留对侵权者及其全家发动因果律武器的权利
版权提醒
如无特殊申明,本站所有文章均是本人原创。转载请务必附上原文链接:https://www.elliot98.top/post/huawei-h3c-book/26/。
如有其它需要,请邮件联系!版权所有,违者必究!