Развертывание и настройка Брандмауэр Azure в гибридной сети с помощью Azure PowerShell

Возможность контролировать доступ к сетевым ресурсам Azure при подключении локальной сети к виртуальной сети Azure для создания гибридной сети является важной частью общего плана безопасности.

Вы можете использовать Брандмауэр Azure для управления доступом к сети в гибридной сети с помощью правил, определяющих разрешенный и запрещенный сетевой трафик.

При работе с этой статьей вы создадите три виртуальные сети:

  • VNet-Hub: брандмауэр находится в этой виртуальной сети.
  • Виртуальная сеть: периферийная виртуальная сеть представляет рабочую нагрузку, расположенную в Azure.
  • VNet-Onprem: локальная виртуальная сеть представляет локальную сеть. В фактическом развертывании вы можете подключиться к нему с помощью подключения виртуальной частной сети (VPN) или подключения Azure ExpressRoute. Для простоты в этой статье используется подключение VPN-шлюза, а виртуальная сеть, расположенная в Azure, представляет локальную сеть.

Схема, показывющая брандмауэр в гибридной сети.

Если вы хотите использовать портал Azure вместо выполнения процедур, описанных в этой статье, см. статью "Развертывание и настройка Брандмауэр Azure в гибридной сети с помощью портал Azure".

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

Необходимые компоненты

Для этой статьи требуется наличие PowerShell на локальном компьютере. Необходимо установить модуль Azure PowerShell. Чтобы узнать версию, выполните команду Get-Module -ListAvailable Az. Если необходимо выполнить обновление, см. статью об установке модуля Azure PowerShell. После проверки версии PowerShell выполните командлет Login-AzAccount, чтобы создать подключение к Azure.

Чтобы этот сценарий работал правильно, есть три ключевых требования:

  • Определяемый пользователем маршрут (UDR) в периферийной подсети, которая указывает на IP-адрес Брандмауэр Azure в качестве шлюза по умолчанию. Распространение маршрутов шлюза виртуальной сети должно быть отключено в этой таблице маршрутов.

  • Маршрут UDR в подсети шлюза центра должен указывать на IP-адрес брандмауэра в качестве следующего прыжка к периферийным сетям.

    В подсети Брандмауэр Azure не требуется UDR, так как он изучает маршруты из протокола BGP.

  • При пиринге виртуальной сети в виртуальную сеть с виртуальной сетью обязательно установите AllowGatewayTransit флажок.. Установка UseRemoteGateways при пиринговой виртуальной сети в VNet-Hub.

В разделе "Создание маршрутов " далее в этой статье показано, как создать эти маршруты.

Примечание.

Брандмауэр Azure должен быть напрямую подключен к Интернету. Если подсеть AzureFirewallSubnet узнает маршрут по умолчанию к локальной сети через BGP, необходимо настроить Брандмауэр Azure в режиме принудительного туннелирования. Если это существующий экземпляр Брандмауэр Azure, который не может быть перенастроен в режиме принудительного туннелирования, рекомендуется добавить 0.0.0.0.0/0 UDR в подсети AzureFirewallSubnet с NextHopType заданным значением Internet для поддержания прямого подключения к Интернету.

Дополнительные сведения см. в статье Azure Firewall forced tunneling (Принудительное туннелирование в Брандмауэре Azure).

Трафик между напрямую пиринговых виртуальных сетей направляется напрямую, даже если UDR указывает на Брандмауэр Azure в качестве шлюза по умолчанию. Чтобы отправить трафик подсети в подсеть брандмауэру в этом сценарии, UDR должен содержать префикс целевой подсети явным образом в обеих подсетях.

Чтобы просмотреть соответствующую справочную документацию по Azure PowerShell, см. статью New-AzFirewall.

Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

Объявление переменных

В следующем примере переменные объявляются с помощью значений для этой статьи. В ряде случаев для работы со своей подпиской требуется заменить некоторые значения собственными. При необходимости измените переменные, а затем скопируйте и вставьте их в консоль PowerShell.

