使用 Azure 防火墙控制出站流量
本文介绍如何使用 Azure 防火墙锁定从应用服务应用到后端 Azure 资源或其他网络资源的出站流量。 此配置有助于防止数据泄露或恶意程序植入风险。
默认情况下,应用服务应用可以向公共 Internet 发出出站请求(例如,从 NPM.org 安装所需的 Node.js 包时)。 如果应用与 Azure 虚拟网络集成,可以通过网络安全组出站流量控制在有限范围内,例如目标 IP 地址、端口和协议。 使用 Azure 防火墙可以更细粒度地控制出站流量,并且可以根据 Azure 网络安全中的实时威胁情报筛选流量。 你可以跨订阅和虚拟网络集中创建、实施和记录应用程序与网络连接策略(请参阅 Azure 防火墙功能)。
有关应用服务中的详细网络概念和安全性改进,请参阅网络功能和应用服务从零到优秀,第 6 部分:保护 Web 应用。
先决条件
- 为应用启用区域虚拟网络集成。
- 验证已启用“路由全部”。 默认启用此设置,该设置要求应用服务通过集成虚拟网络路由所有出站流量。 如果将其禁用,则仅到专用 IP 地址的流量通过虚拟网络路由。
- 如果还想通过 Azure 防火墙路由对后端 Azure 服务的访问,请在集成虚拟网络中的应用服务子网上禁用所有服务终结点。 配置 Azure 防火墙后,到 Azure 服务的出站流量将通过防火墙而不是服务终结点进行路由。
1.创建所需的防火墙子网
若要将防火墙部署到集成虚拟网络,需要名为 AzureFirewallSubnet 的子网。
- 在 Azure 门户中,导航到与应用集成的虚拟网络。
- 在左侧导航中,选择“子网”>“+ 子网” 。
- 在“名称”中,请键入“AzureFirewallSubnet” 。
- 子网地址范围,接受默认值或指定大小至少为 /26 的范围。
- 选择“保存”。
2.部署防火墙并获取其 IP
在 Azure 门户菜单或“主页”页上,选择“创建资源” 。
在搜索框中键入“防火墙”,然后按 Enter。
选择“防火墙”,然后选择“创建” 。
在“创建防火墙”页中,如下表所示配置防火墙:
设置 值 资源组 与集成虚拟网络相同的资源组。 名称 首选名称 区域 与集成虚拟网络相同的区域。 防火墙策略 选择“新增”创建策略。 虚拟网络 选择集成虚拟网络。 公共 IP 地址 选择现有地址,或选择“新增”创建地址。 单击“查看 + 创建”。
再次选择“创建”。
需要花费几分钟时间来完成部署。
部署完成后,转到资源组,然后选择防火墙。
在防火墙的“概述”页中,复制专用 IP 地址。 专用 IP 地址将用作虚拟网络路由规则中的下一个跃点地址。
3.将所有流量路由到防火墙
创建虚拟网络时,Azure 会自动为其每个子网创建默认路由表,并将系统默认路由添加到该表。 在此步骤中,你将创建用户定义的路由表,将所有流量路由到防火墙,然后将其与集成虚拟网络中的应用服务子网相关联。
在 Azure 门户菜单上,选择“所有服务”或在任何页面中搜索并选择“所有服务” 。
在“网络”下,选择“路由表”。
选择 添加 。
配置路由表,如下例所示:
确保选中创建的防火墙所在的区域。
选择“查看 + 创建”。
选择“创建”。
部署完成后,选择“转到资源”。
在左侧导航中,选择“路由”>“添加” 。
配置新路由,如下表所示:
设置 值 地址前缀 0.0.0.0/0 下一跃点类型 虚拟设备 下一跃点地址 你在 2.部署防火墙并获取其 IP 中复制的防火墙专用 IP 地址。 在左侧导航中,选择“子网”>“关联” 。
在“虚拟网络”中,选择你的集成虚拟网络。
在“子网”中,选择应用服务子网。
选择“确定”。
4.配置防火墙策略
来自应用的出站流量现通过集成虚拟网络路由到防火墙。 若要控制应用服务出站流量,请将应用程序规则添加到防火墙策略。
导航到防火墙的概述页面并选择其防火墙策略。
在防火墙策略页的左侧导航中,选择“应用程序规则”>“添加规则集合” 。
在“规则”中,添加网络规则并以应用服务子网作为源地址,然后指定 FQDN 目标。 在以下屏幕截图中,目标 FQDN 设为
contoso.com
。注意
你也可以直接在子网中使用应用的专用 IP 地址,而不是指定应用服务子网作为源地址。 你可以使用
WEBSITE_PRIVATE_IP
环境变量在子网中查找你的应用的专用 IP 地址。选择 添加 。
5.验证出站流量
验证配置的一种简单方法是使用应用的 SCM 调试控制台中的 curl
命令来验证出站连接。
在浏览器中导航到
https://<app-name>.scm.chinacloudsites.cn/DebugConsole
。在控制台中,使用与配置的应用程序规则匹配的 URL 运行
curl -s <protocol>://<fqdn-address>
。 以下截图是一个网站示例,显示了 API 的成功响应和一个 IP 地址。使用与配置的应用程序规则不匹配的 URL 再次运行
curl -s <protocol>://<fqdn-address>
。 在以下屏幕截图中,你没有收到任何响应,这表明防火墙已阻止来自应用的出站请求。
提示
由于这些出站请求要通过防火墙,因此可以通过为防火墙启用诊断日志记录(启用 AzureFirewallApplicationRule)在防火墙日志中捕获它们。
如果在启用诊断日志的情况下运行 curl
命令,则可在防火墙日志中查找到这些命令。