使用 Azure PowerShell 部署和配置 Azure 防火墙策略
控制出站网络访问是整个网络安全计划的重要组成部分。 例如,你可能想要限制对网站的访问, 或者限制可以访问的出站 IP 地址和端口。
可控制 Azure 子网的出站网络访问的一种方法是使用 Azure 防火墙和防火墙策略。 使用 Azure 防火墙,可以配置:
- 应用程序规则,用于定义可从子网访问的完全限定域名 (FQDN)。
- 网络规则,用于定义源地址、协议、目标端口和目标地址。
将网络流量路由到用作子网默认网关的防火墙时,网络流量受到配置的防火墙规则的控制。
在本文中,你将创建一个包含三个子网的简化 VNet,以便于部署。
- AzureFirewallSubnet - 防火墙在此子网中。
- Workload-SN - 工作负荷服务器在此子网中。 此子网的网络流量通过防火墙。
- AzureBastionSubnet - 用于 Azure Bastion 的子网,Azure Bastion 用于连接到工作负载服务器。
有关 Azure Bastion 的详细信息,请参阅什么是 Azure Bastion?
重要
小时定价从部署 Bastion 的时刻开始计算,而无论出站数据使用情况如何。 有关详细信息,请参阅定价和 SKU。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。
在本文中,学习如何:
- 设置测试网络环境
- 部署防火墙
- 创建默认路由
- 创建防火墙策略
- 配置一个应用程序规则以允许访问 www.qq.com
- 配置网络规则,以允许访问外部 DNS 服务器
- 测试防火墙
如果需要,可以使用 Azure 门户完成此过程。
如果没有 Azure 订阅,请在开始前创建一个试用版订阅。
先决条件
此过程要求在本地运行 PowerShell。 必须安装 Azure PowerShell 模块。 运行 Get-Module -ListAvailable Az
即可查找版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 验证 PowerShell 版本以后,请运行 Connect-AzAccount -Environment AzureChinaCloud
,以便创建与 Azure 的连接。
设置网络
首先,创建一个资源组用于包含部署防火墙所需的资源。 然后创建 VNet、子网和测试服务器。
创建资源组
资源组包含用于部署的所有资源。
New-AzResourceGroup -Name Test-FW-RG -Location "China East"
创建虚拟网络和 Azure Bastion 主机
此虚拟网络有三个子网:
注意
AzureFirewallSubnet 子网的大小为 /26。 有关子网大小的详细信息,请参阅 Azure 防火墙常见问题解答。
$Bastionsub = New-AzVirtualNetworkSubnetConfig -Name AzureBastionSubnet -AddressPrefix 10.0.0.0/27
$FWsub = New-AzVirtualNetworkSubnetConfig -Name AzureFirewallSubnet -AddressPrefix 10.0.1.0/26
$Worksub = New-AzVirtualNetworkSubnetConfig -Name Workload-SN -AddressPrefix 10.0.2.0/24
现在,创建虚拟网络:
$testVnet = New-AzVirtualNetwork -Name Test-FW-VN -ResourceGroupName Test-FW-RG `
-Location "China East" -AddressPrefix 10.0.0.0/16 -Subnet $Bastionsub, $FWsub, $Worksub
创建 Azure Bastion 主机的公共 IP 地址
$publicip = New-AzPublicIpAddress -ResourceGroupName Test-FW-RG -Location "China East" `
-Name Bastion-pip -AllocationMethod static -Sku standard
创建 Azure Bastion 主机
New-AzBastion -ResourceGroupName Test-FW-RG -Name Bastion-01 -PublicIpAddress $publicip -VirtualNetwork $testVnet
创建虚拟机
现在创建工作负载虚拟机,将其置于相应的子网中。 出现提示时,请键入该虚拟机的用户名和密码。
创建工作负载虚拟机。 出现提示时,请键入该虚拟机的用户名和密码。
#Create the NIC
$wsn = Get-AzVirtualNetworkSubnetConfig -Name Workload-SN -VirtualNetwork $testvnet
$NIC01 = New-AzNetworkInterface -Name Srv-Work -ResourceGroupName Test-FW-RG -Location "China East" -Subnet $wsn
#Define the virtual machine
$VirtualMachine = New-AzVMConfig -VMName Srv-Work -VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName Srv-Work -ProvisionVMAgent -EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC01.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2019-Datacenter' -Version latest
#Create the virtual machine
New-AzVM -ResourceGroupName Test-FW-RG -Location "China East" -VM $VirtualMachine -Verbose
创建防火墙策略
$fwpol = New-AzFirewallPolicy -Name fw-pol -ResourceGroupName Test-FW-RG -Location chinaeast
配置防火墙策略应用程序规则
此应用程序规则允许对 www.qq.com
进行出站访问。
$RCGroup = New-AzFirewallPolicyRuleCollectionGroup -Name AppRCGroup -Priority 100 -FirewallPolicyObject $fwpol
$apprule1 = New-AzFirewallPolicyApplicationRule -Name Allow-qq -SourceAddress "10.0.2.0/24" -Protocol "http:80","https:443" -TargetFqdn www.qq.com
$appcoll1 = New-AzFirewallPolicyFilterRuleCollection -Name App-coll01 -Priority 100 -Rule $appRule1 -ActionType "Allow"
Set-AzFirewallPolicyRuleCollectionGroup -Name $RCGroup.Name -Priority 100 -RuleCollection $appcoll1 -FirewallPolicyObject $fwPol
Azure 防火墙包含默认情况下允许的基础结构 FQDN 的内置规则集合。 这些 FQDN 特定于平台,不能用于其他目的。 有关详细信息,请参阅基础结构 FQDN。
配置防火墙策略网络规则
此网络规则允许对端口 53 (DNS) 上的两个 IP 地址进行出站访问。
$RCGroup = New-AzFirewallPolicyRuleCollectionGroup -Name NetRCGroup -Priority 200 -FirewallPolicyObject $fwpol
$netrule1 = New-AzFirewallPolicyNetworkRule -name Allow-DNS -protocol UDP -sourceaddress 10.0.2.0/24 -destinationaddress 209.244.0.3,209.244.0.4 -destinationport 53
$netcoll1 = New-AzFirewallPolicyFilterRuleCollection -Name Net-coll01 -Priority 200 -Rule $netrule1 -ActionType "Allow"
Set-AzFirewallPolicyRuleCollectionGroup -Name $RCGroup.Name -Priority 200 -RuleCollection $netcoll1 -FirewallPolicyObject $fwPol
部署防火墙
现在,将防火墙部署到虚拟网络。
# Get a Public IP for the firewall
$FWpip = New-AzPublicIpAddress -Name "fw-pip" -ResourceGroupName Test-FW-RG `
-Location "China East" -AllocationMethod Static -Sku Standard
# Create the firewall
$Azfw = New-AzFirewall -Name Test-FW01 -ResourceGroupName Test-FW-RG -Location "China East" -VirtualNetwork $testVnet -PublicIpAddress $FWpip -FirewallPolicyId $fwpol.Id
#Save the firewall private IP address for future use
$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP
记下专用 IP 地址。 稍后在创建默认路由时需要用到此地址。
创建默认路由
创建一个禁用 BGP 路由传播的表
$routeTableDG = New-AzRouteTable `
-Name Firewall-rt-table `
-ResourceGroupName Test-FW-RG `
-location "China East" `
-DisableBgpRoutePropagation
#Create a route
Add-AzRouteConfig `
-Name "DG-Route" `
-RouteTable $routeTableDG `
-AddressPrefix 0.0.0.0/0 `
-NextHopType "VirtualAppliance" `
-NextHopIpAddress $AzfwPrivateIP `
| Set-AzRouteTable
#Associate the route table to the subnet
Set-AzVirtualNetworkSubnetConfig `
-VirtualNetwork $testVnet `
-Name Workload-SN `
-AddressPrefix 10.0.2.0/24 `
-RouteTable $routeTableDG | Set-AzVirtualNetwork
更改 Srv-Work 网络接口的主要和辅助 DNS 地址
为了在此过程中进行测试,请配置服务器的主要和辅助 DNS 地址。 这并不是一项常规的 Azure 防火墙要求。
$NIC01.DnsSettings.DnsServers.Add("209.244.0.3")
$NIC01.DnsSettings.DnsServers.Add("209.244.0.4")
$NIC01 | Set-AzNetworkInterface
测试防火墙
现在测试防火墙,以确认它是否按预期方式工作。
使用 Bastion 连接到 Srv-Work 虚拟机,然后登录。
在 Srv-Work 上,打开 PowerShell 窗口并运行以下命令:
nslookup www.qq.com nslookup www.microsoft.com
这两个命令都应返回应答,表明 DNS 查询正在通过防火墙。
运行以下命令:
Invoke-WebRequest -Uri https://www.qq.com Invoke-WebRequest -Uri https://www.qq.com Invoke-WebRequest -Uri https://www.microsoft.com Invoke-WebRequest -Uri https://www.microsoft.com
www.qq.com
请求应成功,并且www.microsoft.com
请求应失败。 这表明防火墙规则按预期运行。
现已验证防火墙策略规则可正常工作:
- 可以使用配置的外部 DNS 服务器解析 DNS 名称。
- 可以浏览到一个允许的 FQDN,但不能浏览到其他任何 FQDN。
清理资源
可保留防火墙资源供进一步测试。如果不再需要,请删除 Test-FW-RG 资源组,以删除与防火墙相关的所有资源:
Remove-AzResourceGroup -Name Test-FW-RG