Группы сетевой безопасности Azure или Azure NSG позволяют фильтровать сетевой трафик как входящий, так и исходящий от одного или нескольких ресурсов Azure. Если вам когда-либо понадобилось ограничить доступ к ресурсу Azure, вам необходимо понимать, как работают NSG.
В этой статье вы узнаете о назначении Azure NSG и о том, как настроить их с помощью языка сценариев PowerShell.
Предварительные требования
- Ресурс Azure для целей настройки. В этом руководстве будет использоваться подписка с оплатой по мере использования и виртуальная машина Azure с Windows Server 2019.
- PowerShell 7+. Предыдущие версии PowerShell могут работать, но в этом руководстве используется PowerShell 7.0.1 для настройки.
- Модуль PowerShell Azure Az
Понимание Azure NSG
Представьте себе Azure NSG как брандмауэр. Брандмауэр состоит из правил, определяющих действия с входящим и исходящим трафиком, называемых наборами правил. Брандмауэры обычно поставляются с предустановленными наборами правил, которые определяют, что может и не может проходить через брандмауэр; Azure NSG имеют аналогичные возможности.
В отличие от традиционных брандмауэров, Azure NSG также имеют облачное понятие, называемое теги сервисов. Теги сервисов – это способ абстрагирования диапазонов адресов в Azure для их более удобного управления.
Давайте кратко рассмотрим каждую из этих важных тем.
Использование тегов сервисов для упрощения конфигурации правил
В облачных услугах IP-адреса и диапазоны могут часто изменяться. Это может затруднить поддержание вручную определенных правил диапазонов IP-адресов Azure. К счастью, Azure определяет множество различных тегов сервисов, на которые может направляться ваше правило NSG.
Теги сервисов – это концепция, которая всегда будет использовать самый актуальный список адресов. Теги сервисов – это способ назначения заполнителей наборам диапазонов адресов для упрощения управления.

Будьте внимательны к наборам правил по умолчанию
При создании и применении Azure NSG вам сначала нужно знать о правилах, которые эти NSG автоматически применяют. Эти правила по умолчанию являются неизменными и создаются как для входящего, так и для исходящего трафика.
Каждое правило в наборе правил Azure NSG имеет приоритет. Приоритет определяет порядок выполнения или то, какие правила переопределяют другие. Например, если существует правило с приоритетом 65000, блокирующее весь входящий трафик, и вы создаете правило с приоритетом 64999, разрешающее порт 80, то Azure NSG заблокирует весь трафик, исключая порт 80.

