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

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

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

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

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

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Для работы с этой статьей требуется Azure CLI версии 2.0.28 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

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

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

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

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

az group create \
  --name myResourceGroup \
  --location eastus

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

az network asg create \
  --resource-group myResourceGroup \
  --name myAsgWebServers \
  --location eastus

az network asg create \
  --resource-group myResourceGroup \
  --name myAsgMgmtServers \
  --location eastus

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

Создайте группу безопасности сети с помощью команды az network nsg create. В следующем примере создается группа безопасности сети с именем myNsg:

# Create a network security group
az network nsg create \
  --resource-group myResourceGroup \
  --name myNsg

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

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

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsg \
  --name Allow-Web-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 100 \
  --source-address-prefix Internet \
  --source-port-range "*" \
  --destination-asgs "myAsgWebServers" \
  --destination-port-range 80 443

В следующем примере создается правило, разрешающее входящий поток трафика из Интернета в группу безопасности приложений myMgmtServers через порт 22:

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsg \
  --name Allow-SSH-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 110 \
  --source-address-prefix Internet \
  --source-port-range "*" \
  --destination-asgs "myAsgMgmtServers" \
  --destination-port-range 22

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

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

Создайте виртуальную сеть с помощью команды az network vnet create. В следующем примере создается виртуальная сеть с именем myVirtualNetwork:

az network vnet create \
  --name myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefixes 10.0.0.0/16

Добавьте подсеть в виртуальную сеть при помощи команды az network vnet subnet create. В следующем примере добавляется подсеть с именем mySubnet в виртуальную сеть и ей назначается группа безопасности сети myNsg:

az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name mySubnet \
  --address-prefix 10.0.0.0/24 \
  --network-security-group myNsg

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

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

Создайте виртуальную машину с помощью команды az vm create. В следующем примере создается виртуальная машина, которая будет служить веб-сервером. Параметр --asgs myAsgWebServers предписывает Azure делать сетевой интерфейс, создаваемый для виртуальной машины, членом группы безопасности приложений myAsgWebServers.

Параметр --nsg "" указан для того, чтобы предотвратить создание в Azure группы безопасности сети по умолчанию для сетевого интерфейса, который Azure создает при создании виртуальной машины. Для упрощения работы с этой статьей используется пароль. Ключи обычно используются в рабочей среде. Если вы используете ключи, для выполнения оставшихся инструкций необходимо также настроить перенаправление агента SSH. Дополнительные сведения см. в документации по своему клиенту SSH. В следующей команде замените значение <replace-with-your-password> паролем по своему выбору.

adminPassword="<replace-with-your-password>"

az vm create \
  --resource-group myResourceGroup \
  --name myVmWeb \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet mySubnet \
  --nsg "" \
  --asgs myAsgWebServers \
  --admin-username azureuser \
  --admin-password $adminPassword

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

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVmWeb",
  "location": "eastus",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "13.90.242.231",
  "resourceGroup": "myResourceGroup"
}

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

az vm create \
  --resource-group myResourceGroup \
  --name myVmMgmt \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet mySubnet \
  --nsg "" \
  --asgs myAsgMgmtServers \
  --admin-username azureuser \
  --admin-password $adminPassword

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

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

Создайте сеанс SSH с виртуальной машиной myVmMgmt при помощи приведенной ниже команды. Замените <publicIpAddress> общедоступным IP-адресом виртуальной машины. В примере выше используется IP-адрес 13.90.242.231.

ssh azureuser@<publicIpAddress>

При запросе пароля введите пароль, указанный при работе с разделом Создание виртуальных машин.

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

Используйте следующую команду для установки SSH-подключения к виртуальной машине myVmWeb из виртуальной машины myVmMgmt:

ssh azureuser@myVmWeb

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

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

# Update package source
sudo apt-get -y update

# Install NGINX
sudo apt-get -y install nginx

Виртуальной машине myVmWeb разрешено исходящие подключение к Интернету для извлечения nginx, так как правило безопасности по умолчанию разрешает весь исходящий трафик в Интернет. Закройте сеанс SSH с myVmWeb, сохраняя подключение username@myVmMgmt:~$ к виртуальной машине myVmMgmt. Чтобы получить экран приветствия nginx из виртуальной машины myVmWeb, введите следующую команду.

curl myVmWeb

Выйдите из виртуальной машины myVmMgmt. Чтобы убедиться, что вы можете получить доступ к веб-серверу myVmWeb извне Azure, введите curl <publicIpAddress> на вашем компьютере. Подключение будет установлено успешно, так как через порт 80 разрешено получать входящий трафик из Интернета в группу безопасности приложений myAsgWebServers, в которой находится сетевой интерфейс, подключенный к виртуальной машине myVmWeb.

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

Вы можете удалить ненужную группу ресурсов и все содержащиеся в ней ресурсы, выполнив команду az group delete.

az group delete --name myResourceGroup --yes

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

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

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