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 路由。
先決條件:
- 在你的防火牆虛擬網路中,有一個名為 RouteServerSubnet 的子網路,大小至少為 /27。
- Azure 路由伺服器 部署在與防火牆相同的虛擬網路中。 關於部署步驟,請參閱快速入門:使用 Azure 入口建立與配置路由伺服器。
在以下範例中,將變數名稱$azureFirewallName(、$rgname$location等)替換為你自己的值。
使用 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透過使用 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使用 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使用 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請使用 Get-AzFirewallLearnedIpPrefix 驗證已學到的前綴。
Get-AzFirewallLearnedIpPrefix -Name $azureFirewallName -ResourceGroupName $rgname
vHub 防火牆
對於 vHub 部署,Azure 路由伺服器 預設已部署並關聯。 你只需要在防火牆政策中啟用自動學習功能。
在以下範例中,將變數名稱$azureFirewallName(、$rgname$location等)替換為你自己的值。
使用 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使用 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使用 Get-AzVirtualHub 取得虛擬樞紐,並透過 Get-AzFirewallPolicy 取得防火牆政策。
$Hub = Get-AzVirtualHub -ResourceGroupName $rgname -Name $virtualHubName $azureFirewallPolicy = Get-AzFirewallPolicy -Name $azureFirewallPolicyName -ResourceGroupName $rgname請使用 New-AzFirewallHubPublicIpAddress 與 New-AzFirewallHubIpAddress 建立公共 IP 設定。
$azureFirewallPIPs = New-AzFirewallHubPublicIpAddress -Count 1 $azureFirewallHubIPs = New-AzFirewallHubIpAddress -PublicIP $azureFirewallPIPs使用 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請使用 Get-AzFirewallLearnedIpPrefix 驗證已學到的前綴。
Get-AzFirewallLearnedIpPrefix -Name $azureFirewallName -ResourceGroupName $rgname