$RG1 = "FW-Hybrid-Test"
$Location1 = "East US"

# Variables for the firewall hub virtual network

$VNetnameHub = "VNet-Hub"
$SNnameHub = "AzureFirewallSubnet"
$VNetHubPrefix = "10.5.0.0/16"
$SNHubPrefix = "10.5.0.0/24"
$SNGWHubPrefix = "10.5.1.0/24"
$GWHubName = "GW-hub"
$GWHubpipName = "VNet-Hub-GW-pip"
$GWIPconfNameHub = "GW-ipconf-hub"
$ConnectionNameHub = "hub-to-Onprem"

# Variables for the spoke virtual network

$VnetNameSpoke = "VNet-Spoke"
$SNnameSpoke = "SN-Workload"
$VNetSpokePrefix = "10.6.0.0/16"
$SNSpokePrefix = "10.6.0.0/24"
$SNSpokeGWPrefix = "10.6.1.0/24"

# Variables for the on-premises virtual network

$VNetnameOnprem = "Vnet-Onprem"
$SNNameOnprem = "SN-Corp"
$VNetOnpremPrefix = "192.168.0.0/16"
$SNOnpremPrefix = "192.168.1.0/24"
$SNGWOnpremPrefix = "192.168.2.0/24"
$GWOnpremName = "GW-Onprem"
$GWIPconfNameOnprem = "GW-ipconf-Onprem"
$ConnectionNameOnprem = "Onprem-to-hub"
$GWOnprempipName = "VNet-Onprem-GW-pip"

$SNnameGW = "GatewaySubnet"

Создание центральной виртуальной сети с брандмауэром

Сначала создайте группу ресурсов, которая будет содержать ресурсы для работы с этой статьей:

  New-AzResourceGroup -Name $RG1 -Location $Location1

Определите подсети, которые будут включены в виртуальную сеть:

$FWsub = New-AzVirtualNetworkSubnetConfig -Name $SNnameHub -AddressPrefix $SNHubPrefix
$GWsub = New-AzVirtualNetworkSubnetConfig -Name $SNnameGW -AddressPrefix $SNGWHubPrefix

Создайте виртуальную сеть концентратора брандмауэра:

$VNetHub = New-AzVirtualNetwork -Name $VNetnameHub -ResourceGroupName $RG1 `
-Location $Location1 -AddressPrefix $VNetHubPrefix -Subnet $FWsub,$GWsub

Запросите общедоступный IP-адрес, который будет выделен VPN-шлюзу, который будет создан для виртуальной сети. Обратите внимание, что AllocationMethod значение равно Dynamic. Указать необходимый вам IP-адрес нельзя. Он выделяется для шлюза VPN динамически.

$gwpip1 = New-AzPublicIpAddress -Name $GWHubpipName -ResourceGroupName $RG1 `
-Location $Location1 -AllocationMethod Dynamic

Создание периферийной виртуальной сети

Определите подсети, которые будут включены в периферийную виртуальную сеть:

$Spokesub = New-AzVirtualNetworkSubnetConfig -Name $SNnameSpoke -AddressPrefix $SNSpokePrefix
$GWsubSpoke = New-AzVirtualNetworkSubnetConfig -Name $SNnameGW -AddressPrefix $SNSpokeGWPrefix

Создайте периферийную виртуальную сеть:

$VNetSpoke = New-AzVirtualNetwork -Name $VnetNameSpoke -ResourceGroupName $RG1 `
-Location $Location1 -AddressPrefix $VNetSpokePrefix -Subnet $Spokesub,$GWsubSpoke

Создание локальной виртуальной сети

Определите подсети, которые будут включены в виртуальную сеть:

$Onpremsub = New-AzVirtualNetworkSubnetConfig -Name $SNNameOnprem -AddressPrefix $SNOnpremPrefix
$GWOnpremsub = New-AzVirtualNetworkSubnetConfig -Name $SNnameGW -AddressPrefix $SNGWOnpremPrefix

Создайте локальную виртуальную сеть:

$VNetOnprem = New-AzVirtualNetwork -Name $VNetnameOnprem -ResourceGroupName $RG1 `
-Location $Location1 -AddressPrefix $VNetOnpremPrefix -Subnet $Onpremsub,$GWOnpremsub

