共用方式為


使用 Azure PowerShell 部署並設定 Azure 防火牆

控制輸出網路存取是整體網路安全性計畫的重要部分。 例如,你可能想限制網站的存取權限。 或者,限制可存取的輸出 IP 位址和連接埠。

你可以透過使用 Azure 防火牆來控制來自 Azure 子網的外撥網路存取。 透過使用 Azure 防火牆,您可以設定:

  • 會定義可從子網路存取的完整網域名稱 (FQDN) 的應用程式規則。
  • 網路規則,用以定義來源位址、通訊協定、目的地連接埠和目的地位址。

當您將網路流量路由傳送至防火牆作為子網路預設閘道時,網路流量會受限於已設定的防火牆規則。

在本文中,你將建立一個簡化的單一虛擬網路,包含三個子網路,方便部署。 在生產部署時,使用 樞紐輻射模式,防火牆位於自己的虛擬網路中。 工作負載伺服器位於相同區域中的對等互連虛擬網路,其中包含一個或多個子網路。

  • AzureFirewallSubnet - 防火牆位於此子網路。
  • Workload-SN - 工作負載伺服器位於此子網路。 此子網路的網路流量會通過防火牆。
  • AzureBastionSubnet - 適用於 Azure Bastion 的子網路,可用來連線到工作負載伺服器。

如需 Azure Bastion 的詳細資訊,請參閱什麼是 Azure Bastion?

重要

無論輸出資料使用量為何,每小時價格都是從部署 Bastion 的那一刻開始計費。 如需詳細資訊,請參閱價格SKU。 如果您要在教學課程或測試期間部署 Bastion,建議您在使用完畢後刪除此資源。

顯示防火牆網路基礎結構的圖表。

在本文中,您將學會如何:

  • 設定測試網路環境
  • 部署防火牆
  • 建立預設路由
  • 配置應用程式規則以允許訪問 www.google.com
  • 設定允許存取外部 DNS 伺服器的網路規則
  • 測試防火牆

如果您願意,也可以透過 Azure 入口網站完成此程序。

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

必要條件

進行此程序時,您必須在本機執行 PowerShell。 您必須已安裝 Azure PowerShell 模組。 執行 Get-Module -ListAvailable Az 以尋找版本。 如果您需要升級,請參閱安裝 Azure PowerShell 模組。 驗證 PowerShell 版本之後,請執行 Connect-AzAccount 以建立與 Azure 的連線。

設定網路

首先,請建立資源群組,以包含部署防火牆所需的資源。 接著建立虛擬網路、子網路和測試伺服器。

建立資源群組

使用 New-AzResourceGroup 建立部署資源群組:

New-AzResourceGroup -Name Test-FW-RG -Location "East US"

建立虛擬網路和 Azure Bastion 主機

此虛擬網路有三個子網路。 使用 New-AzVirtualNetworkSubnetConfig 來定義它們:

注意

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

使用 New-AzVirtualNetwork 建立虛擬網路:

$testVnet = New-AzVirtualNetwork `
    -Name Test-FW-VN `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -AddressPrefix 10.0.0.0/16 `
    -Subnet $Bastionsub, $FWsub, $Worksub

建立 Azure Bastion 主機的公用 IP 位址

使用 New-AzPublicIpAddress 為 Bastion 主機建立靜態公共 IP 位址:

$publicip = New-AzPublicIpAddress `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -Name Bastion-pip `
    -AllocationMethod static `
    -Sku standard

建立 Azure Bastion 主機

使用 New-AzBastion 來建立 Bastion 主機:

New-AzBastion `
    -ResourceGroupName Test-FW-RG `
    -Name Bastion-01 `
    -PublicIpAddress $publicip `
    -VirtualNetwork $testVnet

建立虛擬機器

使用 New-AzVM 來建立工作負載虛擬機。 當被提示時,輸入使用者名稱和密碼:

# Create the NIC
$wsn = Get-AzVirtualNetworkSubnetConfig `
    -Name Workload-SN `
    -VirtualNetwork $testVnet
$NIC01 = New-AzNetworkInterface `
    -Name Srv-Work `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -Subnet $wsn

# Define the virtual machine
$SecurePassword = ConvertTo-SecureString "<choose a password>" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ("<choose a user name>", $SecurePassword);
$VirtualMachine = New-AzVMConfig `
    -VMName Srv-Work `
    -VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem `
    -VM $VirtualMachine `
    -Windows `
    -ComputerName Srv-Work `
    -ProvisionVMAgent `
    -EnableAutoUpdate `
    -Credential $Credential
$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 "East US" `
    -VM $VirtualMachine `
    -Verbose

注意

無論是未獲指派公用 IP 位址的 VM,或位於內部基本 Azure 負載平衡器後端集區的 VM,Azure 都會為其提供預設輸出存取 IP。 預設輸出存取 IP 機制能提供無法自行設定的輸出 IP 位址。

