Диагностика проблемы с фильтрацией трафика на виртуальной машине

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

Группы NSG позволяют управлять типами входящего и исходящего трафика виртуальной машины. Вы можете связать NSG с подсетью в виртуальной сети Azure и (или) с сетевым интерфейсом, присоединенным к виртуальной машине. Действующие правила безопасности, применяемые к сетевому интерфейсу, представляют собой комбинацию правил безопасности в группе NSG, присоединенной к сетевому интерфейсу и подсети, в которой он находится. Правила в разных NSG иногда конфликтуют между собой и влияют на возможность сетевого подключения к виртуальной машине. Вы можете просмотреть все действующие правила безопасности в группах NSG, применяемых к сетевым интерфейсам виртуальной машины. Если вы не знакомы с упоминающимися здесь понятиями, см. общие сведения о виртуальных сетях, сетевом интерфейсе и группах безопасности сети.

Сценарий

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

Чтобы выполнить приведенные ниже инструкции, требуется виртуальная машина, для которой будут просматриваться действующие правила безопасности. Если у вас ее нет, разверните виртуальную машину Linux или Windows для выполнения задач, описанных в этой статье. Примеры в этой статье относятся к виртуальной машине myVM с сетевым интерфейсом myVMVMNic. Виртуальная машина и сетевой интерфейс находятся в группе ресурсов myResourceGroup в регионе Восточная часть США. Измените значения в инструкциях, чтобы они соответствовали значениям для виртуальной машины, проблема с которой диагностируется.

Диагностика с помощью портала Azure

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

  2. В верхней части окна портала Azure введите в поле поиска имя виртуальной машины. Когда в результатах поиска появится имя виртуальной машины, щелкните его.

  3. В разделе Параметры выберите Сетевые подключения, как показано на следующем изображении:

    Screenshot shows the Azure portal with Networking settings for my V M V M Nic.

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

    • mySubnetNSG — связана с подсетью, в которой находится сетевой интерфейс;
    • myVMNSG — связана с сетевым интерфейсом на виртуальной машине myVMVMNic.

    Правило с именем DenyAllInBound запрещает входящий трафик к виртуальной машине через порт 80 из Интернета, как указано в сценарии. В правиле указано значение 0.0.0.0/0 для источника, к которому относится Интернет. Правило с более высоким приоритетом (меньшее число), разрешающее входящий трафик через порт 80, не установлено. Чтобы разрешить входящий трафик к виртуальной машине через порт 80 из Интернета, см. раздел Решение проблемы. Дополнительные сведения о правилах безопасности и их применении в Azure см. в разделе Группы безопасности сети.

    В нижней части изображения также отображается раздел правил исходящего порта. Здесь указаны правила исходящего порта для сетевого интерфейса. На изображении указаны только четыре правила входящего трафика для каждой группы NSG. Но правил может быть намного больше. На изображении указано значение VirtualNetwork в столбцах Источник и Назначение, а также AzureLoadBalancer в столбце Источник. VirtualNetwork и AzureLoadBalancer являются тегами службы. Теги службы представляют группу префиксов IP-адресов, чтобы упростить создание правила безопасности.

  4. Убедитесь, что виртуальная машина работает. Затем выберите Действующие правила безопасности, как показано на предыдущем изображении, чтобы просмотреть действующие правила безопасности. Они показаны на следующем изображении:

    Screenshot shows the Effective security rules pane with Download selected and AllowAzureLoadBalancerInbound Inbound rule selected.

    Перечислены те же правила, что и на этапе 3. Но есть различные вкладки для группы NSG, связанной с сетевым интерфейсом и подсетью. Как видите, отображаются только первые 50 правил. Чтобы скачать CSV-файл, который содержит все правила, выберите Скачать.

    Чтобы узнать, какой префикс представляет каждый тег службы, выберите правило, например правило с именем AllowAzureLoadBalancerInbound. На следующем изображении показаны префиксы для тега службы AzureLoadBalancer:

    Screenshot shows Address prefixes for AllowAzureLoadBalancerInbound entered.

    Тег службы AzureLoadBalancer представляет только один префикс. Другие теги службы представляют несколько префиксов.

  5. На предыдущих этапах отображались правила безопасности для сетевого интерфейса с именем myVMVMNic. Но на некоторых изображениях вы также могли видеть сетевой интерфейс с именем myVMVMNic2. В этом примере к виртуальной машине подключено два сетевых интерфейса. Действующие правила безопасности могут быть индивидуальными для каждого сетевого интерфейса.

    Чтобы просмотреть правила для сетевого интерфейса myVMVMNic2, выберите его. Как показано на изображении ниже, с подсетью сетевого интерфейса связаны те же правила, что и для интерфейса myVMVMNic, так как оба эти интерфейса находятся в одной подсети. Когда вы связываете NSG с подсетью, ее правила применяются ко всем сетевым интерфейсам в подсети.

    Screenshot shows the Azure portal with Networking settings for my V M V M Nic 2.

    В отличие от сетевого интерфейсаmyVMVMNic, с сетевым интерфейсом myVMVMNic2 не связана группа безопасности сети. С каждым сетевым интерфейсом может быть связана одна группа NSG либо же NSG может отсутствовать. С сетевыми интерфейсами или подсетями могут быть связаны одинаковые или разные NSG. Вы можете связать одну и ту же группу безопасности с любым выбранным числом сетевых интерфейсов или подсетей.

