跳到正文
Lutong's Homepage

华为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 区域代表「防火墙自身」。它有三条铁律:

  1. local 区域不能添加任何接口。你执行 firewall zone local → add interface 会报错。防火墙上的所有业务接口,本身就「属于」local 区域。
  2. 凡是防火墙自己主动发出的报文,都视为从 local 区域发出。比如防火墙主动 PING 别人、向 syslog 服务器发日志、向 NTP 服务器同步时间。
  3. 凡是需要防火墙自己响应并处理(而不是转发)的报文,都视为由 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 字段就是这条规则被命中的次数。三条经验:

  1. 命中计数为 0 的「精确规则」,大概率被前面的宽泛规则吃掉了。这就是顺序问题。
  2. 命中计数在一段时间内不增长,说明这条规则是「死规则」,可以考虑清理。企业防火墙配了三年不清理,策略列表能有几百条,其中一半是死的——这本身就是一个安全隐患。
  3. 命中计数暴增的规则要关注。如果一条「允许任何源访问任何目的」的宽泛规则计数在飞涨,说明有人在用它兜底,得去查是谁。

调整顺序有两条路:命令行下用移动规则的命令,或者在 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 或应用识别配置指南列出的名称列表为准

几个必须知道的现实约束:

  1. 应用识别库要升级,不升级的新应用识别不出来,会被当成未知流量。建议配好定时升级,否则库里还是三年前的应用特征。
  2. 加密流量识别率有限。TLS 加密后只能靠 TLS 指纹、SNI、行为特征猜,识别率达不到明文时那么高。所以「按应用管控」必须有「未知流量怎么办」的兜底策略。
  3. 应用识别的性能开销比五元组大。高带宽场景下要评估防火墙的「应用层吞吐」指标,不能按「三层吞吐」买设备。
  4. 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 看得到这条规则,命中计数在涨。

排查过程:

  1. display zone 看到 dmz 区域下有 GE1/0/4,正常;
  2. display ip routing-table 看到 192.168.30.0/24 是直连路由,正常;
  3. display firewall session table 能看到会话——说明策略放行了,问题不在策略;
  4. 那么问题在「放行之后到达服务器」这一段。检查 DMZ 服务器的默认网关,发现服务器网关配的是 192.168.30.254,而防火墙接口是 192.168.30.1;
  5. 结论:去程报文到了服务器,回程报文发给了 192.168.30.254(一个不存在的地址),服务器永远收不到响应。

这个案例的典型意义是:防火墙「策略命中」≠「业务通」。策略只是第一关,回程路径、服务器自身网关、服务器本地防火墙都是后面的关卡。查防火墙的人容易陷入「我策略配对了就是你的问题」,而查服务器的人容易陷入「网络不通找网络」,双方都觉得对方有问题。排障时把「去程」和「回程」分开验证,是最快的解法。

26.7 新手踩坑与注意事项

  1. 接口配了地址却没有加入安全区域——报文进来直接丢弃,没有任何日志,让你误以为设备坏了。配完地址立刻加区域。
  2. 把「区域优先级高」当成「自动放行」——trust 优先级 85,不代表 trust 能访问 untrust,所有跨区流量都要显式策略。
  3. 策略方向写反——source-zone 和 destination-zone 写反,策略一条都不命中。建议改完策略立刻看命中计数。
  4. 忘记配 → local 策略——远程管理、PING 防火墙、SNMP 采集全部失败,且现象是「设备明明活着但管不了」。
  5. 以为管理只需开 service-manage——接口开关和安全策略是两层,缺一层就不通。
  6. 同区域默认放行被当成隔离——把办公网和访客网都划进 trust,两者完全互通。区域划分必须对应安全边界。
  7. 改了策略不清会话——旧会话继续按旧策略转发,「改了没效果」的假象。改完必清会话。
  8. 精确规则放在宽泛规则后面——永远不命中。display security-policy statistics 一眼看出死规则。
  9. default action 被改成 permit 且无人察觉——防火墙退化成路由器,全部流量放行。巡检时必看。
  10. 防火墙自己发出的流量没放行——NTP 不同步、日志发不出、DNS 代理不生效,这些「功能坏了」的故障其实是策略问题。
  11. H3C 上忘记 import interface——与华为漏 add interface 同类,但 H3C 更隐蔽,因为连「同域丢弃」也一并生效。
  12. 策略用 any 兜底——一条 source-zone any destination-zone any action permit 能让所有测试都通过,但等于没防火墙。上线前检查有没有 any 兜底规则。
  13. description 全部留空——三个月后的自己看不懂,交接时全部重做。
  14. 上线前没有备份策略——一条误删的 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 自测题

  1. 为什么「接口配了地址、路由也对、PING 不通外网」在防火墙上非常正常?至少要补哪几步配置?
  2. local 区域为什么不能加入接口?「从外网 SSH 登录防火墙」在策略看来是什么方向的流量?
  3. 策略 A:允许 192.168.10.0/24 访问外网;策略 B:拒绝 192.168.10.100 访问外网。B 放在 A 后面会怎样?怎么验证?
  4. 防火墙自己要做 NTP 客户端同步时间,需要配安全策略吗?配什么方向?
  5. H3C F1000 上「同区域接口之间默认丢弃」和华为「同区域默认放行」相比,各有什么安全影响?
  1. 因为防火墙默认拒绝一切跨区流量。至少补:①接口加入安全区域;②trust→untrust 的安全策略并 action permit;③如果请求是发往防火墙自身(如 PING 网关),还要 →local 策略和接口 service-manage ping permit。
  2. local 代表防火墙自身,其成员是「所有业务接口本身」,不是某个具体物理口,因此不能添加接口。从外网 SSH 登录防火墙在策略看来是 source-zone untrust → destination-zone local 的流量。
  3. B 永远不命中,192.168.10.100 会先被 A 放行。验证方法:display security-policy rule name B 看命中计数是否长期为 0;解决用 rule move 把 B 移到 A 之前。
  4. 需要。防火墙主动发出的 NTP 报文视为从 local 发出,需要配 source-zone local → destination-zone untrust 的策略放行 NTP 服务。
  5. H3C 同域默认丢弃更安全(默认更严),但配置量大,同域内需要互通的接口必须显式放行;华为同域默认放行更方便,但如果把不该互通的网段划进同一个区域,会形成安全漏洞。两种机制都要求「区域划分与安全边界一致」。

关于本书:《华为 / H3C 网络设备典型功能配置详解》—— 面向国内高校/企业网络环境, 华为 VRP 与 H3C Comware 双厂商并排配置的实操教材,共 43 章。 全书所有命令尽量有官方出处,查不到的显式标注「待核实」。 返回系列目录