你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure 防火墙和应用程序网关实现 Web 应用程序的零信任网络

Azure 应用程序网关
Azure 防火墙
Azure 虚拟网络
Azure 虚拟 WAN
Azure Web 应用程序防火墙

本指南概述了为用于检查和加密的 Web 应用实现零信任安全性的策略。 零信任范例包括许多其他概念,例如持续验证参与者的身份或将隐式信任区域的大小缩小到最小。 本文讨论的是通过公共 Internet 传入的流量的零信任体系结构的加密和检查组件。 有关安全部署应用程序的其他方面(例如身份验证),请阅读其他零信任文档。 就本文而言,多层方法效果最佳,网络安全是零信任模型中的一层。 在这一层,网络设备会检查数据包,确保只有合法的流量才能到达应用程序。

通常,不同类型的网络设备会检查网络数据包的不同方面:

  • Web 应用程序防火墙查找可指示 Web 应用程序层受到攻击的模式。
  • 下一代防火墙还可以查找一般威胁。

在某些情况下,可以结合不同类型的网络安全设备来增强保护。 面向虚拟网络的防火墙和应用程序网关这份单独的指南介绍了一种设计模式,可用于安排各种设备。 本文档重点介绍了一种常见模式,它可以最大限度地提高安全性,其中 Azure 应用程序网关在 Azure 防火墙高级版之前采取操作。 下图说明了这个模式:

显示在 Azure 防火墙高级版之前使用应用程序网关的 Web 应用网络中的数据包流的体系结构关系图。

下载此体系结构的 Visio 文件

此体系结构使用传输层安全性 (TLS) 协议来加密每个步骤的流量。

  • 客户端向应用程序网关(负载均衡器)发送数据包。 它与可选的附加 Azure Web 应用程序防火墙一起运行。

  • 应用程序网关解密数据包,并搜索对 Web 应用程序的威胁。 如果它没有发现任何威胁,会使用零信任原则对数据包进行加密。 然后,释放数据包。

  • Azure 防火墙高级版运行安全检查:

  • 如果数据包通过测试,Azure 防火墙高级版会执行以下步骤:

    • 加密数据包
    • 使用域名系统 (DNS) 服务来确定应用程序虚拟机 (VM)
    • 将数据包转发到应用程序 VM

此体系结构中的各种检查引擎可确保流量完整性:

  • Web 应用程序防火墙使用规则来防止 Web 层的攻击。 攻击的示例包括 SQL 代码注入和跨站脚本。 有关规则和 Open Web Application Security Project (OWASP) 核心规则集的详细信息,请参阅 Web 应用程序防火墙 CRS 规则组和规则
  • Azure 防火墙高级版使用一般入侵检测和防护规则。 这些规则有助于识别恶意文件和针对 Web 应用程序的其他威胁。

此体系结构支持不同类型的网络设计,本文讨论以下内容:

  • 传统的中心和分支网络
  • 使用 Azure 虚拟 WAN 作为平台的网络
  • 使用 Azure 路由服务器简化动态路由的网络

Azure 防火墙高级版和名称解析

在检查是否有恶意流量时,Azure 防火墙高级版验证 HTTP 主机头是否与数据包 IP 地址和 TCP 端口匹配。 例如,假设应用程序网关将 Web 数据包发送到 IP 地址 172.16.1.4 和 TCP 端口 443。 HTTP 主机头的值应解析为该 IP 地址。

HTTP 主机头通常不包含 IP 地址。 头包含与服务器的数字证书一致的名称。 在这种情况下,Azure 防火墙高级版使用 DNS 将主机头名称解析为 IP 地址。 网络设计会确定最适合的 DNS 解决方案,后面的章节会介绍。

注意

应用程序网关不支持 HTTP 主机头中的端口号。 因此:

  • Azure 防火墙高级版采用默认的 HTTPS TCP 端口 443。
  • 应用程序网关和 Web 服务器之间的连接仅支持 TCP 端口 443,不支持非标准端口。

