Поделиться через


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

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

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

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

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

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

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

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Чтобы узнать, как перейти на модуль Az 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 Firewall в режиме принудительного туннелирования. Если это существующий экземпляр Брандмауэра Azure, который не может быть перенастроен в режиме принудительного туннелирования, рекомендуется добавить 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-адрес нельзя. 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'

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

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

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

Get-AzVirtualNetworkGatewayConnection -Name $ConnectionNameHub -ResourceGroupName $RG1

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

"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

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

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

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

Создайте виртуальную машину в периферийной виртуальной сети, которая работает под управлением службы Internet Information Services (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-адрес назначается виртуальной машине.
  • Виртуальная машина размещается в серверном пуле стандартной подсистемы балансировки нагрузки с правилами исходящего трафика или без нее.
  • Ресурс Azure NAT Gateway привязан к подсети ВМ.

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

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

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

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

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

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

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

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

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

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

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

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

Set-AzFirewall -AzureFirewall $azfw

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

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

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

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

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