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

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

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

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

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

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

  • AzureFirewallSubnet — в этой подсети находится брандмауэр.
  • Workload-SN — в этой подсети находится сервер рабочей нагрузки. Трафик этой подсети проходит через брандмауэр.
  • AzureBastionSubnet — подсеть , используемая для Бастиона Azure, которая используется для подключения к серверу рабочей нагрузки.

Дополнительные сведения о Бастионе Azure см. в статье Что такое Бастион Azure.

Важно

Почасовая тарификация начинается с момента развертывания Бастиона, независимо от объема исходящего трафика. Дополнительные сведения см. в разделе "Цены и номера SKU". Если вы развертываете Бастион в рамках руководства или теста, рекомендуется удалить этот ресурс после завершения работы с ним.

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

В этой статье вы узнаете, как:

  • настройка тестовой сетевой среды;
  • развертывание брандмауэра;
  • Создание маршрута по умолчанию
  • Настройте правило приложения для разрешения доступа к www.google.com
  • настройка сетевых правил для предоставления доступа к внешним DNS-серверам;
  • тестирование брандмауэра.

Если вы предпочитаете, эту процедуру можно выполнить с помощью портала Azure.

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

Prerequisites

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

Настройка сети

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

Создайте группу ресурсов

Создайте группу ресурсов для развертывания с помощью New-AzResourceGroup :

New-AzResourceGroup -Name Test-FW-RG -Location "East US"

Создайте виртуальную сеть и хост Azure Bastion

Эта виртуальная сеть содержит три подсети. Используйте New-AzVirtualNetworkSubnetConfig , чтобы определить их:

Примечание

Размер подсети AzureFirewallSubnet равен /26. Дополнительные сведения о размере подсети см. в статье с часто задаваемыми вопросами о Брандмауэре Azure.

$Bastionsub = New-AzVirtualNetworkSubnetConfig `
    -Name AzureBastionSubnet `
    -AddressPrefix 10.0.0.0/27
$FWsub = New-AzVirtualNetworkSubnetConfig `
    -Name AzureFirewallSubnet `
    -AddressPrefix 10.0.1.0/26
$Worksub = New-AzVirtualNetworkSubnetConfig `
    -Name Workload-SN `
    -AddressPrefix 10.0.2.0/24

Используйте New-AzVirtualNetwork для создания виртуальной сети:

$testVnet = New-AzVirtualNetwork `
    -Name Test-FW-VN `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -AddressPrefix 10.0.0.0/16 `
    -Subnet $Bastionsub, $FWsub, $Worksub

Создание общедоступного IP-адреса для узла Бастиона Azure

Используйте New-AzPublicIpAddress , чтобы создать статический общедоступный IP-адрес узла Бастиона:

$publicip = New-AzPublicIpAddress `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -Name Bastion-pip `
    -AllocationMethod static `
    -Sku standard

Создайте узел Bastion в Azure

Используйте New-AzBastion для создания хоста Bastion.

New-AzBastion `
    -ResourceGroupName Test-FW-RG `
    -Name Bastion-01 `
    -PublicIpAddress $publicip `
    -VirtualNetwork $testVnet

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

Используйте New-AzVM для создания виртуальной машины рабочей нагрузки. При появлении запроса введите имя пользователя и пароль:

# Create the NIC
$wsn = Get-AzVirtualNetworkSubnetConfig `
    -Name Workload-SN `
    -VirtualNetwork $testVnet
$NIC01 = New-AzNetworkInterface `
    -Name Srv-Work `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -Subnet $wsn

# Define the virtual machine
$SecurePassword = ConvertTo-SecureString "<choose a password>" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ("<choose a user name>", $SecurePassword);
$VirtualMachine = New-AzVMConfig `
    -VMName Srv-Work `
    -VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem `
    -VM $VirtualMachine `
    -Windows `
    -ComputerName Srv-Work `
    -ProvisionVMAgent `
    -EnableAutoUpdate `
    -Credential $Credential
$VirtualMachine = Add-AzVMNetworkInterface `
    -VM $VirtualMachine `
    -Id $NIC01.Id
$VirtualMachine = Set-AzVMSourceImage `
    -VM $VirtualMachine `
    -PublisherName 'MicrosoftWindowsServer' `
    -Offer 'WindowsServer' `
    -Skus '2019-Datacenter' `
    -Version latest

# Create the virtual machine
New-AzVM `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -VM $VirtualMachine `
    -Verbose

Примечание

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

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

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

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

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

Развертывание брандмауэра

Используйте New-AzPublicIpAddress и New-AzFirewall для развертывания брандмауэра в виртуальной сети:

# Get a Public IP for the firewall
$FWpip = New-AzPublicIpAddress `
    -Name "fw-pip" `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -AllocationMethod Static `
    -Sku Standard