数字证书

下图显示了体系结构的 TLS 会话和证书使用的公用名称 (CN) 和证书颁发机构 (CA):

显示当负载均衡器位于防火墙前面时 Web 应用网络使用的通用名称和证书颁发机构的体系结构关系图。

TLS 连接

此体系结构包含三个不同的 TLS 连接。 数字证书验证每个连接:

从客户端到应用程序网关的连接

在应用程序网关中,需要部署客户端看到的数字证书。 DigiCert 或 Let's Encrypt 等知名 CA 通常会颁发此类证书。

从应用程序网关到 Azure 防火墙高级版的连接

为了解密和检查 TLS 流量,Azure 防火墙高级版会动态生成证书。 Azure 防火墙高级版还会将自身作为 Web 服务器呈现给应用程序网关。 专用 CA 对 Azure 防火墙高级版生成的证书进行签名。 有关详细信息,请参阅 Azure 防火墙高级版证书。 应用程序网关需要验证这些证书。 在应用程序的 HTTP 设置中,需要配置 Azure 防火墙高级版使用的根 CA。

从 Azure 防火墙高级版到 Web 服务器的连接

Azure 防火墙高级版与目标 Web 服务器建立 TLS 会话。 Azure 防火墙高级版验证知名的 CA 是否对 Web 服务器的 TLS 数据包进行签名。

组件角色

应用程序网关和 Azure 防火墙高级版处理证书的方式不同,因为它们的角色不同:

  • 应用程序网关是一个反向 Web 代理。 它通过拦截 HTTP 和 HTTPS 请求来保护 Web 服务器免受恶意客户端的攻击。 对于应用程序网关后端池中的每个受保护服务器,你使用其 IP 地址或完全限定域名来声明它们。 合法客户端应能够访问每个应用程序。 因此,你可以使用公共 CA 签署的数字证书来配置应用程序网关。 使用任何 TLS 客户端将接受的 CA。
  • Azure 防火墙高级版是一个正向 Web 代理,简称为 Web 代理。 它通过从受保护的客户端拦截 TLS 调用来保护客户端免受恶意 Web 服务器的攻击。 当受保护的客户端发出 HTTP 请求时,正向代理会模拟目标 Web 服务器,生成数字证书,并将证书呈现给客户端。 Azure 防火墙高级版使用专用 CA 对动态生成的证书进行签名。 你将受保护的客户端配置为信任该专用 CA。 在此体系结构中,Azure 防火墙高级版保护从应用程序网关到 Web 服务器的请求。 应用程序网关信任 Azure 防火墙高级版使用的专用 CA。

路由和流量转发

根据网络设计的拓扑结构,路由选择会略有不同,以下章节将详细介绍中心辐射型的详细信息,虚拟 WAN和路由服务器拓扑示例的具体内容。 但是,所有拓扑结构都有一些共同点:

  • Azure 应用程序网关始终充当代理,Azure 防火墙高级版在配置为 TLS 检查时也是如此:客户端的 TLS 会话将由应用程序网关终止,而新的 TLS 会话将面向 Azure 防火墙生成。 Azure 防火墙将接收并终止来自应用程序网关的 TLS 会话,并为工作负荷生成新的 TLS 会话。 这一事实对 Azure 防火墙高级版的 IDPS 配置有影响,下面的章节将对此进行详细介绍。
  • 工作负荷将看到来自 Azure 防火墙子网 IP 地址的连接。 应用程序网关插入的 X-Forwarded-For HTTP 标头中保留了原始客户端 IP 地址。
  • 从应用程序网关到工作负荷的流量通常使用 Azure 路由机制发送到 Azure 防火墙,可以使用在应用程序网关子网中配置的用户定义路由,也可以使用 Azure 虚拟 WAN 或 Azure 路由服务器注入的路由。 虽然可以在应用程序网关的后端池中显式定义 Azure 防火墙的专用 IP 地址,但从技术上讲并不建议这样做,因为这样会占用 Azure 防火墙的某些功能,如负载均衡和粘性。

