Настройка групп безопасности сети в локальной среде Azure с помощью PowerShell
Применимо к: Локальные версии Azure, версии 23H2 и 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016
В этой статье приведены инструкции по настройке групп безопасности сети (NSG) для управления потоком трафика с помощью брандмауэра центра обработки данных для программно-определяемой сети (SDN) в Azure Local с помощью Windows PowerShell. Включите и настройте брандмауэр центра обработки данных, создав группы безопасности сети, которые применяются к подсети или сетевому интерфейсу.
В примерах скриптов в этой статье используются команды Windows PowerShell, экспортированные из модуля NetworkController . Вы также можете использовать Windows Admin Center для настройки групп безопасности сети и управления ими.
Настройка брандмауэра центра обработки данных для разрешения всего трафика
После развертывания SDN необходимо проверить базовое сетевое подключение в новой среде. Для этого создайте правило для брандмауэра Центра обработки данных, которое разрешает весь сетевой трафик без ограничений.
Используйте записи в следующей таблице, чтобы создать набор правил, разрешающих весь входящий и исходящий сетевой трафик.
Исходный IP-адрес | IP-адрес назначения | Протокол | Исходный порт | Конечный порт | Направление | Действие | Приоритет |
---|---|---|---|---|---|---|---|
* | * | Все | * | * | Входящий трафик | Разрешить | 100 |
* | * | Все | * | * | Исходящие | Разрешить | 110 |
В этом примере создается группа безопасности сети с двумя правилами:
- AllowAll_Inbound — позволяет передавать весь сетевой трафик в сетевой интерфейс, в котором настроена эта группа безопасности сети.
- AllowAllOutbound — позволяет передавать весь трафик из сетевого интерфейса. Эта группа безопасности сети, определяемая идентификатором ресурса AllowAll-1, теперь готова к использованию в виртуальных подсетях и сетевых интерфейсах.
Эту команду можно выполнить с любого компьютера, имеющего доступ к конечной точке REST сетевого контроллера. Сначала откройте сеанс PowerShell. В этом примере используйте командлет ВВОД-PSSession и замените <computer-name>
на имя компьютера с конечной точкой REST сетевого контроллера.
Enter-PSSession <computer-name>
Затем выполните следующий сценарий, чтобы создать группу безопасности сети:
$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "100"
$ruleproperties.Type = "Inbound"
$ruleproperties.Logging = "Enabled"
$aclrule1 = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule1.Properties = $ruleproperties
$aclrule1.ResourceId = "AllowAll_Inbound"
$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "110"
$ruleproperties.Type = "Outbound"
$ruleproperties.Logging = "Enabled"
$aclrule2 = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule2.Properties = $ruleproperties
$aclrule2.ResourceId = "AllowAll_Outbound"
$acllistproperties = new-object Microsoft.Windows.NetworkController.AccessControlListProperties
$acllistproperties.AclRules = @($aclrule1, $aclrule2)
New-NetworkControllerAccessControlList -ResourceId "AllowAll" -Properties $acllistproperties -ConnectionUri <NC REST FQDN>
Примечание.
Ссылка на команду Windows PowerShell для сетевого контроллера находится в командлетах сетевого контроллера.
Использование групп безопасности сети для ограничения трафика в подсети
В этом примере создается группа безопасности сети, которая предотвращает взаимодействие виртуальных машин в подсети 192.168.0.0/24. Этот тип группы безопасности сети полезен для ограничения возможности злоумышленника распространяться в подсети по-прежнему, позволяя виртуальным машинам получать запросы из-за пределов подсети и взаимодействовать с другими службами в других подсетях.
Исходный IP-адрес | IP-адрес назначения | Протокол | Исходный порт | Конечный порт | Направление | Действие | Приоритет |
---|---|---|---|---|---|---|---|
192.168.0.1 | * | Все | * | * | Входящий трафик | Разрешить | 100 |
* | 192.168.0.1 | Все | * | * | Исходящие | Разрешить | 101 |
192.168.0.0/24 | * | Все | * | * | Входящий трафик | Блокировка | 102 |
* | 192.168.0.0/24 | Все | * | * | Исходящие | Блокировка | 103 |
* | * | Все | * | * | Входящий трафик | Разрешить | 104 |
* | * | Все | * | * | Исходящие | Разрешить | 105 |
Группа безопасности сети, созданная приведенным ниже скриптом, идентифицируемая подсетью идентификатора ресурса-192-168-0-0, теперь может применяться к подсети виртуальной сети, которая использует адрес подсети "192.168.0.0/24". Любой сетевой интерфейс, подключенный к этой подсети виртуальной сети, автоматически получает указанные выше правила группы безопасности сети.
Ниже приведен пример скрипта для создания этой группы безопасности сети с помощью REST API сетевого контроллера:
import-module networkcontroller
$ncURI = "https://mync.contoso.local"
$aclrules = @()
$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "192.168.0.1"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "100"
$ruleproperties.Type = "Inbound"
$ruleproperties.Logging = "Enabled"
$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "AllowRouter_Inbound"
$aclrules += $aclrule
$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "192.168.0.1"
$ruleproperties.Priority = "101"
$ruleproperties.Type = "Outbound"
$ruleproperties.Logging = "Enabled"
$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "AllowRouter_Outbound"
$aclrules += $aclrule
$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Deny"
$ruleproperties.SourceAddressPrefix = "192.168.0.0/24"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "102"
$ruleproperties.Type = "Inbound"
$ruleproperties.Logging = "Enabled"
$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "DenySubnet_Inbound"
$aclrules += $aclrule
$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Deny"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "192.168.0.0/24"
$ruleproperties.Priority = "103"
$ruleproperties.Type = "Outbound"
$ruleproperties.Logging = "Enabled"
$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "DenySubnet_Outbound"
$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "104"
$ruleproperties.Type = "Inbound"
$ruleproperties.Logging = "Enabled"
$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "AllowAll_Inbound"
$aclrules += $aclrule
$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "105"
$ruleproperties.Type = "Outbound"
$ruleproperties.Logging = "Enabled"
$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "AllowAll_Outbound"
$aclrules += $aclrule
$acllistproperties = new-object Microsoft.Windows.NetworkController.AccessControlListProperties
$acllistproperties.AclRules = $aclrules
New-NetworkControllerAccessControlList -ResourceId "Subnet-192-168-0-0" -Properties $acllistproperties -ConnectionUri $ncURI
Добавление группы безопасности сети в сетевой интерфейс
Создав группу безопасности сети и назначив ее виртуальной подсети, может потребоваться переопределить группу безопасности сети по умолчанию в виртуальной подсети с определенной группой безопасности сети для отдельного сетевого интерфейса. Начиная с Windows Server 2019 Datacenter, вы можете применять определенные группы безопасности сети непосредственно к сетевым интерфейсам, подключенным к логическим сетям SDN, помимо виртуальных сетей SDN. Если у вас есть группы безопасности сети, установленные в виртуальной подсети, подключенной к сетевому интерфейсу, применяются обе группы безопасности сети, а группы безопасности сети сетевого интерфейса являются приоритетными над группами безопасности сети виртуальной подсети.
В этом примере показано, как добавить группу безопасности сети в виртуальную сеть.
Совет
Кроме того, можно добавить группу безопасности сети одновременно, когда вы создаете сетевой интерфейс.
Получите или создайте сетевой интерфейс, в который вы добавите группу безопасности сети.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Получите или создайте группу безопасности сети, которую вы добавите в сетевой интерфейс.
$acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
Назначьте группу безопасности сети свойству AccessControlList сетевого интерфейса.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
Добавьте сетевой интерфейс в сетевой контроллер.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Удаление группы безопасности сети из сетевого интерфейса
В этом примере показано, как удалить группу безопасности сети из сетевого интерфейса. Удаление группы безопасности сети применяет набор правил по умолчанию к сетевому интерфейсу. Набор правил по умолчанию разрешает весь исходящий трафик, но блокирует весь входящий трафик. Если вы хотите разрешить весь входящий трафик, необходимо следовать предыдущему примеру , чтобы добавить группу безопасности сети, которая разрешает весь входящий и весь исходящий трафик.
Получите сетевой интерфейс, из которого вы удалите группу безопасности сети.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Назначьте $null свойству AccessControlList ipConfiguration.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $null
Добавьте объект сетевого интерфейса в сетевой контроллер.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Аудит брандмауэра
Возможность аудита брандмауэра для брандмауэра центра обработки данных записывает любой поток, обработанный правилами брандмауэра SDN. Записываются все группы безопасности сети с включенным ведением журнала. Файлы журналов должны находиться в синтаксисе, который соответствует журналам потоков Azure Наблюдатель за сетями. Эти журналы можно использовать для диагностика или архивирования для последующего анализа.
Ниже приведен пример скрипта для включения аудита брандмауэра на хост-компьютерах. Обновите переменные в начале и запустите его в локальном экземпляре Azure с развернутым сетевым контроллером :
$logpath = "C:\test\log1"
$servers = @("sa18n22-2", "sa18n22-3", "sa18n22-4")
$uri = "https://sa18n22sdn.sa18.nttest.microsoft.com"
# Create log directories on the hosts
invoke-command -Computername $servers {
param(
$Path
)
mkdir $path -force
} -argumentlist $LogPath
# Set firewall auditing settings on Network Controller
$AuditProperties = new-object Microsoft.Windows.NetworkController.AuditingSettingsProperties
$AuditProperties.OutputDirectory = $logpath
set-networkcontrollerauditingsettingsconfiguration -connectionuri $uri -properties $AuditProperties -force | out-null
# Enable logging on each server
$servers = get-networkcontrollerserver -connectionuri $uri
foreach ($s in $servers) {
$s.properties.AuditingEnabled = @("Firewall")
new-networkcontrollerserver -connectionuri $uri -resourceid $s.resourceid -properties $s.properties -force | out-null
}
После включения новый файл появится в указанном каталоге на каждом узле примерно один раз в час. Эти файлы следует периодически обрабатывать и удалять из узлов. Текущий файл имеет нулевую длину и блокируется до очистки на следующей часовой отметке:
PS C:\test\log1> dir
Directory: C:\test\log1
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 7/19/2018 6:28 AM 17055 SdnFirewallAuditing.d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a.20180719TL122803093.json
-a---- 7/19/2018 7:28 AM 7880 SdnFirewallAuditing.d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a.20180719TL132803173.json
-a---- 7/19/2018 8:28 AM 7867 SdnFirewallAuditing.d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a.20180719TL142803264.json
-a---- 7/19/2018 9:28 AM 10949 SdnFirewallAuditing.d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a.20180719TL152803360.json
-a---- 7/19/2018 9:28 AM 0 SdnFirewallAuditing.d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a.20180719TL162803464.json
Эти файлы содержат последовательность событий потока, например:
{
"records": [
{
"properties":{
"Version":"1.0",
"flows":[
{
"flows":[
{
"flowTuples":["1531963580,192.122.0.22,192.122.255.255,138,138,U,I,A"],
"portId":"9",
"portName":"7290436D-0422-498A-8EB8-C6CF5115DACE"
}
],
"rule":"Allow_Inbound"
}
]
},
"operationName":"NetworkSecurityGroupFlowEvents",
"resourceId":"a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
"time":"20180719:L012620622",
"category":"NetworkSecurityGroupFlowEvent",
"systemId":"d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a"
},
Обратите внимание, что ведение журнала выполняется только для правил, для которых задано значение "Включено", например:
{
"Tags": null,
"ResourceRef": "/accessControlLists/AllowAll",
"InstanceId": "4a63e1a5-3264-4986-9a59-4e77a8b107fa",
"Etag": "W/\"1535a780-0fc8-4bba-a15a-093ecac9b88b\"",
"ResourceMetadata": null,
"ResourceId": "AllowAll",
"Properties": {
"ConfigurationState": null,
"ProvisioningState": "Succeeded",
"AclRules": [
{
"ResourceMetadata": null,
"ResourceRef": "/accessControlLists/AllowAll/aclRules/AllowAll_Inbound",
"InstanceId": "ba8710a8-0f01-422b-9038-d1f2390645d7",
"Etag": "W/\"1535a780-0fc8-4bba-a15a-093ecac9b88b\"",
"ResourceId": "AllowAll_Inbound",
"Properties": {
"Protocol": "All",
"SourcePortRange": "0-65535",
"DestinationPortRange": "0-65535",
"Action": "Allow",
"SourceAddressPrefix": "*",
"DestinationAddressPrefix": "*",
"Priority": "101",
"Description": null,
"Type": "Inbound",
"Logging": "Enabled",
"ProvisioningState": "Succeeded"
}
},
{
"ResourceMetadata": null,
"ResourceRef": "/accessControlLists/AllowAll/aclRules/AllowAll_Outbound",
"InstanceId": "068264c6-2186-4dbc-bbe7-f504c6f47fa8",
"Etag": "W/\"1535a780-0fc8-4bba-a15a-093ecac9b88b\"",
"ResourceId": "AllowAll_Outbound",
"Properties": {
"Protocol": "All",
"SourcePortRange": "0-65535",
"DestinationPortRange": "0-65535",
"Action": "Allow",
"SourceAddressPrefix": "*",
"DestinationAddressPrefix": "*",
"Priority": "110",
"Description": null,
"Type": "Outbound",
"Logging": "Enabled",
"ProvisioningState": "Succeeded"
}
}
],
"IpConfigurations": [
],
"Subnets": [
{
"ResourceMetadata": null,
"ResourceRef": "/virtualNetworks/10_0_1_0/subnets/Subnet1",
"InstanceId": "00000000-0000-0000-0000-000000000000",
"Etag": null,
"ResourceId": null,
"Properties": null
}
]
}
}
Следующие шаги
Связанные сведения:
- Обзор брандмауэра центра обработки данных.
- Обзор сетевого контроллера.
- SDN в локальной среде Azure и Windows Server.