發生下列其中一個事件時,會停用預設輸出存取 IP:

  • 公用 IP 位址會指派給 VM。
  • 無論有沒有輸出規則,都會將 VM 放在標準負載平衡器的後端集區中。
  • Azure NAT 閘道資源會指派給 VM 的子網路。

您在彈性協調流程模式中使用虛擬機器擴展集建立的 VM 沒有預設輸出存取。

如需 Azure 中輸出連線的詳細資訊,請參閱 Azure 中的預設對外存取針對輸出連線,使用來源網路位址轉譯 (SNAT)

部署防火牆

使用 New-AzPublicIpAddressNew-AzFirewall 將防火牆部署至虛擬網路:

# Get a Public IP for the firewall
$FWpip = New-AzPublicIpAddress `
    -Name "fw-pip" `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -AllocationMethod Static `
    -Sku Standard
# Create the firewall
$Azfw = New-AzFirewall `
    -Name Test-FW01 `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -VirtualNetwork $testVnet `
    -PublicIpAddress $FWpip

# Save the firewall private IP address for future use

$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP

請記下私人 IP 位址。 稍後當您建立預設路由時會使用到它。

建立預設路由

使用 New-AzRouteTableAdd-AzRouteConfig 建立一個預設路徑表,指向防火牆,然後將其與工作負載子網關聯:

$routeTableDG = New-AzRouteTable `
  -Name Firewall-rt-table `
  -ResourceGroupName Test-FW-RG `
  -location "East US" `
  -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

設定應用程式規則

使用 New-AzFirewallApplicationRuleNew-AzFirewallApplicationRuleCollection 建立一個應用程式規則,允許對外存取權限:www.google.com

$AppRule1 = New-AzFirewallApplicationRule `
    -Name Allow-Google `
    -SourceAddress 10.0.2.0/24 `
    -Protocol http, https `
    -TargetFqdn www.google.com
$AppRuleCollection = New-AzFirewallApplicationRuleCollection `
    -Name App-Coll01 `
    -Priority 200 `
    -ActionType Allow `
    -Rule $AppRule1
$Azfw.ApplicationRuleCollections.Add($AppRuleCollection)
Set-AzFirewall -AzureFirewall $Azfw

Azure 防火牆包含一組內建規則集合,適用於預設為允許的基礎結構 FQDN。 這些 FQDN 是平台專用的,不能用於其他用途。 如需詳細資訊,請參閱基礎結構 FQDN

設定網路規則

使用 New-AzFirewallNetworkRuleNew-AzFirewallNetworkRuleCollection 建立網路規則,允許對兩個位於 53 埠(DNS)的 IP 位址進行外發存取:

$NetRule1 = New-AzFirewallNetworkRule `
    -Name "Allow-DNS" `
    -Protocol UDP `
    -SourceAddress 10.0.2.0/24 `
    -DestinationAddress 209.244.0.3,209.244.0.4 `
    -DestinationPort 53
$NetRuleCollection = New-AzFirewallNetworkRuleCollection `
    -Name RCNet01 `
    -Priority 200 `
    -Rule $NetRule1 `
    -ActionType "Allow"
$Azfw.NetworkRuleCollections.Add($NetRuleCollection)
Set-AzFirewall -AzureFirewall $Azfw

變更 Srv-Work 網路介面的主要和次要 DNS 位址

在此程序中,您可以就測試目的設定伺服器的主要和次要 DNS 位址。 這個設定並非一般 Azure 防火牆的要求。

$NIC01.DnsSettings.DnsServers.Add("209.244.0.3")
$NIC01.DnsSettings.DnsServers.Add("209.244.0.4")
$NIC01 | Set-AzNetworkInterface

測試防火牆

現在請測試防火牆,以確認其運作符合預期。

  1. 使用 Bastion 連接 Srv-Work 虛擬機並登入。

    截圖顯示使用 Azure Bastion 連接 Srv-Work 虛擬機。

  2. Srv-Work 上開啟 PowerShell 視窗並執行下列命令:

    nslookup www.google.com
    nslookup www.microsoft.com
    

    這兩個指令都會回傳答案,顯示你的 DNS 查詢能通過防火牆。

  3. 執行下列命令:

    Invoke-WebRequest -Uri https://www.google.com
    
    Invoke-WebRequest -Uri https://www.microsoft.com
    

    www.google.com 要求成功,而 www.microsoft.com 要求失敗。 此結果顯示防火牆規則運作正常。

現在你已經確認防火牆規則是有效的:

  • 你可以使用已設定的外部 DNS 伺服器來解析 DNS 名稱。
  • 您可以瀏覽到允許的 FQDN,但無法瀏覽到其他任何 FQDN。

清除資源

您可以保留防火牆資源,以供下一個教學課程使用。 如果你不再需要它們,請刪除 Test-FW-RG 資源群組,以刪除所有防火牆相關資源:

Remove-AzResourceGroup -Name Test-FW-RG

下一步