以下各节将详细介绍使用 Azure 防火墙和应用程序网关的一些最常见拓扑。

中心和辐射拓扑

通常,中心和分支设计在中心虚拟网络中部署共享网络组件,在分支中部署特定于应用程序的组件。 在大多数系统中,Azure 防火墙高级版是一种共享资源。 但是,Web 应用程序防火墙可以是共享网络设备,也可以是特定于应用程序的组件。 由于以下原因,通常最好将应用程序网关视为应用程序组件,并将其部署到分支虚拟网络中:

  • 对 Web 应用程序防火墙警报进行故障排除可能很困难。 通常需要深入了解应用程序,才能确定触发这些警报的消息是否合法。
  • 如果将应用程序网关视为共享资源,可能会超出 Azure 应用程序网关限制
  • 如果在中心部署应用程序网关,可能会遇到基于角色的访问控制问题。 当团队管理不同的应用程序但使用应用程序网关的同一实例时,可能会出现这种情况。 然后,每个团队都有权访问整个应用程序网关配置。

使用传统的中心和分支体系结构,DNS 专用区域提供了一种简单的方法来使用 DNS:

  • 配置 DNS 专用区域。
  • 将区域链接到包含 Azure 防火墙高级版的虚拟网络。
  • 确保应用程序网关用于流量和运行状况检查的值存在一个 A 记录。

下图显示了应用程序网关在分支虚拟网络中时的数据包流。 在本例中,客户端从公共 Internet 进行连接。

显示具有负载均衡器和防火墙的中心辐射型网络中的数据包流的体系结构关系图。客户端从公共 Internet 连接。

  1. 客户端向 Web 服务器提交请求。
  2. 应用程序网关拦截客户端数据包并对其进行检查。 如果数据包通过了检查,应用程序网关会将数据包发送到后端 VM。 当数据包到达 Azure 时,应用程序网关子网中的用户定义路由 (UDR) 将数据包转发到 Azure 防火墙高级版。
  3. Azure 防火墙高级版对数据包运行安全检查。 如果它们通过了测试,Azure 防火墙高级版会将数据包转发到应用程序 VM。
  4. VM 做出响应,并将目标 IP 地址设置为应用程序网关。 VM 子网中的 UDR 将数据包重定向到 Azure 防火墙高级版。
  5. Azure 防火墙高级版将数据包转发到应用程序网关。
  6. 应用程序网关应答客户端。

流量也可以从本地网络(而不是公共 Internet)到达。 流量通过站点到站点虚拟专用网络 (VPN) 或 ExpressRoute 流动。 在此方案中,流量首先到达中心的虚拟网络网关。 网络流的其余部分与前面的情况相同。

显示具有负载均衡器和防火墙的中心辐射型网络中的数据包流的体系结构关系图。客户端从本地网络连接。

  1. 本地客户端连接到虚拟网络网关。
  2. 此网关将客户端数据包转发到应用程序网关。
  3. 应用程序网关检查数据包。 如果数据包通过了检查,应用程序网关子网中的 UDR 会将数据包转发到 Azure 防火墙高级版。
  4. Azure 防火墙高级版对数据包运行安全检查。 如果它们通过了测试,Azure 防火墙高级版会将数据包转发到应用程序 VM。
  5. VM 做出响应,并将目标 IP 地址设置为应用程序网关。 VM 子网中的 UDR 将数据包重定向到 Azure 防火墙高级版。
  6. Azure 防火墙高级版将数据包转发到应用程序网关。
  7. 应用程序网关将数据包发送到虚拟网络网关。
  8. 网关应答客户端。

虚拟 WAN拓扑