Мы просмотрели правила безопасности со стороны виртуальной машины. Но их можно просмотреть и со стороны отдельного пользователя:

Диагностика с помощью PowerShell

Примечание

В этой статье предусмотрено использование модуля Azure Az PowerShell, который является рекомендуемым модулем PowerShell для взаимодействия с Azure. Чтобы начать работу с модулем Az PowerShell, ознакомьтесь со статьей Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.

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

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

Get-AzEffectiveNetworkSecurityGroup `
  -NetworkInterfaceName myVMVMNic `
  -ResourceGroupName myResourceGroup

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

Если у вас по-прежнему возникают проблемы с подключением, см. разделы Дополнительная диагностика и Рекомендации.

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

$VM = Get-AzVM -Name myVM -ResourceGroupName myResourceGroup
$VM.NetworkProfile

Вы получите примерно такой результат:

NetworkInterfaces
-----------------
{/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myVMVMNic

В предыдущих выходных данных имя сетевого интерфейса было myVMVMNic.

Диагностика с помощью Azure CLI

При использовании команд Azure CLI для решения задач в этой статье запускайте эти команды в Azure Cloud Shell или в Azure CLI на своем компьютере. Для этой статьи требуется Azure CLI 2.0.32 или более поздней версии. Выполните командлет az --version, чтобы узнать установленную версию. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0. Если Azure CLI работает локально, необходимо также выполнить команду az login и войти в Azure с учетной записью, предоставляющей необходимые разрешения.

Получите действующие правила безопасности для сетевого интерфейса с помощью az network nic list-effective-nsg. В следующем примере извлекаются действующие правила безопасности для сетевого интерфейса с именем myVMVMNic, который находится в группе ресурсов с именем myResourceGroup:

az network nic list-effective-nsg \
  --name myVMVMNic \
  --resource-group myResourceGroup

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

Если у вас по-прежнему возникают проблемы с подключением, см. разделы Дополнительная диагностика и Рекомендации.

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

az vm show \
  --name myVM \
  --resource-group myResourceGroup

В возвращенном результате отобразятся примерно такие сведения:

"networkProfile": {
    "additionalProperties": {},
    "networkInterfaces": [
      {
        "additionalProperties": {},
        "id": "/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myVMVMNic",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      },

В предыдущем результате имя сетевого интерфейса было myVMVMNic.

Интерпретация выходных данных команды

Если для диагностики проблемы используется PowerShell или Azure CLI, результат выполнения команды содержит следующие сведения:

  • NetworkSecurityGroup — идентификатор группы безопасности сети.
  • Association — указывает, с чем связана группа безопасности сети: с NetworkInterface или Subnet. Если NSG связана и с тем, и с другим, в результатах возвращаются значения NetworkSecurityGroup, Association и EffectiveSecurityRules для каждой группы NSG. Если NSG подключается или отключается непосредственно перед выполнением команды для просмотра действующих правил безопасности, такие изменения могут отобразиться в выходных данных команды с задержкой в несколько секунд.
  • EffectiveSecurityRules — каждое свойство подробно описано в разделе о создании правила безопасности. Правила, имена которых начинаются с defaultSecurityRules/ — это правила по умолчанию, которые установлены в каждой группе NSG. Правила, имена которых начинаются с securityRules/ — это созданные вами правила. Правила, определяющие теги служб, такие как Internet, VirtualNetwork и AzureLoadBalancer, для свойств destinationAddressPrefix или sourceAddressPrefix, также имеют значения для свойства expandedDestinationAddressPrefix. Свойство expandedDestinationAddressPrefix предназначено для перечисления всех префиксов адресов, представленных тегом службы.

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

Правило с именем defaultSecurityRules/DenyAllInBound запрещает входящий трафик к виртуальной машине через порт 80 из Интернета, как указано в сценарии. Правило с более высоким приоритетом (меньшее число), разрешающее входящий трафик через порт 80 из Интернета, не установлено.

Устранение проблемы

При использовании как портала Azure, так и PowerShell или Azure CLI для диагностики проблемы, представленной в сценарии этой статьи, решение будет одним. Нужно создать правило сетевой безопасности со следующими свойствами:

Свойство Значение
Источник Любой
Диапазоны исходных портов Любой
Назначение IP-адрес виртуальной машины, диапазон IP-адресов или все адреса в подсети.
Диапазоны портов назначения 80
Протокол TCP
Действие Allow
Приоритет 100
Имя Allow-HTTP-All

Когда вы создадите правило, входящий трафик из Интернета через порт 80 будет разрешен, так как приоритет этого правила выше, чем приоритет правила безопасности по умолчанию с именем DenyAllInBound, запрещающего передачу трафика. Узнайте, как создать правило безопасности. Если с сетевым интерфейсом и подсетью связаны разные группы NSG, создайте одинаковое правило в обеих NSG.

Когда в Azure обрабатывается входящий трафик, сначала применяются правила в группе NSG, связанной с подсетью (при наличии такой группы NSG), а затем — правила в группе NSG, связанной с сетевым интерфейсом. Если группа NSG связана и с сетевым интерфейсом, и с подсетью, нужно открыть порт в обеих NSG, чтобы трафик мог поступать на виртуальную машину. Чтобы упростить решение проблем с администрированием и обменом данными, рекомендуем связать NSG с подсетью, а не с отдельными сетевыми интерфейсами. Если для виртуальных машин в подсети требуются разные правила безопасности, можно сделать сетевые интерфейсы членами группы безопасности приложения (ASG) и указать ASG в качестве источника и назначения для правила безопасности. Дополнительные сведения см. в статье о группах безопасности приложений.

Если у вас по-прежнему возникают проблемы с подключениями, ознакомьтесь с разделами Рекомендации и "Дополнительная диагностика".

Рекомендации

При устранении проблем с подключением необходимо учитывать следующие аспекты:

  • Правила безопасности по умолчанию блокируют входящий доступ из Интернета. Разрешается только входящий трафик из виртуальной сети. Чтобы разрешить входящий трафик из Интернета, добавьте правила безопасности с более высоким приоритетом, чем у правил по умолчанию. См. дополнительные сведения о правилах безопасности по умолчанию и о том, как добавить правило безопасности.
  • Если виртуальные сети соединены с помощью пиринга, тег службы VIRTUAL_NETWORK по умолчанию автоматически включает префиксы для пиринговых виртуальных сетей. Устранить неполадки, связанные с пирингом между виртуальными сетями, можно с помощью сведений о префиксах в списке ExpandedAddressPrefix. См. дополнительные сведения о пиринге виртуальных сетей и тегах служб.
  • Действующие правила безопасности отображаются для сетевого интерфейса виртуальной машины, только если с ним и (или) с подсетью связана группа NSG и виртуальная машина запущена.
  • Если с сетевым интерфейсом или подсетью виртуальной машины не связана группа NSG и машине назначен общедоступный IP-адрес, все порты будут открыты для входящего и исходящего трафика с любым источником и назначением. Если виртуальной машине назначен общедоступный IP-адрес, рекомендуем применять NSG к подсети сетевого интерфейса.

Дополнительная диагностика

  • Чтобы быстро проверить, разрешен ли входящий или исходящий трафик виртуальной машины, воспользуйтесь функцией проверки IP-потока в Наблюдателе за сетями Azure. Проверка IP-потока покажет, разрешен ли трафик. Если трафик запрещен, с помощью проверки IP-потока можно узнать, какое правило безопасности блокирует трафик.
  • Если ни одно из правил безопасности не приводит к сбою подключения к виртуальной машине, проблема может быть связана со следующими компонентами или факторами:
    • Брандмауэр, запущенный в операционной системе виртуальной машины.
    • Маршруты, настроенные для виртуальных устройств или локального трафика. Интернет-трафик перенаправляется в вашу локальную сеть путем принудительного туннелирования. При принудительном туннелировании интернет-трафика в виртуальный модуль или локальное расположение иногда не удается подключиться к виртуальной машине из Интернета. Чтобы узнать, как диагностировать проблемы с маршрутизацией, которые могут уменьшить объем исходящего трафика виртуальной машины, см. эту статью.

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