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

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

默认情况下,应用服务应用可以向公共 Internet 发出出站请求(例如,从 NPM.org 安装所需的 Node.js 包时)。 如果应用与 Azure 虚拟网络集成,可以通过网络安全组出站流量控制在有限范围内,例如目标 IP 地址、端口和协议。 使用 Azure 防火墙可以更细粒度地控制出站流量,并且可以根据 Azure 网络安全中的实时威胁情报筛选流量。 你可以跨订阅和虚拟网络集中创建、实施和记录应用程序与网络连接策略(请参阅 Azure 防火墙功能)。

有关应用服务中的详细网络概念和安全性改进,请参阅网络功能应用服务从零到优秀,第 6 部分:保护 Web 应用

先决条件

  • 为应用启用区域虚拟网络集成
  • 验证已启用“路由全部”。 默认启用此设置,该设置要求应用服务通过集成虚拟网络路由所有出站流量。 如果将其禁用,则仅到专用 IP 地址的流量通过虚拟网络路由。
  • 如果还想通过 Azure 防火墙路由对后端 Azure 服务的访问,请在集成虚拟网络中的应用服务子网上禁用所有服务终结点。 配置 Azure 防火墙后,到 Azure 服务的出站流量将通过防火墙而不是服务终结点进行路由。

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

若要将防火墙部署到集成虚拟网络,需要名为 AzureFirewallSubnet 的子网。

  1. Azure 门户中,导航到与应用集成的虚拟网络。
  2. 在左侧导航中,选择“子网”>“+ 子网” 。
  3. 在“名称”中,请键入“AzureFirewallSubnet” 。
  4. 子网地址范围,接受默认值或指定大小至少为 /26 的范围。
  5. 选择“保存”。

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

  1. Azure 门户菜单或“主页”页上,选择“创建资源” 。

  2. 在搜索框中键入“防火墙”,然后按 Enter

  3. 选择“防火墙”,然后选择“创建” 。

  4. 在“创建防火墙”页中,如下表所示配置防火墙:

    设置
    资源组 与集成虚拟网络相同的资源组。
    名称 首选名称
    区域 与集成虚拟网络相同的区域。
    防火墙策略 选择“新增”创建策略。
    虚拟网络 选择集成虚拟网络。
    公共 IP 地址 选择现有地址,或选择“新增”创建地址。

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

  5. 单击“查看 + 创建”。

  6. 再次选择“创建”。

    需要花费几分钟时间来完成部署。

  7. 部署完成后,转到资源组,然后选择防火墙。

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

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

3.将所有流量路由到防火墙

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

  1. Azure 门户菜单上,选择“所有服务”或在任何页面中搜索并选择“所有服务” 。

  2. 在“网络”下,选择“路由表”。

  3. 选择 添加

  4. 配置路由表,如下例所示:

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

    确保选中创建的防火墙所在的区域。

  5. 选择“查看 + 创建”。

  6. 选择“创建”。

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

  8. 在左侧导航中,选择“路由”>“添加” 。

  9. 配置新路由,如下表所示:

    设置
    地址前缀 0.0.0.0/0
    下一跃点类型 虚拟设备
    下一跃点地址 你在 2.部署防火墙并获取其 IP 中复制的防火墙专用 IP 地址。
  10. 在左侧导航中,选择“子网”>“关联” 。

  11. 在“虚拟网络”中,选择你的集成虚拟网络。

  12. 在“子网”中,选择应用服务子网。

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

  13. 选择“确定”。

4.配置防火墙策略

来自应用的出站流量现通过集成虚拟网络路由到防火墙。 若要控制应用服务出站流量,请将应用程序规则添加到防火墙策略。

  1. 导航到防火墙的概述页面并选择其防火墙策略。

  2. 在防火墙策略页的左侧导航中,选择“应用程序规则”>“添加规则集合” 。

  3. 在“规则”中,添加网络规则并以应用服务子网作为源地址,然后指定 FQDN 目标。 在以下屏幕截图中,目标 FQDN 设为 contoso.com

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

    注意

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

  4. 选择 添加

5.验证出站流量

验证配置的一种简单方法是使用应用的 SCM 调试控制台中的 curl 命令来验证出站连接。

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

  2. 在控制台中,使用与配置的应用程序规则匹配的 URL 运行 curl -s <protocol>://<fqdn-address>。 以下截图是一个网站示例,显示了 API 的成功响应和一个 IP 地址。

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

  3. 使用与配置的应用程序规则不匹配的 URL 再次运行 curl -s <protocol>://<fqdn-address>。 在以下屏幕截图中,你没有收到任何响应,这表明防火墙已阻止来自应用的出站请求。

    在 SCM 调试控制台中使用 curl 命令发送出站流量的屏幕截图。

提示

由于这些出站请求要通过防火墙,因此可以通过为防火墙启用诊断日志记录(启用 AzureFirewallApplicationRule)在防火墙日志中捕获它们。

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

  1. 在 Azure 门户中,导航到你的防火墙。

  2. 从左侧导航中,选择“日志”。

  3. 选择 X,关闭欢迎消息。

  4. 在“所有查询”中,选择“防火墙日志”>“应用程序规则日志数据” 。

  5. 单击 “运行” 。 可以在查询结果中看到这两个访问日志。

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

更多资源

监视 Azure 防火墙日志和指标