还可以在此体系结构中使用网络服务虚拟 WAN。 此组件提供了许多好处。 例如,它无需在分支虚拟网络中使用用户维护的 UDR。 你可以改为在虚拟中心路由表中定义静态路由。 连接到中心的每一个虚拟网络的编程随后都包含这些路由。

当你将虚拟 WAN 用作网络平台时,会产生两个主要的差异:

  • 不能将 DNS 专用区域链接到虚拟中心,因为是 Microsoft 管理虚拟中心。 作为订阅所有者,你没有链接专用 DNS 区域的权限。 因此,不能将 DNS 专用区域与包含 Azure 防火墙高级版的安全中心相关联。 若要为 Azure 防火墙高级版实现 DNS 解析,请改为使用 DNS 服务器:

    • 配置 Azure 防火墙 DNS 设置以使用自定义 DNS 服务器。
    • 在连接到虚拟 WAN 的共享服务虚拟网络中部署服务器。
    • 将 DNS 专用区域链接到共享服务虚拟网络。 然后,DNS 服务器可以解析应用程序网关在 HTTP 主机头中使用的名称。 有关详细信息,请参阅 Azure 防火墙 DNS 设置
  • 只有在前缀短于(即减少详细度)虚拟网络前缀的情况下,才能使用虚拟 WAN 对分支中的路由进行编程。 例如,在上图中,分支 VNet 的前缀为 172.16.0.0/16:在这种情况下,虚拟 WAN 将无法注入匹配 VNet 前缀 (172.16.0.0/16) 或任何子网(172.16.0.0/24、172.16.1.0/24)的路由。 换言之,虚拟 WAN 无法吸引同一 VNet 中的两个子网之间的流量。 当应用程序网关和目标 Web 服务器位于同一虚拟网络中时,此限制变得明显:虚拟 WAN 无法强制应用程序网关和 Web 服务器之间的流量通过 Azure 防火墙高级版(一种解决方法是将用户定义的路由手动配置到应用程序网关和 Web 服务器的子网中)。

下图显示了使用虚拟 WAN 的情况下的数据包流。 在这种情况下,对应用程序网关的访问来自本地网络。 站点到站点 VPN 或 ExpressRoute 将该网络连接到虚拟 WAN。 来自 Internet 的访问是类似的。

显示中心辐射型网络中的数据包流的体系结构关系图,其中包括负载均衡器、防火墙和虚拟 WAN。

  1. 本地客户端连接到 VPN。
  2. 该 VPN 将客户端数据包转发到应用程序网关。
  3. 应用程序网关检查数据包。 如果数据包通过了检查,应用程序网关子网会将数据包转发到 Azure 防火墙高级版。
  4. Azure 防火墙高级版从共享服务虚拟网络中的 DNS 服务器请求 DNS 解析。
  5. DNS 服务器应答解析请求。
  6. Azure 防火墙高级版对数据包运行安全检查。 如果它们通过了测试,Azure 防火墙高级版会将数据包转发到应用程序 VM。
  7. VM 做出响应,并将目标 IP 地址设置为应用程序网关。 应用程序子网将数据包重定向到 Azure 防火墙高级版。
  8. Azure 防火墙高级版将数据包转发到应用程序网关。
  9. 应用程序网关将数据包发送到 VPN。
  10. VPN 应答客户端。

在这种设计下,你可能需要修改中心播发到分支虚拟网络的路由。 具体而言,应用程序网关 v2 仅支持指向 Internet 的 0.0.0.0/0 路由。 此地址的路由如果不指向 Internet,就会中断 Microsoft 管理应用程序网关所需的连接。 如果虚拟中心播发 0.0.0.0/0 路由,请通过执行以下步骤来防止该路由传播到应用程序网关子网:

  • 创建一个路由表,路由为 0.0.0.0/0,下一个跃点类型为 Internet。 将该路由与你用来部署应用程序网关的子网相关联。
  • 如果是在专用分支中部署应用程序网关,在虚拟网络连接设置中禁用默认路由传播。

