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

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

本文介绍如何为 Web 应用实现零信任安全性,以实现检查和端到端加密。 零信任模型包括许多其他概念,例如连续身份验证和最小化隐式信任区域的大小。

本文重点介绍来自公共 Internet 的入站流量的零信任体系结构的加密和检查组件。 有关安全部署应用程序的其他方面的信息,例如身份验证和授权,请参阅 零信任文档。 本文中的示例使用多层方法。 在多层方法中,网络安全构成零信任模型层之一。 在这一层,网络设备会检查数据包,确保只有合法的流量才能到达应用程序。

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

  • Web 应用程序防火墙查找可指示 Web 应用程序层受到攻击的模式。

  • 下一代防火墙还可以查找一般威胁。

此体系结构重点介绍一种通用模式,用于最大程度地提高安全性,其中 Azure 应用程序网关在流量到达 Azure 防火墙高级版之前会检查和处理流量。 在某些情况下,可以组合不同类型的网络安全设备来提高保护。 有关详细信息,请参阅 适用于虚拟网络的 Azure 防火墙和应用程序网关

建筑

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

下载此体系结构的 Visio 文件

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

  1. 客户端向应用程序网关(负载均衡器)发送数据包。 它通过添加 Azure Web 应用程序防火墙的可选方式运行。

  2. 应用程序网关解密数据包,并搜索对 Web 应用程序的威胁。 如果找不到任何威胁,它将使用零信任原则来加密数据包。 然后,释放数据包。

  3. Azure 防火墙高级版运行以下安全检查:

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

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

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

  • Azure Web 应用程序防火墙使用规则来防止 Web 层的攻击。 攻击的示例包括 SQL 代码注入和跨站脚本。 有关规则和开放全球应用程序安全项目(OWASP)核心规则集(CRS)的详细信息,请参阅 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 应用网络使用的 CN 和 CA。

Azure 防火墙动态生成自己的证书。 此功能是将其置于应用程序网关之后的主要原因之一。 否则,应用程序客户端将面临自生成的证书,这些证书标记为安全风险。

TLS 连接

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

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

在应用程序网关中,需要部署客户端看到的数字证书。 DigiCert 或 Let's Encrypt 等知名 CA 通常会颁发此类证书。 此机制与 Azure 防火墙从自签名或内部公钥基础结构 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 代理通过生成数字证书并将其呈现给客户端来模拟目标 Web 服务器。 Azure 防火墙高级版使用专用 CA 对动态生成的证书进行签名。 你将受保护的客户端配置为信任该专用 CA。 在此体系结构中,Azure 防火墙高级版保护从应用程序网关到 Web 服务器的请求。 应用程序网关信任 Azure 防火墙高级版使用的专用 CA。

路由和流量转发

根据网络设计的拓扑,路由略有不同。 以下几个部分介绍中心辐射型拓扑、虚拟 WAN 和路由服务器拓扑的示例。 所有拓扑都有以下共同点:

  • 应用程序网关始终充当代理。 为 TLS 检查配置 Azure 防火墙高级版时,它还充当代理。 应用程序网关会终止来自客户端的 TLS 会话,新的 TLS 会话构建在 Azure 防火墙中。 Azure 防火墙接收并终止源自应用程序网关的 TLS 会话,并将新的 TLS 会话生成到工作负载。 此过程会影响 Azure 防火墙高级版的 IDPS 配置。 有关详细信息,请参阅 IDPS 和专用 IP 地址

  • 工作任务检测到来自 Azure 防火墙子网 IP 地址的连接。 原始客户端 IP 地址保留在应用程序网关插入的 HTTP 标头中 X-Forwarded-For 。 Azure 防火墙还支持在标头中 X-Forwarded-For 注入源客户端 IP 地址。 在此方案中,源客户端 IP 地址是应用程序网关的 IP 地址。

  • 从应用程序网关发往工作负荷的流量通常使用 Azure 路由机制发送到 Azure 防火墙。 这些机制包括在应用程序网关子网中配置的用户定义路由,以及由虚拟 WAN 或路由服务器注入的路由。 可以显式定义应用程序网关后端池中的 Azure 防火墙专用 IP 地址,但不建议这样做,因为它会删除应用程序网关的某些本机功能,例如负载均衡和会话粘性。

以下部分介绍可用于 Azure 防火墙和应用程序网关的一些最常见拓扑。

