Фильтрация сетевого трафика с помощью группы безопасности сети посредством PowerShell

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

  • Создание группы безопасности сети и правил безопасности.
  • Создание виртуальной сети и привязка группы безопасности сети к подсети.
  • Развертывание виртуальных машин в подсеть.
  • Тестирование фильтров трафика

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

Azure Cloud Shell

В Azure есть Azure Cloud Shell, интерактивная оболочка среды, с которой можно работать в браузере. Для работы со службами Azure можно использовать Bash или PowerShell с Cloud Shell. Для запуска кода из этой статьи можно использовать предварительно установленные команды Cloud Shell. Ничего дополнительного в локальной среде устанавливать не нужно.

Начало работы с Azure Cloud Shell

Вариант Пример и ссылка
Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. Screenshot that shows an example of Try It for Azure Cloud Shell.
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. Button to launch Azure Cloud Shell.
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Чтобы использовать Azure Cloud Shell, выполните следующие действия:

  1. Запустите Cloud Shell.

  2. Нажмите кнопку Копировать в блоке кода (или блоке команд), чтобы скопировать код или команду.

  3. Вставьте код или команду в окно сеанса Cloud Shell, нажав клавиши CTRL+SHIFT+V в Windows и Linux или CMD+SHIFT+V в macOS.

  4. Нажмите клавишу ВВОД, чтобы запустить код или команду.

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

Создание группы безопасности сети

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

Создание групп безопасности приложений

Создайте группу ресурсов для всех ресурсов, созданных в рамках этой статьи, выполнив командлет New-AzResourceGroup. В следующем примере создается группа ресурсов в расположении eastus.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Создайте группу безопасности приложений с помощью командлета New-AzApplicationSecurityGroup. Группа безопасности приложений позволяет группировать серверы с аналогичными требованиями к фильтрации портов. В следующем примере создаются две группы безопасности приложений.

$webAsg = New-AzApplicationSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Name myAsgWebServers `
  -Location eastus

$mgmtAsg = New-AzApplicationSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Name myAsgMgmtServers `
  -Location eastus

Создание правил безопасности

Создайте правило безопасности с помощью командлета New-AzNetworkSecurityRuleConfig. В следующем примере создается правило, разрешающее входящий поток трафика из Интернета в группу безопасности приложений myWebServers через порты 80 и 443:

$webRule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-Web-All" `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 100 `
  -SourceAddressPrefix Internet `
  -SourcePortRange * `
  -DestinationApplicationSecurityGroupId $webAsg.id `
  -DestinationPortRange 80,443

The following example creates a rule that allows traffic inbound from the internet to the *myMgmtServers* application security group over port 3389:

$mgmtRule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-RDP-All" `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 110 `
  -SourceAddressPrefix Internet `
  -SourcePortRange * `
  -DestinationApplicationSecurityGroupId $mgmtAsg.id `
  -DestinationPortRange 3389

В этой статье RDP-подключение (порт 3389) доступно в Интернете для виртуальной машины myAsgMgmtServers. В рабочих средах вместо открытия порта 3389 для доступа из Интернета рекомендуется подключиться к ресурсам Azure, которыми вы хотите управлять, с помощью VPN-подключения или частного сетевого подключения.

Создание группы безопасности сети

Создайте группу безопасности сети с помощью командлета New-AzNetworkSecurityGroup. В следующем примере создается группа безопасности сети с именем myNsg:

$nsg = New-AzNetworkSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myNsg `
  -SecurityRules $webRule,$mgmtRule

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

Создайте виртуальную сеть с помощью командлета New-AzVirtualNetwork. В следующем примере создается виртуальная сеть с именем myVirtualNetwork:

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

Создайте конфигурацию подсети с помощью командлета Set-AzVirtualNetworkSubnetConfig, а затем сохраните эту конфигурацию подсети в виртуальную сеть с помощью командлета Set-AzVirtualNetwork. В следующем примере добавляется подсеть с именем mySubnet в виртуальную сеть и ей назначается группа безопасности сети myNsg:

Add-AzVirtualNetworkSubnetConfig `
  -Name mySubnet `
  -VirtualNetwork $virtualNetwork `
  -AddressPrefix "10.0.2.0/24" `
  -NetworkSecurityGroup $nsg
$virtualNetwork | Set-AzVirtualNetwork

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

Прежде чем создавать виртуальные машины, получите объект виртуальной сети с подсетью с помощью командлета Get-AzVirtualNetwork.

$virtualNetwork = Get-AzVirtualNetwork `
 -Name myVirtualNetwork `
 -Resourcegroupname myResourceGroup

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

$publicIpWeb = New-AzPublicIpAddress `
  -AllocationMethod Dynamic `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myVmWeb

$publicIpMgmt = New-AzPublicIpAddress `
  -AllocationMethod Dynamic `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myVmMgmt

Создайте два сетевых интерфейса с помощью командлета New-AzNetworkInterface и назначьте каждому из них общедоступный IP-адрес. В следующем примере создается сетевой интерфейс, которому назначается общедоступный IP-адрес myVmWeb. Этот сетевой интерфейс добавляется в группу безопасности приложений myAsgWebServers.

$webNic = New-AzNetworkInterface `
  -Location eastus `
  -Name myVmWeb `
  -ResourceGroupName myResourceGroup `
  -SubnetId $virtualNetwork.Subnets[0].Id `
  -ApplicationSecurityGroupId $webAsg.Id `
  -PublicIpAddressId $publicIpWeb.Id

В следующем примере создается сетевой интерфейс, которому назначается общедоступный IP-адрес myVmMgmt. Этот сетевой интерфейс добавляется в группу безопасности приложений myAsgMgmtServers.

$mgmtNic = New-AzNetworkInterface `
  -Location eastus `
  -Name myVmMgmt `
  -ResourceGroupName myResourceGroup `
  -SubnetId $virtualNetwork.Subnets[0].Id `
  -ApplicationSecurityGroupId $mgmtAsg.Id `
  -PublicIpAddressId $publicIpMgmt.Id

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

Создайте конфигурацию виртуальной машины с помощью командлета New-AzVMConfig, затем создайте виртуальную машину с помощью командлета New-AzVM. В следующем примере создается виртуальная машина, которая будет служить веб-сервером. Чтобы можно было перейти к следующему шагу, параметр -AsJob позволяет создать виртуальную машину в фоновом режиме.

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

$webVmConfig = New-AzVMConfig `
  -VMName myVmWeb `
  -VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
  -ComputerName myVmWeb `
  -Credential $cred | `
Set-AzVMSourceImage `
  -PublisherName MicrosoftWindowsServer `
  -Offer WindowsServer `
  -Skus 2016-Datacenter `
  -Version latest | `
