你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 防火墙 SNAT 专用 IP 地址范围

对于发往公共 IP 地址的所有出站流量,Azure 防火墙提供 SNAT 功能。 默认情况下,如果目标 IP 地址在符合 IANA RFC 1918 的专用 IP 地址范围内或符合 IANA RFC 6598 的共享地址空间内,Azure 防火墙将不使用网络规则执行 SNAT。 无论目标 IP 地址是什么,始终使用透明代理对应用程序规则执行 SNAT。

将流量直接路由到 Internet 时,此逻辑非常有效。 但是,在一些情况下,你可能希望替代默认的 SNAT 行为。

  • 如果已启用强制隧道,会将 Internet 绑定的流量由 SNAT 转换为 AzureFirewallSubnet 中的某个防火墙专用 IP 地址,从而向本地防火墙隐藏源。
  • 如果组织对专用网络使用 IANA RFC 1918 或 IANA RFC 6598 外的注册 IP 地址范围,Azure 防火墙会通过 SNAT 将流量发送到 AzureFirewallSubnet 中的某个防火墙专用 IP 地址。 但是,可以将 Azure 防火墙配置为不 SNAT 公共 IP 地址范围。 例如,若要指定单个 IP 地址,可以按如下所示指定它:192.168.1.10。 若要指定 IP 地址范围,可以按如下所示指定它:192.168.1.0/24

可以通过以下方式更改 Azure 防火墙 SNAT 行为:

  • 要将 Azure 防火墙配置为无论目标 IP 地址为何都不会对网络规则处理的流量执行 SNAT,请使用0.0.0.0/0作为专用 IP 地址范围。 通过此配置,Azure 防火墙永远不能将流量直接路由到 Internet。

  • 要将防火墙配置为无论目标地址为何都始终对网络规则处理的流量执行 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 属性。 必须按照配置 SNAT 专用 IP 地址范围 - ARM 模板中所述,在 firewallPolicies 中使用 SNAT 属性。

新建防火墙

对于使用经典规则的新建防火墙,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 防火墙

注意

将其他范围添加到 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 防火墙

注意

将其他范围添加到 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')]"
    },
    ...
  }

使用 Azure 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 前缀(预览版)”页上查看已获知的路由。

后续步骤