Запросите общедоступный IP-адрес, который будет выделен шлюзу, который будет создан для виртуальной сети. Обратите внимание, что AllocationMethod значение равно Dynamic. Указать необходимый вам IP-адрес нельзя. Он выделяется для шлюза динамически.

$gwOnprempip = New-AzPublicIpAddress -Name $GWOnprempipName -ResourceGroupName $RG1 `
-Location $Location1 -AllocationMethod Dynamic

Настройка и развертывание брандмауэра

Теперь разверните брандмауэр в центральной виртуальной сети:

# Get a public IP for the firewall
$FWpip = New-AzPublicIpAddress -Name "fw-pip" -ResourceGroupName $RG1 `
  -Location $Location1 -AllocationMethod Static -Sku Standard
# Create the firewall
$Azfw = New-AzFirewall -Name AzFW01 -ResourceGroupName $RG1 -Location $Location1 -VirtualNetworkName $VNetnameHub -PublicIpName fw-pip

#Save the firewall private IP address for future use

$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP

Настройка сетевых правил:

$Rule1 = New-AzFirewallNetworkRule -Name "AllowWeb" -Protocol TCP -SourceAddress $SNOnpremPrefix `
   -DestinationAddress $VNetSpokePrefix -DestinationPort 80

$Rule2 = New-AzFirewallNetworkRule -Name "AllowRDP" -Protocol TCP -SourceAddress $SNOnpremPrefix `
   -DestinationAddress $VNetSpokePrefix -DestinationPort 3389

$Rule3 = New-AzFirewallNetworkRule -Name "AllowPing" -Protocol ICMP -SourceAddress $SNOnpremPrefix `
   -DestinationAddress $VNetSpokePrefix -DestinationPort

$NetRuleCollection = New-AzFirewallNetworkRuleCollection -Name RCNet01 -Priority 100 `
   -Rule $Rule1,$Rule2 -ActionType "Allow"
$Azfw.NetworkRuleCollections = $NetRuleCollection
Set-AzFirewall -AzureFirewall $Azfw

Создание и подключение шлюзов VPN

Центральная и локальная виртуальные сети подключены друг к другу с помощью VPN-шлюзов.

Создание VPN-шлюза в центральной виртуальной сети

Создайте конфигурацию VPN-шлюза для виртуальной сети концентратора. Конфигурация VPN-шлюза определяет используемые подсеть и общедоступный IP-адрес.

$vnet1 = Get-AzVirtualNetwork -Name $VNetnameHub -ResourceGroupName $RG1
$subnet1 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet1
$gwipconf1 = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfNameHub `
-Subnet $subnet1 -PublicIpAddress $gwpip1

Теперь создайте VPN-шлюз для виртуальной сети концентратора. Для конфигураций "сеть — сеть" требуется VpnType значение RouteBased. Создание VPN-шлюза часто может занять 45 минут или более в зависимости от выбранного номера SKU.

New-AzVirtualNetworkGateway -Name $GWHubName -ResourceGroupName $RG1 `
-Location $Location1 -IpConfigurations $gwipconf1 -GatewayType Vpn `
-VpnType RouteBased -GatewaySku basic

Создание VPN-шлюза для локальной виртуальной сети

Создайте конфигурацию VPN-шлюза для локальной виртуальной сети. Конфигурация VPN-шлюза определяет используемые подсеть и общедоступный IP-адрес.

$vnet2 = Get-AzVirtualNetwork -Name $VNetnameOnprem -ResourceGroupName $RG1
$subnet2 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet2
$gwipconf2 = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfNameOnprem `
-Subnet $subnet2 -PublicIpAddress $gwOnprempip

