4. Azure防火墙部署与策略管理

Azure Firewall 是 Azure 提供的云原生、有状态、托管的网络虚拟设备,它同时承担网络层与传输层的过滤、应用层 FQDN 过滤、入站 DNAT 发布、出站 SNAT 隐藏、威胁情报拦截以及 DNS 代理等职责。理解它的关键在于:Azure Firewall 不是一台可以随意登录的虚拟机,而是一组由策略驱动的分布式转发与检测能力,其行为完全由“层级—策略—规则集合—规则”这条配置链决定。本节围绕这条配置链,把部署形态、规则匹配顺序、地址转换、威胁情报、DNS 代理、强制隧道以及混合场景集成串成一条可落地的工程主线。

一、部署形态与防火墙层级

Azure Firewall 的部署位置决定了它能看到哪些流量。最典型的是放在 Hub 虚拟网络的 AzureFirewallSubnet 中,由 Hub 统一检查来自 Spoke、本地网络和 Internet 的流量;Spoke 通过 VNet 对等互联把默认路由指向防火墙的私有 IP,形成“中心检查、分支转发”的拓扑。若业务需要完全隔离,也可以在每个 VNet 内单独部署防火墙,但会带来策略分散和管理成本上升。

“防火墙层级”在 Azure 中体现为策略的继承关系。Azure Firewall Policy 支持父策略与子策略:父策略承载组织级基线(例如统一阻断高风险类别、统一威胁情报模式),子策略承载环境差异(例如生产订阅允许的 FQDN 列表)。子策略通过继承获得父策略的规则集合,同时可以追加自己的规则集合。规则集合的评估顺序是:先处理父策略中优先级数值更小的规则集合,再处理子策略中优先级数值更小的规则集合;同一策略内,数值越小越先匹配。这个顺序直接决定了“允许”与“拒绝”谁先命中,是排障时最需要先确认的信息。

Azure Firewall 策略层级与规则匹配顺序 父策略(组织基线) 规则集合 A|优先级 100|网络规则 允许 Spoke→本地 DNS 53/UDP 规则集合 B|优先级 200|应用规则 允许 *.windowsupdate.com 规则集合 C|优先级 65000|拒绝所有 兜底拒绝,防止隐式放行 子策略(生产环境) 规则集合 D|优先级 300|应用规则 允许 *.azurewebsites.net 规则集合 E|优先级 400|DNAT 规则 发布 443 → 10.2.1.4:443 继承父策略 A/B/C 子策略可追加,不可删除父规则 继承 实际匹配顺序(数值小者先评估) A 100 B 200 D 300 E 400 C 65000 隐式拒绝 关键判断 • 命中“允许”即放行,不再继续向下评估;命中“拒绝”即丢弃。 • 若所有规则集合均未命中,则由隐式拒绝丢弃,日志中显示为默认拒绝。

二、规则集合与规则类型

Azure Firewall Policy 中的规则集合按用途分为三类:网络规则处理 IP、端口和协议;应用规则处理 FQDN、HTTP/HTTPS 及 TLS 检查;DNAT 规则处理入站发布。三类规则集合各自独立排序,但整体评估时先看网络规则集合,再看应用规则集合,最后看 DNAT 规则集合。这一点常被误解:DNAT 规则并不是最先匹配,而是入站流量在完成 DNAT 之后,再按网络/应用规则决定是否放行。

规则集合的优先级数值范围为 100 到 65000,数值越小越先评估。工程上建议按“基础服务 → 业务应用 → 临时放行 → 兜底拒绝”分段留出间隔,例如 100、200、300、65000,便于后续插入新规则集合而不必重排。每条规则内部还可以设置源、目标、协议、端口、FQDN 标签等条件,条件之间是“与”关系,规则集合之间是“或”关系。

三、DNAT 与 SNAT

DNAT 用于把公网入站流量发布到内部服务器。典型配置是:源为 *,目标为防火墙公共 IP,目标端口 443,协议 TCP,转换为内部地址 10.2.1.4:443。转换完成后,防火墙会以内部地址为源再次发起连接,因此还需要一条网络规则允许“防火墙 → 10.2.1.4:443”。如果只配 DNAT 而不配对应放行规则,入站流量会在转换后被隐式拒绝。

SNAT 用于出站流量的源地址隐藏。当内部主机访问 Internet 时,Azure Firewall 默认使用其公共 IP 做 SNAT。若目标也是私有地址(例如经 VPN 或 ExpressRoute 访问本地网络),则默认不做 SNAT,以保留原始源 IP 供本地审计。需要强制 SNAT 时,可在规则中显式指定 snat 行为。SNAT 端口是有限资源,每个公共 IP 约提供 64000 个端口,高并发场景应规划多个公共 IP 或使用 NAT 网关分担。

