Azure 防火牆 SNAT 私人 IP 位址範圍

Azure 防火牆會針對傳至公用 IP 位址的所有輸出流量,提供 SNAT 功能。 預設情況下,當目的 IP 位址屬於 IANA RFC 1918 的私有 IP 範圍或 IANA RFC 6598 的共享位址空間時,Azure 防火牆不會使用 SNAT 搭配網路規則。 應用程式規則總是透過 透明代理 使用 SNAT,無論目的 IP 位址為何。

當將流量直接路由傳送至因特網時,此預設行為很適合。 不過,有些情況下你可能需要覆寫預設的 SNAT 行為:

  • 如果啟用強制通道,Azure 防火牆 SNAT 網際網路繫結流量會透過 SNAT 處理傳送到 AzureFirewallSubnet 的其中一個防火牆私人 IP 位址,並隱藏來自內部部署防火牆的來源。
  • 如果您的組織在專用網路中使用 IANA RFC 1918 或 IANA RFC 6598 以外的已註冊 IP 位址範圍,Azure 防火牆會將流量進行來源網路位址轉換(SNAT),並傳送到 AzureFirewallSubnet 中的一個防火牆私人 IP 位址。 您可以將 Azure 防火牆設定為不要 SNAT 公用 IP 位址範圍。 例如,將個別 IP 位址指定為 x.x.x.x ,或將 IP 位址範圍指定為 x.x.x.x/24。

您可以透過下列方式變更 Azure 防火牆 SNAT 行為:

  • 若要將 Azure 防火牆設定為永不由網路規則處理 SNAT 流量,不論目的地 IP 位址為何,都使用 0.0.0.0/0 作為私人 IP 位址範圍。 使用此設定,Azure 防火牆無法將流量直接路由傳送至因特網。
  • 若要將防火牆設定為 一律 由網路規則處理的 SNAT 流量,不論目的地地址為何,請使用 255.255.255.255/32 作為私人 IP 位址範圍。
  • 若要設定 Azure 防火牆 定期自動學習註冊及私有 IP 位址範圍,請啟用自動學習 SNAT 路由。 學習到的位址範圍被視為內部,前往這些範圍的流量不會被 SNAT 處理。

重要

  • 私人位址範圍設定僅適用網路規則。 申請規則總是使用 SNAT。
  • 若想指定自訂私有 IP 位址範圍並保留預設 IANA RFC 1918 位址範圍,請確保自訂清單仍包含 IANA RFC 1918 範圍。

下表顯示了所支援的組態方法。 與防火牆原則相關的防火牆必須指定原則中的範圍,而非使用 AdditionalProperties。

方法 傳統規則 防火牆原則
Azure PowerShell 支援 不支援
Azure CLI 支援 不支援
ARM 範本 支援 支援
Azure 入口網站 支援 支援

設定 SNAT 私有 IP 位址範圍

選擇你的設定方式。 Azure PowerShell 同 Azure CLI 只支援經典規則。 若要設定 SNAT 範圍並使用防火牆政策,請使用 ARM 範本或 Azure 入口網站。

使用 Azure PowerShell 來指定防火牆的私有 IP 位址範圍。

附註

防火牆 PrivateRange 屬性會忽略與防火牆原則相關的防火牆。 你必須如 firewallPolicies 索引標籤頁所述,在 SNAT 中使用 屬性。

新增防火牆

對於使用經典規則的新防火牆,請使用 New-AzFirewall 建立防火牆:

$azFw = @{
   Name               = '<fw-name>'
   ResourceGroupName  = '<resourcegroup-name>'
   Location           = '<location>'
   VirtualNetworkName = '<vnet-name>'
   PublicIpName       = '<public-ip-name>'
   PrivateRange       = @("IANAPrivateRanges", "192.168.1.0/24", "192.168.1.10")
}

New-AzFirewall @azFw

