使用 Azure 防火墙控制出站流量

本文介绍如何使用 Azure 防火墙锁定从 Azure 应用服务应用到后端 Azure 资源或其他网络资源的出站流量。 此配置有助于防止数据外泄并保护应用免受恶意程序植入的影响。

默认情况下,应用服务应用可以向公共 Internet 发出出站请求,例如,从 NPM.org 安装所需的 Node.js 包时。如果应用 与 Azure 虚拟网络集成,则可以使用 网络安全组 来控制出站流量的目标 IP 地址、端口和协议。

Azure 防火墙可以更精细地控制出站流量,并允许基于来自Microsoft网络安全的实时威胁情报筛选流量。 可以跨订阅和虚拟网络集中创建、强制实施和记录应用程序和网络连接策略。 有关详细信息,请参阅 Azure 防火墙功能

请完成以下过程来设置、部署和使用 Azure 防火墙来控制应用服务应用的出站流量。 有关应用服务网络概念和安全增强功能的详细信息,请参阅 “网络功能和0 到 Hero 与应用服务”,第 6 部分:保护 Web 应用

先决条件

具有使用区域虚拟网络集成的应用服务应用。 有关详细信息,请参阅 在 Azure 应用服务中启用虚拟网络集成

  • 在虚拟网络集成设置中,验证是否已启用 路由, 这是默认值。
  • 在应用中,禁用通过 服务终结点的任何路由,因为所有出站流量都会通过防火墙进行路由。

1.创建所需的防火墙子网

要将防火墙部署到集成的虚拟网络中,虚拟网络必须具有名为 AzureFirewallSubnet 的子网。 此外,默认情况下需要强制隧道,因此网络还必须有一个名为 AzureFirewallManagementSubnet 的子网。 有关详细信息,请参阅 Azure 防火墙强制隧道

  1. Azure 门户中,导航到与应用集成的虚拟网络。

  2. 在应用的集成虚拟网络的页面上,从左侧导航菜单中选择 “子网 ”。

  3. 在“子网”页中,选择“+ 子网”。

  4. 在“ 添加子网 ”页上,出于 子网目的,选择 “Azure 防火墙”。

    会自动分配名称 AzureFirewallSubnet 和其他设置。 在 IPv4 下,确保指定的范围 大小至少为 /26

  5. 选择 添加

  6. 重复相同的过程以添加 AzureFirewallManagementSubnet,这次选择 防火墙管理(强制隧道) 作为 子网用途

2.部署防火墙并获取其 IP 地址

  1. 在“虚拟网络 概述 ”页中,从左侧导航菜单中选择 “防火墙 ”。

  2. 选择 “单击此处”添加新防火墙

  3. “创建防火墙 ”页上,确保 订阅资源组区域 与虚拟网络相同。

  4. 对于 Name,请提供防火墙的名称。

  5. 对于 防火墙策略,请选择“ 添加新 ”并为策略提供名称。

  6. 对于 “选择虚拟网络”,请选择“ 使用现有 虚拟网络”,然后选择集成的虚拟网络。

  7. 对于 公共 IP 地址,请选择现有地址,或通过选择“ 添加新地址”创建一个地址。

  8. 防火墙管理 NIC 下,选择 管理公共 IP 地址的现有地址,或通过选择“ 添加新”创建一个地址。

    在 Azure 门户中创建 Azure 防火墙的屏幕截图。

  9. 选择页面顶部的 “查看 + 创建 ”,并在验证通过时选择“ 创建”。 部署防火墙需要几分钟时间。

  10. 部署完成后,选择“ 转到资源”。

  11. 在防火墙的 “概述 ”页上,复制 专用 IP 地址。 使用专用 IP 地址作为虚拟网络的路由规则中的下一跃点地址。

    获取 Azure 防火墙专用 IP 地址的屏幕截图。

将所有流量路由到防火墙

