本指南概述了一种策略,用于实现 Web 应用的零信任 安全性,以实现检查和加密。 零信任范例包括许多其他概念,例如对执行组件的标识进行持续验证,或将隐式信任区域的大小降到最低。 本文介绍从公共 Internet 入站流量的零信任体系结构的加密和检查组件。 请阅读其他 零信任文档,了解安全部署应用程序的其他方面,例如身份验证。 在本文中,多层方法最有效,其中网络安全构成零信任模型层之一。 在此层中,网络设备会检查数据包,以确保只有合法流量到达应用程序。
通常,不同类型的网络设备会检查网络数据包的不同方面:
- Web 应用程序防火墙查找指示 Web 应用程序层攻击的模式。
- 下一代防火墙还可以查找通用威胁。
在某些情况下,可以组合不同类型的网络安全设备来提高保护。 虚拟网络的单独指南防火墙和应用程序网关,介绍了可用于排列各种设备的设计模式。 本文档重点介绍一种通用模式,用于最大程度地提高安全性,其中 Azure 应用程序网关在 Azure 防火墙高级版之前起作用。 下图演示了此模式:
下载此体系结构的 Visio 文件。
此体系结构使用传输层安全性 (TLS) 协议来加密每个步骤的流量。
客户端将数据包发送到应用程序网关(负载均衡器)。 它通过可选添加 Azure Web 应用程序防火墙运行。
应用程序网关解密数据包并搜索 Web 应用程序的威胁。 如果它找不到任何威胁,它将使用零信任原则来加密数据包。 然后,它会释放它们。
Azure 防火墙高级版运行安全检查:
- 传输层安全性(TLS)检查 解密和检查数据包。
- 入侵检测和保护 功能检查数据包是否有恶意意图。
如果数据包通过测试,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):
TLS 连接
此体系结构包含三个不同的 TLS 连接。 数字证书验证每个证书:
从客户端到应用程序网关
在应用程序网关中,部署客户端看到的数字证书。 已知 CA(如 DigiCert 或 Let's Encrypt)通常会颁发此类证书。
从应用程序网关到 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 地址的连接。 原始客户端 IP 地址保留在应用程序网关插入的
X-Forwarded-For
HTTP 标头中。 - 从应用程序网关发往工作负荷的流量通常使用 Azure 路由机制发送到 Azure 防火墙,无论是在应用程序网关子网中配置的 User-Defined 路由,还是使用 Azure 虚拟 WAN 或 Azure 路由服务器注入的路由。 尽管可以在应用程序网关的后端池中显式定义 Azure 防火墙的专用 IP 地址,但从技术上来说不建议这样做,因为它会占用 Azure 防火墙的某些功能,例如负载均衡和粘性。
以下部分详细介绍了 Azure 防火墙和应用程序网关中使用的一些最常见拓扑。
中心辐射型拓扑
通常,中心辐射设计在中心虚拟网络中部署共享网络组件,并在辐射中部署特定于应用程序的组件。 在大多数系统中,Azure 防火墙高级版是共享资源。 但 Web 应用程序防火墙可以是共享网络设备或应用程序特定的组件。 出于以下原因,最好将应用程序网关视为应用程序组件,并将其部署到辐射虚拟网络中:
- 对 Web 应用程序防火墙警报进行故障排除可能很困难。 通常需要深入了解应用程序,以确定触发这些警报的消息是否合法。
- 如果将应用程序网关视为共享资源,可能会超过 Azure 应用程序网关限制。
- 如果在中心部署应用程序网关,则可能会遇到基于角色的访问控制问题。 当团队管理不同的应用程序,但使用相同的应用程序网关实例时,可能会发生这种情况。 然后,每个团队都可以访问整个应用程序网关配置。
使用传统的中心辐射体系结构,DNS 专用区域提供了一种使用 DNS 的简单方法:
- 配置 DNS 专用区域。
- 将区域链接到包含 Azure 防火墙高级版的虚拟网络。
- 确保应用程序网关用于流量和运行状况检查的值存在 A 记录。
下图显示了应用程序网关在分支虚拟网络中时数据包流。 在这种情况下,客户端从公共 Internet 进行连接。
- 客户端将请求提交到 Web 服务器。
- 应用程序网关截获客户端数据包并检查它们。 如果数据包通过检查,应用程序网关会将数据包发送到后端 VM。 当数据包达到 Azure 时,应用程序网关子网中的用户定义的路由(UDR)会将数据包转发到 Azure 防火墙高级版。
- Azure 防火墙高级版对数据包运行安全检查。 如果他们通过测试,Azure 防火墙高级版会将数据包转发到应用程序 VM。
- VM 响应并将目标 IP 地址设置为应用程序网关。 VM 子网中的 UDR 将数据包重定向到 Azure 防火墙高级版。
- Azure 防火墙高级版将数据包转发到应用程序网关。
- 应用程序网关回答客户端。
流量也可以从本地网络而不是公共 Internet 到达。 流量通过站点到站点虚拟专用网络(VPN)或 ExpressRoute 流动。 在此方案中,流量首先到达中心的虚拟网络网关。 网络流的其余部分与前面的情况相同。
- 本地客户端连接到虚拟网络网关。
- 网关将客户端数据包转发到应用程序网关。
- 应用程序网关检查数据包。 如果通过检查,应用程序网关子网中的 UDR 会将数据包转发到 Azure 防火墙高级版。
- Azure 防火墙高级版对数据包运行安全检查。 如果他们通过测试,Azure 防火墙高级版会将数据包转发到应用程序 VM。
- VM 将响应并将目标 IP 地址设置为应用程序网关。 VM 子网中的 UDR 将数据包重定向到 Azure 防火墙高级版。
- Azure 防火墙高级版将数据包转发到应用程序网关。
- 应用程序网关将数据包发送到虚拟网络网关。
- 网关回答客户端。
虚拟 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 进行访问类似。
- 本地客户端连接到 VPN。
- VPN 将客户端数据包转发到应用程序网关。
- 应用程序网关检查数据包。 如果通过检查,应用程序网关子网会将数据包转发到 Azure 防火墙高级版。
- Azure 防火墙高级版从共享服务虚拟网络中的 DNS 服务器请求 DNS 解析。
- DNS 服务器回答解析请求。
- Azure 防火墙高级版对数据包运行安全检查。 如果他们通过测试,Azure 防火墙高级版会将数据包转发到应用程序 VM。
- VM 将响应并将目标 IP 地址设置为应用程序网关。 应用程序子网将数据包重定向到 Azure 防火墙高级版。
- Azure 防火墙高级版将数据包转发到应用程序网关。
- 应用程序网关将数据包发送到 VPN。
- 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。
- 本地客户端连接到虚拟网络网关。
- 网关将客户端数据包转发到应用程序网关。
- 应用程序网关检查数据包。 如果通过检查,应用程序网关子网会将数据包转发到后端计算机。 路由服务器注入的 ApplicationGateway 子网中的路由会将流量转发到 NVA。
- NVA 对数据包运行安全检查。 如果通过测试,NVA 会将数据包转发到应用程序 VM。
- VM 将响应并将目标 IP 地址设置为应用程序网关。 路由服务器在 VM 子网中注入的路由会将数据包重定向到 NVA。
- NVA 将数据包转发到应用程序网关。
- 应用程序网关将数据包发送到虚拟网络网关。
- 网关回答客户端。
与虚拟 WAN 一样,在使用路由服务器时,可能需要修改路由。 如果播发 0.0.0.0/0 路由,它可能会传播到应用程序网关子网。 但应用程序网关不支持该路由。 在这种情况下,请为应用程序网关子网配置路由表。 在该表中包括 0.0.0.0/0 的路由和下一跃点类型的 Internet
。
IDPS 和专用 IP 地址
如 Azure 防火墙 IDPS 规则中所述,Azure 防火墙高级版将根据数据包的源和目标 IP 地址决定要应用哪些 IDPS 规则。 Azure 防火墙将 RFC 1918 范围(10.0.0.0/8
、192.168.0.0/16
和 172.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 范围,了解有关如何执行此作的更多详细信息),并在配置了 IP 地址的子网中部署应用程序网关 100.64.0.0/10
。
贡献
本文由Microsoft维护。 它最初由以下参与者编写。
主体作者:
- 何塞·雷诺 |首席客户工程师