Теперь создайте VPN-шлюз для локальной виртуальной сети. Для конфигураций "сеть — сеть" требуется VpnType значение RouteBased. Создание VPN-шлюза часто может занять 45 минут или более в зависимости от выбранного номера SKU.

New-AzVirtualNetworkGateway -Name $GWOnpremName -ResourceGroupName $RG1 `
-Location $Location1 -IpConfigurations $gwipconf2 -GatewayType Vpn `
-VpnType RouteBased -GatewaySku basic

Создание VPN-подключений

Создайте VPN-подключения между концентратором и локальными шлюзами.

Получение VPN-шлюзов

$vnetHubgw = Get-AzVirtualNetworkGateway -Name $GWHubName -ResourceGroupName $RG1
$vnetOnpremgw = Get-AzVirtualNetworkGateway -Name $GWOnpremName -ResourceGroupName $RG1

Создание подключений

На этом этапе вы создадите подключение между центральной и локальной виртуальными сетями. В примерах показан общий ключ, но для общего ключа можно использовать собственные значения. Важно, чтобы общий ключ в обоих подключениях был одинаковым. Создание подключения может занять некоторое время.

New-AzVirtualNetworkGatewayConnection -Name $ConnectionNameHub -ResourceGroupName $RG1 `
-VirtualNetworkGateway1 $vnetHubgw -VirtualNetworkGateway2 $vnetOnpremgw -Location $Location1 `
-ConnectionType Vnet2Vnet -SharedKey 'AzureA1b2C3'

Создайте подключение виртуальной сети из локальной среды к концентратору. Этот шаг аналогичен предыдущему, за исключением того, что вы создаете подключение из виртуальной сети Onprem к VNet-Hub. Убедитесь, что общие ключи совпадают. Подключение устанавливается через несколько минут.

New-AzVirtualNetworkGatewayConnection -Name $ConnectionNameOnprem -ResourceGroupName $RG1 `
-VirtualNetworkGateway1 $vnetOnpremgw -VirtualNetworkGateway2 $vnetHubgw -Location $Location1 `
-ConnectionType Vnet2Vnet -SharedKey 'AzureA1b2C3'

Проверка подключения

Вы можете проверить успешное подключение с помощью командлета или без -DebugнееGet-AzVirtualNetworkGatewayConnection.

Используйте следующий пример командлета, но настройте значения, соответствующие вашим собственным. Если вам будет предложено выполнить A команду All. В этом примере -Name ссылается на имя подключения, которое требуется проверить.

Get-AzVirtualNetworkGatewayConnection -Name $ConnectionNameHub -ResourceGroupName $RG1

После завершения работы командлета просмотрите результаты. В следующем примере показано состояние Connectedподключения, а также ingress и исходящие байты:

"connectionStatus": "Connected",
"ingressBytesTransferred": 33509044,
"egressBytesTransferred": 4142431

Настройка пиринга между центральной и периферийной виртуальными сетями

Теперь одноранговый узел и периферийные виртуальные сети:

# Peer hub to spoke
Add-AzVirtualNetworkPeering -Name HubtoSpoke -VirtualNetwork $VNetHub -RemoteVirtualNetworkId $VNetSpoke.Id -AllowGatewayTransit

# Peer spoke to hub
Add-AzVirtualNetworkPeering -Name SpoketoHub -VirtualNetwork $VNetSpoke -RemoteVirtualNetworkId $VNetHub.Id -AllowForwardedTraffic -UseRemoteGateways

Создание маршрутов.

Чтобы создать эти маршруты, используйте следующие команды:

  • Маршрут от подсети шлюза центра до периферийной подсети через IP-адрес брандмауэра.
  • Маршрут по умолчанию из периферийной подсети через IP-адрес брандмауэра.