Add-AzVMNetworkInterface `
  -Id $webNic.Id
New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -VM $webVmConfig `
  -AsJob

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

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

# Create the web server virtual machine configuration and virtual machine.
$mgmtVmConfig = New-AzVMConfig `
  -VMName myVmMgmt `
  -VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
  -ComputerName myVmMgmt `
  -Credential $cred | `
Set-AzVMSourceImage `
  -PublisherName MicrosoftWindowsServer `
  -Offer WindowsServer `
  -Skus 2016-Datacenter `
  -Version latest | `
Add-AzVMNetworkInterface `
  -Id $mgmtNic.Id
New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -VM $mgmtVmConfig

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

Тестирование фильтров трафика

Чтобы получить общедоступный IP-адрес виртуальной машины, выполните командлет Get-AzPublicIpAddress. Приведенный ниже пример возвращает общедоступный IP-адрес виртуальной машины myVmMgmt.

Get-AzPublicIpAddress `
  -Name myVmMgmt `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

На локальном компьютере выполните следующую команду для создания сеанса удаленного рабочего стола с виртуальной машиной myVmMgmt. Замените <publicIpAddress> IP-адресом, полученным от предыдущей команды.

mstsc /v:<publicIpAddress>

Откройте загруженный RDP-файл. При появлении запроса выберите Подключиться.

Введите имя пользователя и пароль, которые вы указали при создании виртуальной машины (возможно, для этого придется выбрать Дополнительные варианты и Использовать другую учетную запись). Затем нажмите кнопку ОК. При входе в систему может появиться предупреждение о сертификате. Чтобы продолжить процесс подключения, выберите Да.

Подключение будет установлено успешно, так как через порт 3389 разрешено получать входящий трафик из Интернета в группу безопасности приложений myAsgMgmtServers, в которой находится сетевой интерфейс, подключенный к виртуальной машине myVmMgmt.

Используйте следующую команду PowerShell, чтобы создать подключение к удаленному рабочему столу виртуальной машины myVmWeb из виртуальной машины myVmMgmt.

mstsc /v:myvmWeb

Подключение будет установлено успешно, так как правило безопасности по умолчанию в каждой группе безопасности сети разрешает трафик через все порты между всеми IP-адресами в виртуальной сети. Невозможно установить подключение к удаленному рабочему столу виртуальной машины myVmWeb из Интернета, потому что правило безопасности для myAsgWebServers не разрешает получение входящего трафика через порт 3389 из Интернета.

Используйте следующую команду PowerShell для установки Microsoft IIS на виртуальной машине myVmWeb.

Install-WindowsFeature -name Web-Server -IncludeManagementTools

Когда установка служб IIS завершится, отключитесь от виртуальной машины myVmWeb, после чего вы останетесь в сеансе удаленного рабочего стола виртуальной машины myVmMgmt. Чтобы просмотреть экран приветствия IIS, откройте браузер и перейдите по адресу http://myVmWeb.

Отключитесь от виртуальной машины myVmMgmt.

На своем компьютере введите приведенную ниже команду PowerShell, чтобы получить общедоступный IP-адрес сервера myVmWeb.

Get-AzPublicIpAddress `
  -Name myVmWeb `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Чтобы убедиться в наличии доступа к веб-серверу myVmWeb извне Azure, откройте веб-браузер на своем компьютере и перейдите по адресу http://<public-ip-address-from-previous-step>. Подключение будет установлено успешно, так как через порт 80 разрешено получение входящего трафика из Интернета в группу безопасности приложений myAsgWebServers, в которой находится сетевой интерфейс, подключенный к виртуальной машине myVmWeb.

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

Вы можете удалить ненужную группу ресурсов и все содержащиеся в ней ресурсы с помощью командлета Remove-AzResourceGroup:

Remove-AzResourceGroup -Name myResourceGroup -Force

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

В этой статье вы создали группу безопасности сети и связали ее с подсетью виртуальной сети. Дополнительные сведения о группах безопасности сети см. в статьях Безопасность сети и Create, change, or delete a network security group (Создание, изменение или удаление группы безопасности сети).

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