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

Azure 防火牆會針對傳至公用 IP 位址的所有輸出流量,提供 SNAT 功能。 根據預設,當目的地 IP 位址位於 IANA RFC 1918 的私人 IP 位址範圍或 IANA RFC 6598 的共用位址空間時,Azure 防火牆就不會使用網路規則進行 SNAT。 不論目的地 IP 位址為何,一律使用透明 Proxy 來對應用程式規則執行 SNAT。

當您將流量直接路由至網際網路時,此邏輯可正常運作。 不過,在某些案例下,您可能會想要覆寫預設 SNAT 行為。

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

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

  • 若要將 Azure 防火牆設定為永不由網路規則處理 SNAT 流量,不論目的地 IP 位址為何,都使用 0.0.0.0/0 作為私人 IP 位址範圍。 使用此設定時,Azure 防火牆永遠不會直接將流量路由至網際網路。

  • 若要無論目的地 IP 位址為何,將防火牆設定為一律透過網路規則處理 SNAT,請使用 255.255.255.255/32 作為私人 IP 位址範圍。

  • Azure 防火牆可以設定為每小時自動學習已註冊和私人範圍,並對 SNAT 使用學習的路由。 此預覽功能必須在與 Azure 防火牆相同的 VNet 中部署 Azure 路由伺服器

重要

私人位址範圍設定僅適用網路規則。 目前應用程式規則一律會進行 SNAT。

重要

如果您想要指定自己的私人 IP 位址範圍,並保留預設的 IANA RFC 1918 位址範圍,請確定您的自訂清單仍包含 IANA RFC 1918 範圍。

您可以使用下列方法來設定 SNAT 私人 IP 位址。 設定 SNAT 私人位址時,務必使用您的設定所適合的方法。 與防火牆原則相關的防火牆必須指定原則中的範圍,而非使用 AdditionalProperties

方法 使用傳統規則 使用防火牆原則
Azure 入口網站 支援 支援
Azure PowerShell 設定 PrivateRange 目前不支援
Azure CLI 設定 --private-ranges 目前不支援
ARM 範本 在防火牆屬性中設定 AdditionalProperties 在防火牆原則中設定 snat/privateRanges

設定 SNAT 私人 IP 位址範圍 - Azure PowerShell

傳統規則

您可以使用 Azure PowerShell 來指定防火牆的私人 IP 位址範圍。

注意

防火牆 PrivateRange 屬性會忽略與防火牆原則相關的防火牆。 您必須使用 firewallPolicies 中的 SNAT 屬性,如設定 SNAT 私人 IP 位址範圍 - ARM 範本中所述。

新增防火牆

使用傳統規則的新防火牆,其 Azure PowerShell Cmdlet 為:

$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

注意

使用 New-AzFirewall 部署 Azure 防火牆需要現有的 VNet 和公用 IP 位址。 如需完整的部署指南,請參閱使用 Azure PowerShell 部署和設定 Azure 防火牆

注意

IANAPrivateRanges 會展開至目前 Azure 防火牆的預設值,其他範圍亦會新增。 若要在私人範圍規格中保留 IANAPrivateRanges 預設值,其必須存留在您的 PrivateRange 規格中,如下列範例所示。

如需詳細資訊,請參閱 New-AzFirewall

現有的防火牆

若要使用傳統規則設定現有的防火牆,請使用下列 Azure PowerShell Cmdlet:

$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 私人 IP 位址範圍 - Azure CLI

傳統規則

您可以使用 Azure CLI 並透過傳統規則來指定防火牆的私人 IP 位址範圍。

新增防火牆

使用傳統規則的新防火牆,其 Azure CLI 命令為:

az network firewall create \
-n <fw-name> \
-g <resourcegroup-name> \
--private-ranges 192.168.1.0/24 192.168.1.10 IANAPrivateRanges

注意

使用 Azure CLI 命令 az network firewall create 部署 Azure 防火牆需要額外的設定步驟,才能建立公用 IP 位址和 IP 設定。 如需完整的部署指南,請參閱使用 Azure CLI 部署和設定 Azure 防火牆

注意