创建虚拟网络时,Azure 会自动为其每个子网创建默认路由表,并将系统默认路由添加到该表。 在此步骤中,将创建一个用户定义的路由表,用于将所有流量路由到防火墙。 将用户定义的路由表与集成虚拟网络中的应用服务子网相关联。

  1. Azure 门户 的应用页面上,从左侧导航菜单中选择 “网络 ”。

  2. “网络”页上,在右下角的“集成子网配置”下,选择“未配置用户定义的路由”。

  3. 在“ 路由表 ”页上,选择“ 创建”

  4. 确保订阅和资源组正确,并选择与防火墙相同的 区域

  5. 提供路由表的名称。

  6. 对于 传播网关路由,请选择 “否”。

    在 Azure 门户中创建路由路由表的屏幕截图。

  7. 选择“查看 + 创建”,然后选择“创建”。

  8. 部署完成后,选择“ 转到资源”或转到资源组,然后从资源列表中选择路由表。

  9. 在“路由表”页上,从左侧导航菜单中选择“ 路由 ”。

  10. 在“ 路由 ”页上,选择“ 添加”,并填写 “添加路由 ”屏幕,如下所示:

    • 路由名称:提供路由的名称。
    • 目标类型:选择 IP 地址
    • 目标 IP 地址/CIDR 范围:输入 0.0.0.0/0
    • 下一跃点类型:选择 虚拟设备
    • 下一跃点地址:输入之前复制的防火墙的专用 IP 地址。
  11. 选择 添加

    将路由添加到路由表的屏幕截图。

  12. 在路由表页上,从左侧导航菜单中选择 “子网 ”。

  13. “子网 ”页上,选择“ 关联”。

  14. “关联子网 ”屏幕上,确保已选择应用的集成虚拟网络和子网,或选择它们,然后选择“ 确定”。

    将路由表与应用服务子网关联的屏幕截图。

来自应用的出站流量现通过集成虚拟网络路由到防火墙。

配置防火墙策略

若要控制应用服务出站流量,请将应用程序规则添加到防火墙策略。

  1. 在防火墙的 “概述 ”页上,选择防火墙策略下的防火墙 策略

  2. 在防火墙策略页上,从左侧导航菜单中选择 应用程序规则

  3. “应用程序规则 ”页上,选择 “添加规则集合”。

  4. “添加规则集合 ”屏幕上,输入 “名称 ”和“ 优先级 ”介于 100 和 65000 之间。

  5. “规则”下,添加包含应用服务子网的网络规则作为源地址,并指定完全限定的域名(FQDN)目标。 以下示例演示 api 的目标 FQDN 。my-ip.io

  6. 选择 添加

    配置 Azure 防火墙策略规则的屏幕截图。

    注意

    可以直接使用应用的专用 IP 地址,而不是将应用服务子网指定为源地址。 你可以使用WEBSITE_PRIVATE_IP环境变量在子网中查找你的应用的专用 IP 地址。

验证出站流量

验证配置的出站连接的一种简单方法是使用 curl 来自应用的源代码管理管理器(SCM)(也称为 Kudu)调试控制台的命令。

  1. 在浏览器中导航到 https://<app-name>.scm.chinacloudsites.cn/DebugConsole

  2. 在控制台中,使用与配置的应用程序规则匹配的 URL 运行 curl -s <protocol>://<fqdn-address> 。 例如,以下屏幕截图显示了对它的成功响应 https://api.my-ip.io

    在 SCM 调试控制台中使用 curl 命令验证出站流量是否成功的屏幕截图。

如果使用与配置的应用程序规则不匹配的 URL 运行 curl -s <protocol>://<fqdn-address> ,则不会收到任何响应,这表示防火墙阻止了来自应用的出站请求。

防火墙诊断日志记录

由于出站请求通过防火墙,因此可以通过使用 Azure 防火墙应用程序规则启用防火墙日志记录,在防火墙日志中捕获这些请求。 有关详细信息,请参阅 结构化 Azure 防火墙日志

如果在启用诊断日志的情况下运行 curl 命令,则可在防火墙日志中查找到这些命令。

  1. 在 Azure 门户中,导航到你的防火墙。
  2. 从左侧导航菜单中选择 “日志 ”。
  3. “查询中心”屏幕上,选择“应用程序规则日志数据”磁贴中的“运行”。

可以在查询结果中看到这两个访问日志。

使用 curl 命令验证出站流量是否失败的 SCM 调试控制台的屏幕截图。

监视 Azure 防火墙日志和指标