# Create the firewall
$Azfw = New-AzFirewall `
    -Name Test-FW01 `
    -ResourceGroupName Test-FW-RG `
    -Location "East US" `
    -VirtualNetwork $testVnet `
    -PublicIpAddress $FWpip

# Save the firewall private IP address for future use

$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP

Запишите частный IP-адрес. Вы используете его позже при создании маршрута по умолчанию.

Создание маршрута по умолчанию

Используйте New-AzRouteTable и Add-AzRouteConfig , чтобы создать таблицу маршрутов с маршрутом по умолчанию, указывающим на брандмауэр, а затем связать ее с подсетью рабочей нагрузки:

$routeTableDG = New-AzRouteTable `
  -Name Firewall-rt-table `
  -ResourceGroupName Test-FW-RG `
  -location "East US" `
  -DisableBgpRoutePropagation

# Create a route
Add-AzRouteConfig `
  -Name "DG-Route" `
  -RouteTable $routeTableDG `
  -AddressPrefix 0.0.0.0/0 `
  -NextHopType "VirtualAppliance" `
  -NextHopIpAddress $AzfwPrivateIP
Set-AzRouteTable

# Associate the route table to the subnet

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $testVnet `
  -Name Workload-SN `
  -AddressPrefix 10.0.2.0/24 `
  -RouteTable $routeTableDG | Set-AzVirtualNetwork

Настройка правила приложения

Используйте New-AzFirewallApplicationRule и New-AzFirewallApplicationRuleCollection , чтобы создать правило приложения, которое предоставляет исходящий доступ к www.google.com:

$AppRule1 = New-AzFirewallApplicationRule `
    -Name Allow-Google `
    -SourceAddress 10.0.2.0/24 `
    -Protocol http, https `
    -TargetFqdn www.google.com
$AppRuleCollection = New-AzFirewallApplicationRuleCollection `
    -Name App-Coll01 `
    -Priority 200 `
    -ActionType Allow `
    -Rule $AppRule1
$Azfw.ApplicationRuleCollections.Add($AppRuleCollection)
Set-AzFirewall -AzureFirewall $Azfw

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

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

Используйте New-AzFirewallNetworkRule и New-AzFirewallNetworkRuleCollection , чтобы создать сетевое правило, которое предоставляет исходящий доступ к двум IP-адресам через порт 53 (DNS):

$NetRule1 = New-AzFirewallNetworkRule `
    -Name "Allow-DNS" `
    -Protocol UDP `
    -SourceAddress 10.0.2.0/24 `
    -DestinationAddress 209.244.0.3,209.244.0.4 `
    -DestinationPort 53
$NetRuleCollection = New-AzFirewallNetworkRuleCollection `
    -Name RCNet01 `
    -Priority 200 `
    -Rule $NetRule1 `
    -ActionType "Allow"
$Azfw.NetworkRuleCollections.Add($NetRuleCollection)
Set-AzFirewall -AzureFirewall $Azfw

Изменение первичного и вторичного DNS-адреса для сетевого интерфейса Srv-Work

Для тестирования в этой процедуре настройте первичные и вторичные DNS-адреса сервера. Эта конфигурация не является общим требованием брандмауэра Azure.

$NIC01.DnsSettings.DnsServers.Add("209.244.0.3")
$NIC01.DnsSettings.DnsServers.Add("209.244.0.4")
$NIC01 | Set-AzNetworkInterface

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

Теперь проверьте брандмауэр, чтобы убедиться, что он работает должным образом.

  1. Подключитесь к виртуальной машине Srv-Work с помощью Бастиона и войдите в систему.

    Снимок экрана: подключение к виртуальной машине Srv-Work с помощью Бастиона Azure.

  2. В Srv-Work откройте окно PowerShell и выполните следующие команды:

    nslookup www.google.com
    nslookup www.microsoft.com
    

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

  3. Выполните следующие команды:

    Invoke-WebRequest -Uri https://www.google.com
    
    Invoke-WebRequest -Uri https://www.microsoft.com
    

    Запросы www.google.com завершаются успешно, а запросы www.microsoft.com завершаются неудачей. В этом результате показано, что правила брандмауэра работают должным образом.

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

  • Можно определить DNS-имена с помощью настроенного внешнего DNS-сервера.
  • Вы можете перейти к одному разрешенному полному доменному имени (FQDN), но не к другим.

Очистите ресурсы

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

Remove-AzResourceGroup -Name Test-FW-RG

Дальнейшие шаги