IANAPrivateRanges 會展開至目前 Azure 防火牆的預設值,其他範圍亦會新增。 若要在私人範圍規格中保留 IANAPrivateRanges 預設值,其必須存留在您的 private-ranges 規格中,如下列範例所示。

現有的防火牆

若要使用傳統規則設定現有的防火牆,Azure CLI 命令為:

az network firewall update \
-n <fw-name> \
-g <resourcegroup-name> \
--private-ranges 192.168.1.0/24 192.168.1.10 IANAPrivateRanges

設定 SNAT 私人 IP 位址範圍 - ARM 範本

傳統規則

若要在 ARM 範本部署期間設定 SNAT,您可以將下列內容新增至 additionalProperties 屬性:

"additionalProperties": {
   "Network.SNAT.PrivateRanges": "IANAPrivateRanges , IPRange1, IPRange2"
},

防火牆原則

自 2020-11-01 API 版本起,與防火牆原則相關的 Azure 防火牆已支援 SNAT 私人範圍。 目前可以使用範本來更新防火牆原則上的 SNAT 私人範圍。 下列範例會將防火牆設定為一律進行 SNAT 網路流量:

{ 

            "type": "Microsoft.Network/firewallPolicies", 
            "apiVersion": "2020-11-01", 
            "name": "[parameters('firewallPolicies_DatabasePolicy_name')]", 
            "location": "eastus", 
            "properties": { 
                "sku": { 
                    "tier": "Standard" 
                }, 
                "snat": { 
                    "privateRanges": "[255.255.255.255/32]" 
                } 
            } 

設定 SNAT 私人 IP 位址範圍 - Azure 入口網站

傳統規則

您可以使用 Azure 入口網站來指定防火牆的私人 IP 位址範圍。

  1. 選取您的資源群組,然後選取您的防火牆。

  2. 在 [概觀] 頁面上的 [私人 IP 範圍] 選取預設值 IANA RFC 1918

    [編輯私人 IP 前置詞] 頁面便會開啟:

    Screenshot of edit private IP prefixes.

  3. 根據預設,已設定 IANAPrivateRanges

  4. 編輯您環境的私人 IP 位址範圍,然後選取 [儲存]

防火牆原則

  1. 選取您的資源群組,然後選取您的防火牆原則。

  2. 在 [設定] 資料行中選取 [私人 IP 範圍 (SNAT)]

  3. 在 [執行 SNAT] 底下選取要針對您環境執行 SNAT 的條件以自訂 SNAT 設定。 Screenshot of Private IP ranges (SNAT).

  4. 選取套用

自動學習 SNAT 路由 (預覽)

您可以設定 Azure 防火牆,以每隔 30 分鐘自動學習已註冊和私人範圍。 這些學習到的位址範圍會被視為網路內部,因此通往所學習範圍中目的地的流量不會經過 SNAT 處理。 自動學習 SNAT 範圍需要 Azure 路由伺服器部署在與 Azure 防火牆相同的 VNet 中。 防火牆必須與 Azure 路由伺服器相關聯,並設定為在 Azure 防火牆原則中自動學習 SNAT 範圍。 您目前可以使用 ARM 範本、Azure PowerShell 或 Azure 入口網站來設定自動學習 SNAT 路由。

注意

自動學習 SNAT 路由僅於 VNet 部署 (中樞虛擬網路) 上可用。 在 VWAN 部署 (安全虛擬中樞) 上無法使用。 如需 Azure 防火牆結構選項的詳細資訊,請參閱什麼是 Azure 防火牆管理員結構選項?

使用 ARM 範本設定

您可以使用下列 JSON 來設定自動學習。 Azure 防火牆必須與 Azure 路由伺服器相關聯。

	  "type": "Microsoft.Network/firewallPolicies",
         "apiVersion": "2022-11-01",
	"name": "[parameters('firewallPolicies_DatabasePolicy_name')]", 
            "location": "eastus", 
            "properties": { 
                "sku": { 
                    "tier": "Standard" 
                }, 
                "snat": { 
                     "autoLearnPrivateRanges": "Enabled"
                } 
            } 

使用下列 JSON 來建立 Azure 路由伺服器的關聯:

  "type": "Microsoft.Network/azureFirewalls",
  "apiVersion": "2022-11-01",
  "name": "[parameters('azureFirewalls_testFW_name')]",
  "location": "eastus",
  "properties": {
    "sku": {
      "name": "AZFW_VNet",
      "tier": "Standard"
    },
    "threatIntelMode": "Alert",
    "additionalProperties": {
      "Network.RouteServerInfo.RouteServerID": "[parameters'virtualHubs_TestRouteServer_externalid')]"
    },
    ...
  }

使用 PowerShell 進行設定

  • 使用 RouteServerId 建立新的防火牆。

    # specify RouteServerId Uri
    $routeServerId="/subscriptions/your_sub/resourceGroups/testRG/providers/Microsoft.Network/virtualHubs/TestRS"
    
    # Create AzureFirewall 
    $azureFirewall = New-AzFirewall -Name $azureFirewallName -ResourceGroupName `
       $rgname -Location $location -RouteServerId $routeServerId 
    
    # Get firewall and confirm if RouteServerId is included on the response under additional properties (Network.RouteServerInfo.RouteServerID) 
    Get-AzFirewall -Name $azureFirewallName -ResourceGroupName $rgname 
    
  • 使用 RouteServerId 更新現有的防火牆

    # specify RouteServerId Uri 
    $routeServerId="/subscriptions/ your_sub /resourceGroups/testRG/providers/Microsoft.Network/virtualHubs/TestRS"
    
    # Get firewall 
    $azFirewall = Get-AzFirewall -Name $azureFirewallName -ResourceGroupName $rgname 
    
    # Update the response with RouteServerId and do firewall SET 
    $azFirewall.RouteServerId = $routeServerId 
    Set-AzFirewall -AzureFirewall $azFirewall
    
    # Do firewall Get and confirm if routeServerId is updated 
    Get-AzFirewall -Name $azureFirewallName -ResourceGroupName $rgname
    
    
  • 使用提供的 SNAT 參數建立新的防火牆原則

    # If AutoLearnPrivateRange parameter is provided, auto learn will be enabled, if not it will be disabled 
    $snat = New-AzFirewallPolicySnat -PrivateRange $privateRange -AutoLearnPrivateRange
    
    # Create AzureFirewallPolicy (with SNAT) 
    $azureFirewallPolicy = New-AzFirewallPolicy -Name $azureFirewallPolicyName `
       -ResourceGroupName $rgname -Location $location -Snat $snat
    
    # Get AzureFirewallPolicy and verify 
    Get-AzFirewallPolicy -Name $azureFirewallPolicyName -ResourceGroupName $rgname 
    
    
  • 使用 SNAT 更新現有的防火牆原則

    $snat = New-AzFirewallPolicySnat -PrivateRange $privateRange2 
    
    # Set AzureFirewallPolicy 
    $azureFirewallPolicy.Snat = $snat 
    Set-AzFirewallPolicy -InputObject $azureFirewallPolicy 
    
    # Do Get and Verify 
    Get-AzFirewallPolicy -Name $azureFirewallPolicyName -ResourceGroupName $rgname 
    
  • 取得防火牆學習前置詞

      Get-AzFirewallLearnedIpPrefix -Name $azureFirewallName -ResourceGroupName $rgname 
    

使用 Azure 入口網站進行設定

您可以使用入口網站將路由伺服器與 Azure 防火牆相關聯,以設定自動學習 SNAT 路由 (預覽)。

使用入口網站來完成下列工作:

  • 將名為 RouteServerSubnet 的子網路新增至現有的防火牆 VNet。 子網路的大小應至少為 /27。
  • 將路由伺服器部署至現有的防火牆 VNet。 如需 Azure 路由伺服器的相關資訊,請參閱快速入門:使用 Azure 入口網站建立和設定路由伺服器
  • 在防火牆上的 [學習的 SNAT IP 前置詞 (預覽)] 頁面新增路由伺服器。 Screenshot showing firewall add a route server.
  • 修改您的防火牆原則,以在 [私人 IP 範圍 (SNAT)] 區段中啟用 [自動學習 IP 前置詞 (預覽)]Screenshot showing firewall policy Private IP ranges (SNAT) settings.
  • 您可以在 [學習的 SNAT IP 前置詞 (預覽)] 頁面上看到學習的路由。

下一步