四、威胁情报与 DNS 代理

威胁情报模式有三种:关闭、仅告警、告警并拒绝。生产环境建议至少启用“告警并拒绝”,让防火墙基于微软情报源阻断已知恶意 IP 和域名。威胁情报的判定发生在规则评估之后,因此即使某条允许规则命中,若目标命中威胁情报,仍可能被拒绝,日志中会显示威胁情报命中原因。

DNS 代理让防火墙充当 VNet 内虚拟机的 DNS 服务器。启用后,虚拟机把 DNS 查询发给防火墙私有 IP,防火墙再转发到自定义 DNS 或 Azure DNS。它的价值在于:应用规则中的 FQDN 能被正确解析并映射到 IP,从而让基于 FQDN 的过滤真正生效;同时 DNS 查询也会进入防火墙日志,便于审计。若未启用 DNS 代理,应用规则中的 FQDN 可能因解析结果不一致而失效。

五、强制隧道与混合场景集成

强制隧道指把防火墙的出站 Internet 流量也引导到本地网络,由本地安全设备统一检查。配置方式是在 AzureFirewallSubnet 上关联一张路由表,把 0.0.0.0/0 指向虚拟网络网关或本地防火墙的下一跳。此时 Azure Firewall 不再直接出 Internet,而是把流量交给本地设备。需要注意:强制隧道下,防火墙的公共 IP 不再用于出站 SNAT,DNAT 入站仍可正常工作,但出站路径变长,延迟和带宽受本地链路影响。

混合场景集成通常包含三件事:一是通过 VNet 网关或 ExpressRoute 打通本地网络;二是用路由表把 Spoke 默认路由指向防火墙;三是用 DNS 代理或自定义 DNS 保证本地域名与 Azure 域名都能解析。一个常见的教学示例是:Spoke 子网路由表 0.0.0.0/0 → 防火墙私有 IP,防火墙网络规则允许 Spoke → 10.0.0.0/8 走 VPN,应用规则允许 *.azure.com 走 Internet,威胁情报设为“告警并拒绝”,DNS 代理指向本地 DNS 服务器。这样既满足本地访问,又保留云端 FQDN 过滤和威胁拦截。

排障时优先确认三件事:规则集合优先级是否被更高优先级的拒绝规则抢先命中;DNAT 是否配套了放行规则;DNS 代理是否启用且虚拟机 DNS 指向正确。这三项覆盖了大多数“配置看起来对但流量不通”的场景。

六、可直接参考的策略配置样例

下面给出一份可参考的策略骨架,字段和数值属于教学示例,实际部署时应按环境调整:

父策略 BaselinePolicy
  规则集合 Net-Base        优先级 100  网络规则
    允许 10.1.0.0/16 → 10.0.0.0/8  任意  用于本地访问
  规则集合 App-Base        优先级 200  应用规则
    允许 * → *.windowsupdate.com  https
  规则集合 Deny-All        优先级 65000 网络规则
    拒绝 * → *  任意

子策略 ProdPolicy(继承 BaselinePolicy)
  规则集合 App-Prod        优先级 300  应用规则
    允许 10.2.0.0/16 → *.azurewebsites.net  https
  规则集合 DNAT-Web        优先级 400  DNAT 规则
    源 *  目标 20.1.1.10:443  TCP  转换 10.2.1.4:443
  规则集合 Net-DNAT-Allow  优先级 500  网络规则
    允许 10.2.1.0/24 → 10.2.1.4:443  TCP

威胁情报模式:告警并拒绝
DNS 代理:启用,自定义 DNS 10.0.0.10
强制隧道:AzureFirewallSubnet 路由 0.0.0.0/0 → VirtualNetworkGateway

部署完成后,判断是否达成目标可以看三类信号:Azure Firewall 日志中是否出现预期的允许记录和威胁情报命中记录;Spoke 虚拟机访问本地地址和 Internet 地址是否分别走通;DNAT 公网地址是否能在外部访问到内部服务。若出现“允许规则已配但流量仍被拒”,先检查是否有更高优先级的拒绝规则集合命中,再检查 DNAT 是否缺少放行规则,最后确认 DNS 代理和路由表是否一致。把这些检查点固定成习惯,Azure Firewall 的策略管理就会从“反复试错”变成“按顺序验证”。