附註

  • 使用 Azure 防火牆 New-AzFirewall 部署需要現有的虛擬網路和公共 IP 位址。 完整部署指南請參閱「 使用 Azure PowerShell 部署與配置 Azure 防火牆」。
  • IANAPrivateRanges 在 Azure 防火牆上擴展到目前預設值,同時新增其他範圍。 若要在私人範圍規格中保留 IANAPrivateRanges 預設值,它必須保留在您的 PrivateRange 規格中,如範例所示。

現有的防火牆

若要設定使用經典規則的現有防火牆,請使用 Get-AzFirewall 取得防火牆,並使用 Set-AzFirewall 更新:

$azfw = Get-AzFirewall -Name '<fw-name>' -ResourceGroupName '<resourcegroup-name>'
$azfw.PrivateRange = @("IANAPrivateRanges", "192.168.1.0/24", "192.168.1.10")
Set-AzFirewall -AzureFirewall $azfw

自動學習 SNAT 路由

你可以設定 Azure 防火牆 每 30 分鐘自動學習註冊區和私有區間。 這些已學習的位址範圍是網路內部的,因此前往學習範圍內目的地的流量不會被 SNAT 處理。 虛擬網路(VNet)部署與安全虛擬樞紐(vHub)部署均支援自動學習 SNAT 路由。

附註

  • Auto-learn SNAT 需要 Azure 防火牆 與 Azure 路由伺服器 關聯。
  • 對於 VNet 部署,你必須在與 Azure 防火牆 相同的虛擬網路中部署 Azure 路由伺服器。
  • 對於 vHub 部署,Azure 路由伺服器 預設已部署並關聯。
  • 對於兩種部署模型,綁定完成後,你必須在 Azure 防火牆 Policy 中啟用自動學習 SNAT。
  • 如需 Azure 防火牆結構選項的詳細資訊,請參閱什麼是 Azure 防火牆管理員結構選項?

VNet 防火牆

對於 VNet 部署,你需要先部署並關聯 Azure 路由伺服器,才能啟用自動學習 SNAT 路由。

先決條件:

在以下範例中,將變數名稱$azureFirewallName(、$rgname$location等)替換為你自己的值。

  1. 使用 New-AzFirewall 建立一個帶有路由伺服器 ID 的新防火牆。

    # Specify the Route Server resource ID
    $routeServerId="/subscriptions/your_sub/resourceGroups/testRG/providers/Microsoft.Network/virtualHubs/TestRS"
    
    # Create the firewall
    $azureFirewall = New-AzFirewall -Name $azureFirewallName `
        -ResourceGroupName $rgname `
        -Location $location `
        -RouteServerId $routeServerId
    
    # Verify the Route Server ID is set
    Get-AzFirewall -Name $azureFirewallName -ResourceGroupName $rgname
    
  2. 透過使用 Get-AzFirewall 和 Set-AzFirewall,將路由伺服器與現有防火牆關聯起來。

    # Specify the Route Server resource ID
    $routeServerId="/subscriptions/your_sub/resourceGroups/testRG/providers/Microsoft.Network/virtualHubs/TestRS"
    
    # Get the firewall
    $azFirewall = Get-AzFirewall -Name $azureFirewallName -ResourceGroupName $rgname
    
    # Associate the Route Server and update the firewall
    $azFirewall.RouteServerId = $routeServerId
    Set-AzFirewall -AzureFirewall $azFirewall
    
    # Verify the Route Server ID is updated
    Get-AzFirewall -Name $azureFirewallName -ResourceGroupName $rgname
    
  3. 使用 New-AzFirewallPolicySnat 和 New-AzFirewallPolicy 建立一個啟用自動學習的新防火牆政策。

    # Include AutoLearnPrivateRange to enable auto-learn
    $snat = New-AzFirewallPolicySnat -PrivateRange $privateRange -AutoLearnPrivateRange
    
    # Create the firewall policy with SNAT configuration
    $azureFirewallPolicy = New-AzFirewallPolicy -Name $azureFirewallPolicyName `
        -ResourceGroupName $rgname `
        -Location $location `
        -Snat $snat
    
    # Verify the firewall policy
    Get-AzFirewallPolicy -Name $azureFirewallPolicyName -ResourceGroupName $rgname
    
  4. 使用 New-AzFirewallPolicySnat 和 Set-AzFirewallPolicy,使用 SNAT 更新現有的防火牆原則。

    $snat = New-AzFirewallPolicySnat -PrivateRange $privateRange2 -AutoLearnPrivateRange
    
    # Update the firewall policy
    $azureFirewallPolicy.Snat = $snat
    Set-AzFirewallPolicy -InputObject $azureFirewallPolicy
    
    # Verify the update
    Get-AzFirewallPolicy -Name $azureFirewallPolicyName -ResourceGroupName $rgname
    
  5. 請使用 Get-AzFirewallLearnedIpPrefix 驗證已學到的前綴。

    Get-AzFirewallLearnedIpPrefix -Name $azureFirewallName -ResourceGroupName $rgname
    