路由服务器拓扑

路由服务器提供了另一种在分支中自动注入路由的方法。 使用此功能可以避免维护路由表的管理开销。 路由服务器结合了虚拟 WAN 和中心和分支变体:

  • 使用路由服务器,客户可以管理中心虚拟网络。 因此,你可以将中心虚拟网络链接到 DNS 专用区域。
  • 路由服务器的限制与虚拟 WAN 在 IP 地址前缀方面的限制相同。 只有在前缀短于(特定性低于)虚拟网络前缀的情况下,才能将路由注入分支。 由于此限制,应用程序网关和目标 Web 服务器需要位于不同的虚拟网络中。

下图显示了路由服务器简化动态路由时的数据包流。 请注意以下几点:

  • 路由服务器目前要求注入路由的设备通过边界网关协议 (BGP) 发送它们。 由于 Azure 防火墙高级版不支持 BGP,因此请改用第三方网络虚拟设备 (NVA)。
  • 中心的 NVA 功能决定了实现是否需要 DNS。

显示中心辐射型网络中的数据包流的体系结构关系图,其中包括负载均衡器、防火墙和路由服务器。

  1. 本地客户端连接到虚拟网络网关。
  2. 此网关将客户端数据包转发到应用程序网关。
  3. 应用程序网关检查数据包。 如果数据包通过了检查,应用程序网关子网会将数据包转发到后端计算机。 路由服务器在应用程序网关子网中注入的路由会将流量转发到 NVA。
  4. NVA 对数据包运行安全检查。 如果数据包通过了测试,NVA 将数据包转发到应用程序 VM。
  5. VM 做出响应,并将目标 IP 地址设置为应用程序网关。 路由服务器在 VM 子网中注入的路由会将数据包重定向到 NVA。
  6. NVA 将数据包转发到应用程序网关。
  7. 应用程序网关将数据包发送到虚拟网络网关。
  8. 网关应答客户端。

与虚拟 WAN 一样,当你使用路由服务器时,可能需要修改路由。 如果播发 0.0.0.0/0 路由,它可能会传播到应用程序网关子网。 但应用程序网关不支持该路由。 在这种情况下,请为应用程序网关子网配置一个路由表。 在该表中添加 0.0.0.0/0 路由和下一个跃点类型 Internet

IDPS 和专用 IP 地址

Azure 防火墙 IDPS 规则中所述,Azure 防火墙高级版将根据数据包的源 IP 地址和目标 IP 地址来决定应用哪些 IDPS 规则。 Azure 防火墙默认将 RFC 1918 范围(10.0.0.0/8192.168.0.0/16172.16.0.0/12)和 RFC 6598 范围 (100.64.0.0/10) 中的专用 IP 地址视为内部 IP 地址。 因此,如本文中的图表所示,应用程序网关部署在这些范围之一的子网中(上述示例中为 172.16.0.0/24),Azure 防火墙高级版将把应用程序网关和工作负荷之间的流量视为内部流量,并且只使用标记为应用于内部流量或任何流量的 IDPS 签名。 标记为应用于入站或出站流量的 IDPS 签名不会应用于应用程序网关和工作负荷之间的流量。

强制 IDPS 入站签名规则应用于应用程序网关和工作负荷之间流量的最简单方法是将应用网关置于前缀在专用范围之外的子网中。 不一定需要为该子网使用公共 IP 地址,而是可以自定义 Azure 防火墙高级版将 IDPS 视为内部的 IP 地址。 例如,如果你的组织不使用 100.64.0.0/10 范围,则可以从 IDPS 的内部前缀列表中删除该范围(请参阅 Azure 防火墙高级版专用 IPDS 范围,了解有关如何操作的详细信息),并在配置有 100.64.0.0/10 中 IP 地址的子网中部署应用程序网关。

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

后续步骤