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

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

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

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

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

Брандмауэр в гибридной сети

Вы узнаете, как выполнять следующие задачи:

  • Объявление переменных
  • Создание центральной виртуальной сети с брандмауэром
  • Создание периферийной виртуальной сети
  • Создание локальной виртуальной сети
  • Настройка и развертывание брандмауэра
  • Создание и подключение шлюзов VPN
  • Настройка пиринга между центральной и периферийной виртуальными сетями
  • Создание маршрутов.
  • Создание виртуальных машин
  • тестирование брандмауэра.

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

Примечание

Для взаимодействия с Azure рекомендуется использовать модуль Azure Az PowerShell. Чтобы начать работу, см. статью Установка 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 при пиринге из VNet-Hub в VNet-Spoke и параметр UseRemoteGateways при пиринге из VNet-Spoke в VNet-Hub.

См. раздел Создание маршрутов в этом руководстве, чтобы узнать, как создаются эти маршруты.

Примечание

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

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

Примечание

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

Связанную справочную документацию по Azure PowerShell см. здесь.

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

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

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

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

# Variables for the firewall hub VNet

$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 является динамическим. Указать необходимый вам 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 является динамическим. Указать необходимый вам 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

$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 VPN-шлюза.

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 VPN-шлюза.

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'

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

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

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

Убедиться в успешном выполнении подключения можно с помощью командлета Get-AzVirtualNetworkGatewayConnection с параметром -Debug или без него. Используйте командлет из следующего примера, подставив свои значения. При появлении запроса выберите A, чтобы выполнить команду All (Все). В примере параметр -Name — это имя подключения, которое требуется проверить.

Get-AzVirtualNetworkGatewayConnection -Name $ConnectionNameHub -ResourceGroupName $RG1

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

"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 без общедоступного 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

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

Это простая машина, из которой можно подключиться к удаленному рабочему столу с помощью общедоступного 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) для исходящих подключений.

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

Сначала получите и запишите частный IP-адрес для виртуальной машины VM-spoke-01.

$NIC.IpConfigurations.privateipaddress

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

Откройте веб-браузер в VM-Onprem и перейдите по адресу http://<частный IP-адрес VM-spoke-01>.

Вы должны увидеть веб-страницу по умолчанию "Службы IIS".

На виртуальной машине VM-Onprem откройте удаленный рабочий стол и выполните подключение к VM-talk-01 с помощью частного IP-адреса.

Ваше соединение должно успешно выполниться, и вы сможете войти в систему, используя свое имя пользователя и пароль.

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

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

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

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

Set-AzFirewall -AzureFirewall $azfw

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

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

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

Дальнейшие действия

Теперь вы можете отследить журналы Брандмауэра Azure.

Руководство. Мониторинг журналов и метрик Брандмауэра Azure