#Create a route table
$routeTableHubSpoke = New-AzRouteTable `
  -Name 'UDR-Hub-Spoke' `
  -ResourceGroupName $RG1 `
  -location $Location1

#Create a route
Get-AzRouteTable `
  -ResourceGroupName $RG1 `
  -Name UDR-Hub-Spoke `
  | Add-AzRouteConfig `
  -Name "ToSpoke" `
  -AddressPrefix $VNetSpokePrefix `
  -NextHopType "VirtualAppliance" `
  -NextHopIpAddress $AzfwPrivateIP `
 | Set-AzRouteTable

#Associate the route table to the subnet

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $VNetHub `
  -Name $SNnameGW `
  -AddressPrefix $SNGWHubPrefix `
  -RouteTable $routeTableHubSpoke | `
Set-AzVirtualNetwork

#Now, create the default route

#Create a table, with BGP route propagation disabled. The property is now called "Virtual network gateway route propagation," but the API still refers to the parameter as "DisableBgpRoutePropagation."
$routeTableSpokeDG = New-AzRouteTable `
  -Name 'UDR-DG' `
  -ResourceGroupName $RG1 `
  -location $Location1 `
  -DisableBgpRoutePropagation

#Create a route
Get-AzRouteTable `
  -ResourceGroupName $RG1 `
  -Name UDR-DG `
  | Add-AzRouteConfig `
  -Name "ToFirewall" `
  -AddressPrefix 0.0.0.0/0 `
  -NextHopType "VirtualAppliance" `
  -NextHopIpAddress $AzfwPrivateIP `
 | Set-AzRouteTable

#Associate the route table to the subnet

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $VNetSpoke `
  -Name $SNnameSpoke `
  -AddressPrefix $SNSpokePrefix `
  -RouteTable $routeTableSpokeDG | `
Set-AzVirtualNetwork

Создание виртуальных машин

Создайте периферийные рабочие нагрузки и локальные виртуальные машины и поместите их в соответствующие подсети.

Создание виртуальной машины с рабочей нагрузкой

Создайте виртуальную машину в периферийной виртуальной сети, которая выполняется службы IIS (IIS), не имеет общедоступного IP-адреса и разрешает подключение. При появлении запроса введите имя пользователя и пароль для виртуальной машины.

# Create an inbound network security group rule for ports 3389 and 80
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name Allow-RDP  -Protocol Tcp `
  -Direction Inbound -Priority 200 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix $SNSpokePrefix -DestinationPortRange 3389 -Access Allow
$nsgRuleWeb = New-AzNetworkSecurityRuleConfig -Name Allow-web  -Protocol Tcp `
  -Direction Inbound -Priority 202 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix $SNSpokePrefix -DestinationPortRange 80 -Access Allow

# Create a network security group
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $RG1 -Location $Location1 -Name NSG-Spoke02 -SecurityRules $nsgRuleRDP,$nsgRuleWeb

#Create the NIC
$NIC = New-AzNetworkInterface -Name spoke-01 -ResourceGroupName $RG1 -Location $Location1 -SubnetId $VnetSpoke.Subnets[0].Id -NetworkSecurityGroupId $nsg.Id

#Define the virtual machine
$VirtualMachine = New-AzVMConfig -VMName VM-Spoke-01 -VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName Spoke-01 -ProvisionVMAgent -EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2016-Datacenter' -Version latest

#Create the virtual machine
New-AzVM -ResourceGroupName $RG1 -Location $Location1 -VM $VirtualMachine -Verbose

#Install IIS on the VM
Set-AzVMExtension `
    -ResourceGroupName $RG1 `
    -ExtensionName IIS `
    -VMName VM-Spoke-01 `
    -Publisher Microsoft.Compute `
    -ExtensionType CustomScriptExtension `
    -TypeHandlerVersion 1.4 `
    -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server"}' `
    -Location $Location1