Правила по умолчанию не могут быть изменены, но вы можете переопределить их, используя правило с более высоким приоритетом, как показано выше. Каждое из этих правил применяется ко всем протоколам, таким как TCP, UDP и ICMP.
Убедитесь, что ваши правила используют номер, меньший
65500
, чтобы переопределить правила по умолчанию!
При создании Azure NSG вы увидите различные правила по умолчанию:
Входящие правила
AllowVNetInBound
– Это входящее правило содержит все диапазоны IP-адресов, определенные для виртуальной сети и всех подключенных адресных пространств в локальной сети. Кроме того, это правило содержит связанные виртуальные сети, виртуальные сети, подключенные к шлюзу виртуальной сети, виртуальный IP-адрес хоста и любые префиксы адресов, используемые в пользовательских определенных маршрутах. Это правило установлено с приоритетом65000
.AllowAzureLoadBalancerInBound
– Тег службыAzureLoadBalancer
соответствует виртуальному IP-адресу хоста,168.63.129.16
, откуда исходит проверка состояния Azure. Фактический трафик не проходит через него, и если вы не используете балансировку нагрузки Azure, это правило можно переопределить. Виртуальный IP-адрес хоста существует во всех регионах и предоставляет основные инфраструктурные службы, такие как DHCP, DNS, IMDS и мониторинг состояния. Это правило установлено с приоритетом65001
.DenyAllInbound
– Установленное в качестве последнего правила с приоритетом65500
, это правило запрещает весь входящий трафик, кроме явно разрешенного.
Исходящие правила
AllowVNetOutBound
– Это содержит все диапазоны IP-адресов, определенные для виртуальной сети, все подключенные адресные пространства внутри организации, взаимосвязанные виртуальные сети, виртуальные сети, подключенные к шлюзу виртуальной сети, виртуальный IP-адрес хоста и любые префиксы адресов, используемые в пользовательских маршрутах. Это правило установлено с приоритетом65000
.AllowInternetOutBound
– Пространство IP-адресов за пределами виртуальной сети и доступное из общедоступного интернета. Включает диапазон адресов общедоступных IP-адресов, принадлежащих Azure. Это правило установлено с приоритетом65001
.DenyAllOutBound
– Как и во входном наборе правил, это правило устанавливается в самом конце, используя приоритет65500
. Это исходящее правило запрещает весь трафик, неявно разрешенный.
Построение Azure NSG с помощью PowerShell
Достаточно разговоров, давайте приступим к созданию некоторых Azure NSG с помощью PowerShell! Предполагается, что вы находитесь в своей консоли PowerShell и аутентифицированы, продолжайте чтение.
Связано: Connect-AzAccount: Ваш шлюз к Azure с помощью PowerShell
Для создания Azure NSG с помощью PowerShell вам понадобится одна команда; New-AzNetworkSecurityGroup
. Для создания NSG с этой командой укажите ей имя, имя группы ресурсов, в которой нужно создать NSG, и местоположение.
Ниже приведен пример кода, который использует командлет New-AzNetworkSecurityGroup
для создания группы безопасности сети (NSG) с именем NSG-MyVM
в ресурсной группе Articles, расположенной в датацентре Azure eastus
.
Создание правил Azure NSG с помощью PowerShell
После получения NSG, вероятно, стандартного набора правил будет недостаточно. Вам потребуется создать собственные правила.
Настройка входящего правила для протокола удаленного рабочего стола
A common administrative task is the need to create an inbound rule for the Remote Desktop Protocol (RDP). In the tutorial’s example, perhaps it’s going to be applied to a Windows Server Azure VM and you need to access the VM via RDP. In that case, you need to open up port 3389 inbound.
Для добавления нового входящего правила в существующую NSG требуется три шага:
- Запустите команду
Get-AzNetworkSecurityGroup
для извлечения существующей NSG. - Запустите команду
Add-AzNetworkSecurityRuleConfig
для создания правила. - Запустите команду
Set-AzNetworkSecurityGroup
для применения этого правила к NSG.
Ниже приведен пример кода, который использует Get-AzNetworkSecurityGroup
для извлечения существующей NSG. Затем правило определяется с использованием Add-AzNetworkSecurityRuleConfig
, которое затем применяется к существующей NSG с помощью командлета Set-AzNetworkSecurityGroup
.
Параметр Приоритет определяет момент, когда выполняется правило, значение
200
находится близко к верху, поскольку4096
является правилом с наивысшим приоритетом.
Отказ в исходящем трафике, рекомендованном SANS
Часто исходящий трафик не блокируется, поскольку может быть сложно знать все возможные порты, которые приложение может потребовать для использования. К счастью, вы можете найти некоторые рекомендации по экспертному фильтрованию исходящего трафика от института SANS, широко доверяемой организации по стандартам информационной безопасности.
Для внедрения рекомендаций SANS мы можем использовать те же три шага, описанные выше, но на этот раз создать правило с несколькими портами и с Направлением
Исходящий, а не Входящий.
- MS RPC – TCP и UDP порт 135
- NetBIOS/IP – TCP и UDP порты 137-139
- SMB/IP – TCP порт 445
- Простой протокол передачи файлов (TFTP) – UDP порт 69
- Системный журнал (Syslog) – UDP порт 514
- Простой протокол управления сетью (SNMP) – UDP порты 161-162
Нижеприведенный код извлекает существующее правило NSG с помощью cmdlet Get-AzNetworkSecurityGroup
. Правило исходящего трафика определяется с помощью Add-AzNetworkSecurityRuleConfig
и применяется с помощью cmdlet Set-AzNetworkSecurityGroup
.
Конечно, некоторые из этих портов являются ценными и необходимыми, в зависимости от услуг, которые вы предоставляете. Скорее всего, вам потребуется настроить этот список в зависимости от того, что требуется вашему приложению, что обычно предоставляется поставщиком или с помощью инструмента для поиска открытых портов, такого как netstat
.
Связано: Поиск портов с помощью Netstat и PowerShell
Настройка Azure NSG для конкретной подсети
Возможно, вы разделили свое виртуальное сетевое пространство с помощью подсетей. Чтобы стать более детализированным, вы можете применить NSG только к определенной подсети, тем самым управляя трафиком в этой подсети детально.
Приведенный ниже фрагмент кода находит целый префикс адреса и применяет к нему NSG.
Затем узнайте, как использовать сетевые интерфейсы для дальнейшего сегментирования и ограничения NSG только тем, что может понадобиться, например, сетевой интерфейс.
Применение Azure NSG к сетевому интерфейсу
Подобно тому, как работают подсети, вы можете применять правила NSG непосредственно к сетевому интерфейсу. Этот уровень детализации обычно не требуется, но когда у вас есть несколько сетевых интерфейсов для виртуальной машины, имеет смысл применять различные наборы правил к отдельным NIC при необходимости.
Подобно определению ограничений подсети, вы можете применять правила к отдельному NIC. В этом случае вы используете командлет Get-AzNetworkInterface
для получения определенного NIC на заданной виртуальной машине. У этого NIC будет ранее созданный NSG, установленный в свойство NetworkSecurityGroup
.
Что насчет диагностики и анализа трафика через NSG? Читайте дальше, чтобы узнать о журналах потока NSG и как их использовать!
Отладка и устранение неполадок с помощью журналов потока NSG
Во время создания и использования NSG вы можете обнаружить, что вам нужна дополнительная отладка для устранения проблем с нарушенным правилом или анализа трафика. Журналы потока (Flow Logs) – это функция Azure Network Watcher, которая регистрирует информацию о сетевом трафике, проходящем через NSG.
Когда Azure Network Watcher захватывает сетевой трафик, он сохраняет эти данные в учетной записи хранилища Azure. С помощью PowerShell вы можете настроить журналы потока Azure NSG для анализа этой учетной записи хранилища Azure и устранения проблем и отладки ситуации.
Связано: Как скачать и установить инструмент AzCopy
Включение журналов потока NSG состоит из трех основных шагов в PowerShell:
- Зарегистрируйте поставщика
Microsoft.Insights
. - Создайте Рабочее пространство Operational Insights для хранения данных.
- Включите журнал NSG flow log с помощью команды
Set-AzNetworkWatcherConfigFlowLog
.
Для упрощения настройки журналов Azure NSG Flow Logs используйте следующий код PowerShell. Обратите внимание, что этот код создает рабочее пространство Operational Insights и ассоциирует конфигурацию Flog Log с правильной подпиской, рабочим пространством и NSG.
Журналы потока содержат множество различных свойств, как это обычно бывает в журналах брандмауэра. Это включает такие свойства, как исходный и целевой IP-адрес, порты, протоколы и временные метки. Версии 1 и 2 журналов имеют одно существенное отличие: версия 2 имеет концепцию состояния потока. Она обозначает продолжение и завершение потока, а также информацию о пропускной способности трафика.
Следующие шаги
Azure NSG – это мощный инструмент для ограничения и аудита трафика к ресурсу. При правильном использовании вы можете правильно защитить свои ресурсы и инфраструктуру. С возможностью ведения аудита через NSG flow logs и возможностью ограничения NSG для подсетей или сетевых адаптеров у вас есть необходимая гибкость для задания правил по мере необходимости и проверки соответствия всего трафика ожиданиям.