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 位址範圍。
選取您的資源群組,然後選取您的防火牆。
在 [概觀] 頁面上的 [私人 IP 範圍] 選取預設值 IANA RFC 1918。
[編輯私人 IP 前置詞] 頁面便會開啟:
根據預設,已設定 IANAPrivateRanges。
編輯您環境的私人 IP 位址範圍,然後選取 [儲存]。
防火牆原則
選取您的資源群組,然後選取您的防火牆原則。
在 [設定] 資料行中選取 [私人 IP 範圍 (SNAT)]。
選取套用。
自動學習 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 前置詞 (預覽)] 頁面新增路由伺服器。
- 修改您的防火牆原則,以在 [私人 IP 範圍 (SNAT)] 區段中啟用 [自動學習 IP 前置詞 (預覽)]。
- 您可以在 [學習的 SNAT IP 前置詞 (預覽)] 頁面上看到學習的路由。
下一步
- 了解 Azure 防火牆強制通道。