#Create a host firewall rule to allow pings in
Set-AzVMExtension `
    -ResourceGroupName $RG1 `
    -ExtensionName IIS `
    -VMName VM-Spoke-01 `
    -Publisher Microsoft.Compute `
    -ExtensionType CustomScriptExtension `
    -TypeHandlerVersion 1.4 `
    -SettingString '{"commandToExecute":"powershell New-NetFirewallRule –DisplayName "Allow ICMPv4-In" –Protocol ICMPv4"}' `
    -Location $Location1

Создание локальной виртуальной машины

Создайте простую виртуальную машину, которую можно использовать для подключения через удаленный доступ к общедоступному IP-адресу. После этого вы можете подключиться к локальному серверу через брандмауэр. При появлении запроса введите имя пользователя и пароль для виртуальной машины.

New-AzVm `
    -ResourceGroupName $RG1 `
    -Name "VM-Onprem" `
    -Location $Location1 `
    -VirtualNetworkName $VNetnameOnprem `
    -SubnetName $SNNameOnprem `
    -OpenPorts 3389 `
    -Size "Standard_DS2"

Примечание.

Azure предоставляет IP-адрес исходящего доступа по умолчанию для виртуальных машин, которые либо не назначены общедоступным IP-адресом, либо находятся в серверном пуле внутренней подсистемы балансировки нагрузки Azure. Механизм IP-адреса исходящего трафика по умолчанию предоставляет исходящий IP-адрес, который нельзя настроить.

IP-адрес исходящего доступа по умолчанию отключен при возникновении одного из следующих событий:

  • Общедоступный IP-адрес назначается виртуальной машине.
  • Виртуальная машина размещается в серверном пуле стандартной подсистемы балансировки нагрузки с правилами исходящего трафика или без нее.
  • Ресурс шлюза NAT Azure назначается подсети виртуальной машины.

Виртуальные машины, созданные с помощью масштабируемых наборов виртуальных машин в гибком режиме оркестрации, не имеют исходящего доступа по умолчанию.

Дополнительные сведения об исходящих подключениях в Azure см. в статье об исходящем доступе по умолчанию в Azure и использовании преобразования исходящих сетевых адресов (SNAT) для исходящих подключений.

тестирование брандмауэра.

  1. Получите и запишите частный IP-адрес для виртуальной машины-периферийной виртуальной машины 01 :

    $NIC.IpConfigurations.privateipaddress
    
  2. На портале Azure подключитесь к виртуальной машине VM-Onprem.

  3. Откройте командную строку Windows PowerShell на виртуальной машине VM-Onprem и выполните проверку IP-адреса для VM-talk-01. Вы должны получить ответ.

  4. Откройте веб-браузер в VM-Onprem и перейдите к ней http://<VM-spoke-01 private IP>. Откроется страница IIS по умолчанию.

  5. В vm-Onprem откройте подключение удаленного доступа к виртуальной машине-периферийным-01 по частному IP-адресу. Подключение должно завершиться успешно, и вы сможете войти с помощью выбранного имени пользователя и пароля.

Теперь, когда вы убедились, что правила брандмауэра работают, вы можете:

  • Подключение сервера к периферийной виртуальной сети.
  • Перейдите к веб-серверу в периферийной виртуальной сети.
  • Подключение на сервер в периферийной виртуальной сети с помощью RDP.

Затем выполните следующий сценарий, чтобы изменить действие для коллекции правил Denyсети брандмауэра следующим образом:

$rcNet = $azfw.GetNetworkRuleCollectionByName("RCNet01")
$rcNet.action.type = "Deny"

Set-AzFirewall -AzureFirewall $azfw

Закройте все существующие подключения удаленного доступа. Запустите тесты еще раз, чтобы проверить измененные правила. На этот раз все они должны завершиться сбоем.

Очистка ресурсов

Вы можете сохранить ресурсы брандмауэра для следующего руководства. Если они больше не нужны, удалите группу ресурсов FW-Hybrid-Test , чтобы удалить все ресурсы, связанные с брандмауэром.

Следующие шаги

Мониторинг журналов Брандмауэра Azure