vHub 防火牆

對於 vHub 部署,Azure 路由伺服器 預設已部署並關聯。 你只需要在防火牆政策中啟用自動學習功能。

在以下範例中,將變數名稱$azureFirewallName(、$rgname$location等)替換為你自己的值。

  1. 使用 New-AzFirewallPolicySnat 和 New-AzFirewallPolicy 建立一個啟用自動學習的新防火牆政策。

    # Include AutoLearnPrivateRange to enable auto-learn
    $snat = New-AzFirewallPolicySnat -PrivateRange $privateRange -AutoLearnPrivateRange
    
    # Create the firewall policy with SNAT configuration
    $azureFirewallPolicy = New-AzFirewallPolicy -Name $azureFirewallPolicyName `
        -ResourceGroupName $rgname `
        -Location $location `
        -Snat $snat
    
    # Verify the firewall policy
    Get-AzFirewallPolicy -Name $azureFirewallPolicyName -ResourceGroupName $rgname
    
  2. 使用 New-AzFirewallPolicySnat 和 Set-AzFirewallPolicy,使用 SNAT 更新現有的防火牆原則。

    $snat = New-AzFirewallPolicySnat -PrivateRange $privateRange2 -AutoLearnPrivateRange
    
    # Update the firewall policy
    $azureFirewallPolicy.Snat = $snat
    Set-AzFirewallPolicy -InputObject $azureFirewallPolicy
    
    # Verify the update
    Get-AzFirewallPolicy -Name $azureFirewallPolicyName -ResourceGroupName $rgname
    
  3. 使用 Get-AzVirtualHub 取得虛擬樞紐,並透過 Get-AzFirewallPolicy 取得防火牆政策。

    $Hub = Get-AzVirtualHub -ResourceGroupName $rgname -Name $virtualHubName
    $azureFirewallPolicy = Get-AzFirewallPolicy -Name $azureFirewallPolicyName -ResourceGroupName $rgname
    
  4. 請使用 New-AzFirewallHubPublicIpAddress 與 New-AzFirewallHubIpAddress 建立公共 IP 設定。

    $azureFirewallPIPs = New-AzFirewallHubPublicIpAddress -Count 1
    $azureFirewallHubIPs = New-AzFirewallHubIpAddress -PublicIP $azureFirewallPIPs
    
  5. 使用 New-AzFirewall 建立帶有自動學習政策的 vHub 防火牆。

    $azureFirewall = New-AzFirewall -Name $azureFirewallName `
        -ResourceGroupName $rgname `
        -Location $location `
        -VirtualHubId $Hub.Id `
        -FirewallPolicyId $azureFirewallPolicy.Id `
        -SkuName "AZFW_Hub" `
        -HubIPAddress $azureFirewallHubIPs `
        -SkuTier $FirewallTier
    
  6. 請使用 Get-AzFirewallLearnedIpPrefix 驗證已學到的前綴。

    Get-AzFirewallLearnedIpPrefix -Name $azureFirewallName -ResourceGroupName $rgname
    

下一步