你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure CLI 部署和配置 Azure 防火墙
控制出站网络访问是整个网络安全计划的重要组成部分。 例如,你可能想要限制对网站的访问, 或者限制可以访问的出站 IP 地址和端口。
可以控制 Azure 子网的出站网络访问的一种方法是使用 Azure 防火墙。 使用 Azure 防火墙,可以配置:
- 应用程序规则,用于定义可从子网访问的完全限定域名 (FQDN)。 FQDN 还可以包括 SQL 实例。
- 网络规则,用于定义源地址、协议、目标端口和目标地址。
将网络流量路由到用作子网默认网关的防火墙时,网络流量受到配置的防火墙规则的控制。
在本文中,你将创建一个包含三个子网的简化 VNet,以便于部署。 对于生产部署,我们建议使用中心辐射模型。 防火墙位于其自身的 VNet 中。 工作负荷服务器在包含一个或多个子网的同一区域中的对等 VNet 内。
- AzureFirewallSubnet - 防火墙在此子网中。
- Workload-SN - 工作负荷服务器在此子网中。 此子网的网络流量通过防火墙。
- Jump-SN -“跳转”服务器在此子网中。 可以使用远程桌面连接到跳转服务器中的公共 IP 地址。 然后,可在跳转服务器中(使用另一个远程桌面)连接到工作负荷服务器。
在本文中,学习如何:
- 设置测试网络环境
- 部署防火墙
- 创建默认路由
- 配置一个应用程序规则以允许访问 www.google.com
- 配置网络规则,以允许访问外部 DNS 服务器
- 测试防火墙
如果你愿意,可以使用 Azure 门户或 Azure PowerShell 完成此过程。
如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户。
先决条件
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 中的 Bash 快速入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 本文需要 2.55.0 或更高版本的 Azure CLI。 如果使用 Azure Cloud Shell,则最新版本已安装。
设置网络
首先,创建一个资源组用于包含部署防火墙所需的资源。 然后创建 VNet、子网和测试服务器。
创建资源组
资源组包含用于部署的所有资源。
az group create --name Test-FW-RG --location eastus
创建 VNet
此虚拟网络有三个子网。
注意
AzureFirewallSubnet 子网的大小为 /26。 有关子网大小的详细信息,请参阅 Azure 防火墙常见问题解答。
az network vnet create \
--name Test-FW-VN \
--resource-group Test-FW-RG \
--location eastus \
--address-prefix 10.0.0.0/16 \
--subnet-name AzureFirewallSubnet \
--subnet-prefix 10.0.1.0/26
az network vnet subnet create \
--name Workload-SN \
--resource-group Test-FW-RG \
--vnet-name Test-FW-VN \
--address-prefix 10.0.2.0/24
az network vnet subnet create \
--name Jump-SN \
--resource-group Test-FW-RG \
--vnet-name Test-FW-VN \
--address-prefix 10.0.3.0/24
创建虚拟机
现在,创建跳转虚拟机和工作负荷虚拟机,并将其放入相应的子网。 出现提示时,请键入虚拟机的密码。
创建 Srv-Jump 虚拟机。
az vm create \
--resource-group Test-FW-RG \
--name Srv-Jump \
--location eastus \
--image win2016datacenter \
--vnet-name Test-FW-VN \
--subnet Jump-SN \
--admin-username azureadmin
az vm open-port --port 3389 --resource-group Test-FW-RG --name Srv-Jump
使用特定的 DNS 服务器 IP 地址为 Srv-Work 创建 NIC,并且不使用公共 IP 地址进行测试。
az network nic create \
-g Test-FW-RG \
-n Srv-Work-NIC \
--vnet-name Test-FW-VN \
--subnet Workload-SN \
--public-ip-address "" \
--dns-servers 209.244.0.3 209.244.0.4
现在,创建工作负荷虚拟机。 出现提示时,请键入虚拟机的密码。
az vm create \
--resource-group Test-FW-RG \
--name Srv-Work \
--location eastus \
--image win2016datacenter \
--nics Srv-Work-NIC \
--admin-username azureadmin
注意
Azure 会为未分配公共 IP 地址的 VM 或位于内部基本 Azure 负载均衡器的后端池中的 VM 提供默认出站访问 IP。 默认出站访问 IP 机制会提供不可配置的出站 IP 地址。
发生以下事件之一时,将禁用默认出站访问 IP:
- 将公共 IP 地址分配给 VM。
- 虚拟机被放置在标准负载平衡器的后端池中,有无出站规则均可。
- 向 VM 的子网分配了 Azure NAT 网关资源。
在灵活业务流程模式下通过使用虚拟机规模集创建的 VM 没有默认的出站访问权限。
有关 Azure 中的出站连接的详细信息,请参阅 Azure 中的默认出站访问权限和使用用于出站连接的源网络地址转换 (SNAT)。
部署防火墙
现在,将防火墙部署到虚拟网络。
az network firewall create \
--name Test-FW01 \
--resource-group Test-FW-RG \
--location eastus
az network public-ip create \
--name fw-pip \
--resource-group Test-FW-RG \
--location eastus \
--allocation-method static \
--sku standard
az network firewall ip-config create \
--firewall-name Test-FW01 \
--name FW-config \
--public-ip-address fw-pip \
--resource-group Test-FW-RG \
--vnet-name Test-FW-VN
az network firewall update \
--name Test-FW01 \
--resource-group Test-FW-RG
az network public-ip show \
--name fw-pip \
--resource-group Test-FW-RG
fwprivaddr="$(az network firewall ip-config list -g Test-FW-RG -f Test-FW01 --query "[?name=='FW-config'].privateIpAddress" --output tsv)"
记下专用 IP 地址。 稍后在创建默认路由时需要用到此地址。
创建默认路由
创建一个禁用 BGP 路由传播的路由表
az network route-table create \
--name Firewall-rt-table \
--resource-group Test-FW-RG \
--location eastus \
--disable-bgp-route-propagation true
创建路由。
az network route-table route create \
--resource-group Test-FW-RG \
--name DG-Route \
--route-table-name Firewall-rt-table \
--address-prefix 0.0.0.0/0 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address $fwprivaddr
将路由表关联到子网
az network vnet subnet update \
-n Workload-SN \
-g Test-FW-RG \
--vnet-name Test-FW-VN \
--address-prefixes 10.0.2.0/24 \
--route-table Firewall-rt-table
配置应用程序规则
此应用程序规则允许对 www.google.com 进行出站访问。
az network firewall application-rule create \
--collection-name App-Coll01 \
--firewall-name Test-FW01 \
--name Allow-Google \
--protocols Http=80 Https=443 \
--resource-group Test-FW-RG \
--target-fqdns www.google.com \
--source-addresses 10.0.2.0/24 \
--priority 200 \
--action Allow
Azure 防火墙包含默认情况下允许的基础结构 FQDN 的内置规则集合。 这些 FQDN 特定于平台,不能用于其他目的。 有关详细信息,请参阅基础结构 FQDN。
配置网络规则
此网络规则允许对端口 53 (DNS) 上的两个 IP 地址进行出站访问。
az network firewall network-rule create \
--collection-name Net-Coll01 \
--destination-addresses 209.244.0.3 209.244.0.4 \
--destination-ports 53 \
--firewall-name Test-FW01 \
--name Allow-DNS \
--protocols UDP \
--resource-group Test-FW-RG \
--priority 200 \
--source-addresses 10.0.2.0/24 \
--action Allow
测试防火墙
现在测试防火墙,以确认它是否按预期方式工作。
记下 Srv-Work 虚拟机的专用 IP 地址:
az vm list-ip-addresses \ -g Test-FW-RG \ -n Srv-Work
将远程桌面连接到 Srv-Jump 虚拟机,然后登录。 在该虚拟机中,与 Srv-Work 专用 IP 地址建立远程桌面连接并登录。
在 SRV-Work 上,打开 PowerShell 窗口并运行以下命令:
nslookup www.google.com nslookup www.microsoft.com
这两个命令都应返回应答,表明 DNS 查询正在通过防火墙。
运行以下命令:
Invoke-WebRequest -Uri https://www.google.com Invoke-WebRequest -Uri https://www.google.com Invoke-WebRequest -Uri https://www.microsoft.com Invoke-WebRequest -Uri https://www.microsoft.com
www.google.com
请求应成功,并且www.microsoft.com
请求应失败。 这表明防火墙规则按预期运行。
现已验证防火墙规则可正常工作:
- 可以使用配置的外部 DNS 服务器解析 DNS 名称。
- 可以浏览到一个允许的 FQDN,但不能浏览到其他任何 FQDN。
清理资源
可以将防火墙资源保留到下一教程使用。不再需要时,请删除 Test-FW-RG 资源组,以删除与防火墙相关的所有资源:
az group delete \
-n Test-FW-RG