中心和分支拓扑

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

  • 对 Azure Web 应用程序防火墙警报进行故障排除可能很困难。 通常需要深入了解应用程序,才能确定触发这些警报的消息是否合法。

  • 如果将应用程序网关视为共享资源,可能会超出 应用程序网关限制

  • 如果在中心部署应用程序网关,可能会遇到基于角色的访问控制问题。 当团队管理不同的应用程序,但使用相同的应用程序网关实例时,可能会出现这种情况。 然后,每个团队都可以访问整个应用程序网关配置。

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

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

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

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

  1. 客户端向 Web 服务器提交请求。

  2. 应用程序网关拦截客户端数据包并对其进行检查。 如果数据包通过检查,应用程序网关会将数据包发送到后端 VM。 当数据包到达 Azure 时,应用程序网关子网中的 UDR 会将它们转发到 Azure 防火墙高级版。

  3. Azure 防火墙高级版对数据包运行安全检查。 如果它们通过了测试,Azure 防火墙高级版会将数据包转发到应用程序 VM。

  4. VM 响应并将目标 IP 地址设置为应用程序网关。 VM 子网中的 UDR 将数据包重定向到 Azure 防火墙高级版。

  5. Azure 防火墙高级版将数据包转发到应用程序网关。

  6. 应用程序网关应答客户端。

流量也可以从本地网络(而不是公共 Internet)到达。 流量通过站点到站点虚拟专用网络(VPN)或 Azure 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 预先确定分支中的路由。 例如,在前面的关系图中,分支虚拟网络具有前缀 172.16.0.0/16。 在这种情况下,虚拟 WAN 无法注入与虚拟网络前缀 () 或任何子网 (172.16.0.0/16172.16.0.0/24172.16.1.0/24) 匹配的路由。 换句话说,虚拟 WAN 不能在同一虚拟网络中的两个子网之间定向流量。

    当应用程序网关和目标 Web 服务器位于同一虚拟网络中时,此限制变得明显。 虚拟 WAN 无法强制应用程序网关和 Web 服务器之间的流量通过 Azure 防火墙高级版。 一个解决方法是在应用程序网关和 Web 服务器子网中手动配置 UDR。

下图显示了使用虚拟 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 仅支持 0.0.0.0/0 指向 Internet 的路由。 此地址的路由如果不指向 Internet,就会中断 Microsoft 管理应用程序网关所需的连接。 如果虚拟中心发布 0.0.0.0/0 路由,请通过以下方式阻止该路由传播到应用程序网关子网:

  • 创建一个路由表,其中路由为 0.0.0.0/0,下一个跃点类型为 Internet。 将该路由与你用来部署应用程序网关的子网相关联。

  • 如果是在专用分支中部署应用程序网关,在虚拟网络连接设置中禁用默认路由传播。

路由服务器拓扑

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

  • 可以使用路由服务器来管理中心虚拟网络。 因此,你可以将中心虚拟网络链接到 DNS 专用区域。

  • 路由服务器的限制与虚拟 WAN 在 IP 地址前缀方面的限制相同。 只有在前缀短于(特定性低于)虚拟网络前缀的情况下,才能将路由注入分支。 由于此限制,应用程序网关和目标 Web 服务器需要位于不同的虚拟网络中。

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

  • 路由服务器目前要求注入路由的设备通过边界网关协议 (BGP) 发送它们。 Azure 防火墙高级版不支持 BGP,因此请改用非Microsoft网络虚拟设备(NVA)。

  • 中心的 NVA 功能决定了实现是否需要 DNS。

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

  1. 本地客户端连接到虚拟网络网关。

  2. 虚拟网络网关将客户端数据包转发到应用程序网关。

  3. 应用程序网关检查数据包。 如果通过检验,应用程序网关子网会将数据包转发到后端服务器。 路由服务器会在将流量转发到 NVA 的应用程序网关子网中注入一条路由。

  4. NVA 子网从共享服务虚拟网络中的 DNS 服务器请求 DNS 解析。

  5. DNS 服务器应答解析请求。

  6. NVA 对数据包运行安全检查。 如果数据包通过了测试,NVA 将数据包转发到应用程序 VM。

  7. 应用程序 VM 将响应并将目标 IP 地址设置为应用程序网关。 路由服务器在 VM 子网中注入一条路由,以将数据包重定向到 NVA。

  8. NVA 将数据包转发到应用程序网关。

  9. 应用程序网关将数据包发送到虚拟网络网关。

  10. 虚拟网络网关响应客户端。

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

IDPS 和专用 IP 地址

Azure 防火墙高级版根据数据包的源和目标 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 地址。 因此,如果在其中一个范围内的子网中部署应用程序网关,Azure 防火墙高级版会将应用程序网关与工作负荷之间的流量视为内部流量。 因此,仅应用于内部流量或任何流量的 IDPS 签名才会被使用。 标记为要应用于入站或出站流量的 IDPS 签名不会应用于应用程序网关和工作负荷之间的流量。 有关详细信息,请参阅 Azure 防火墙 IDPS 规则

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

供稿人

Microsoft维护本文。 以下参与者撰写了本文。

主要作者:

若要查看非公开的LinkedIn个人资料,请登录LinkedIn。

后续步骤