Configurar grupos de segurança de rede no seu Azure Local com PowerShell
Aplica-se a: Azure Local, versões 23H2 e 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016
Este artigo fornece instruções para configurar grupos de segurança de rede (NSGs) para gerenciar o fluxo de tráfego de dados usando o Firewall do Datacenter para Rede Definida por Software (SDN) no Azure Local usando o Windows PowerShell. Você habilita e configura o Datacenter Firewall criando grupos de segurança de rede que são aplicados a uma sub-rede ou a uma interface de rede.
Os scripts de exemplo neste artigo usam comandos do Windows PowerShell exportados do módulo NetworkController . Você também pode usar o Windows Admin Center para configurar e gerenciar grupos de segurança de rede.
Configurar o Datacenter Firewall para permitir todo o tráfego
Depois de implantar o SDN, você deve testar a conectividade de rede básica em seu novo ambiente. Para fazer isso, crie uma regra para o Datacenter Firewall que permita todo o tráfego de rede, sem restrições.
Use as entradas na tabela a seguir para criar um conjunto de regras que permitam todo o tráfego de rede de entrada e saída.
IP de origem | IP de destino | Protocolo | Porta de origem | Porta de destino | Direção | Ação | Prioridade |
---|---|---|---|---|---|---|---|
* | * | Todos | * | * | Interna | Permitir | 100 |
* | * | Todos | * | * | De Saída | Permitir | 110 |
Neste exemplo, você cria um grupo de segurança de rede com duas regras:
- AllowAll_Inbound - Permite que todo o tráfego de rede passe para a interface de rede onde este grupo de segurança de rede está configurado.
- AllowAllOutbound - permite que todo o tráfego passe para fora da interface de rede. Este grupo de segurança de rede, identificado pelo ID de recurso "AllowAll-1" está agora pronto para ser usado em sub-redes virtuais e interfaces de rede.
Pode executar este comando a partir de qualquer computador que tenha acesso ao ponto de extremidade REST do controlador de rede. Primeiro, abra uma sessão do PowerShell. Neste exemplo, use o cmdlet Enter-PSSession e substitua <computer-name>
pelo nome do computador que tem o ponto de extremidade REST do controlador de rede.
Enter-PSSession <computer-name>
Em seguida, execute o seguinte script para criar o grupo de segurança de rede:
$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>
Nota
A referência de comando do Windows PowerShell para o Controlador de Rede está nos cmdlets do Controlador de Rede.
Usar grupos de segurança de rede para limitar o tráfego em uma sub-rede
Neste exemplo, você cria um grupo de segurança de rede que impede que máquinas virtuais (VMs) dentro da sub-rede 192.168.0.0/24 se comuniquem entre si. Esse tipo de grupo de segurança de rede é útil para limitar a capacidade de um invasor se espalhar lateralmente dentro da sub-rede, enquanto ainda permite que as VMs recebam solicitações de fora da sub-rede e se comuniquem com outros serviços em outras sub-redes.
IP de origem | IP de destino | Protocolo | Porta de origem | Porta de destino | Direção | Ação | Prioridade |
---|---|---|---|---|---|---|---|
192.168.0.1 | * | Todos | * | * | Interna | Permitir | 100 |
* | 192.168.0.1 | Todos | * | * | De Saída | Permitir | 101 |
192.168.0.0/24 | * | Todos | * | * | Interna | Bloquear | 102 |
* | 192.168.0.0/24 | Todos | * | * | De Saída | Bloquear | 103 |
* | * | Todos | * | * | Interna | Permitir | 104 |
* | * | Todos | * | * | De Saída | Permitir | 105 |
O grupo de segurança de rede criado pelo script de exemplo abaixo, identificado pelo ID de recurso Subnet-192-168-0-0, agora pode ser aplicado a uma sub-rede de rede virtual que usa o endereço de sub-rede "192.168.0.0/24". Qualquer interface de rede conectada a essa sub-rede de rede virtual obtém automaticamente as regras de grupo de segurança de rede acima aplicadas.
Segue-se um exemplo de script para criar este grupo de segurança de rede utilizando a API REST do controlador de rede:
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
Adicionar um grupo de segurança de rede a uma interface de rede
Depois de criar um grupo de segurança de rede e atribuí-lo a uma sub-rede virtual, convém substituir esse grupo de segurança de rede padrão na sub-rede virtual por um grupo de segurança de rede específico para uma interface de rede individual. A partir do Windows Server 2019 Datacenter, você pode aplicar grupos de segurança de rede específicos diretamente a interfaces de rede conectadas a redes lógicas SDN, além de redes virtuais SDN. Se você tiver grupos de segurança de rede definidos na sub-rede virtual conectada à interface de rede, ambos os grupos de segurança de rede serão aplicados e os grupos de segurança de rede de interface de rede serão priorizados acima dos grupos de segurança de rede de sub-rede virtual.
Neste exemplo, demonstramos como adicionar um grupo de segurança de rede a uma rede virtual.
Gorjeta
Também é possível adicionar um grupo de segurança de rede ao mesmo tempo que você cria a interface de rede.
Obtenha ou crie a interface de rede à qual você adicionará o grupo de segurança de rede.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Obtenha ou crie o grupo de segurança de rede que você adicionará à interface de rede.
$acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
Atribua o grupo de segurança de rede à propriedade AccessControlList da interface de rede.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
Adicione a interface de rede no controlador de rede.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Remover um grupo de segurança de rede de uma interface de rede
Neste exemplo, mostramos como remover um grupo de segurança de rede de uma interface de rede. A remoção de um grupo de segurança de rede aplica o conjunto padrão de regras à interface de rede. O conjunto de regras padrão permite todo o tráfego de saída, mas bloqueia todo o tráfego de entrada. Se quiser permitir todo o tráfego de entrada, siga o exemplo anterior para adicionar um grupo de segurança de rede que permita todo o tráfego de entrada e de saída.
Obtenha a interface de rede da qual você removerá o grupo de segurança de rede.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Atribua $null à propriedade AccessControlList do ipConfiguration.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $null
Adicione o objeto de interface de rede no controlador de rede.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Auditoria de firewall
O recurso de auditoria de firewall para o Datacenter Firewall registra qualquer fluxo processado por regras de firewall SDN. Todos os grupos de segurança de rede com registro em log habilitado são registrados. Os arquivos de log devem estar em uma sintaxe consistente com os logs de fluxo do Inspetor de Rede do Azure. Esses logs podem ser usados para diagnósticos ou arquivados para análise posterior.
Aqui está um script de exemplo para habilitar a auditoria de firewall em máquinas host. Atualize as variáveis no início e execute-as em uma instância Local do Azure com o Controlador de Rede implantado:
$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
}
Uma vez habilitado, um novo arquivo aparece no diretório especificado em cada host cerca de uma vez por hora. Você deve processar periodicamente esses arquivos e removê-los dos hosts. O arquivo atual tem comprimento zero e fica bloqueado até ser liberado na marca da próxima hora:
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
Esses arquivos contêm uma sequência de eventos de fluxo, por exemplo:
{
"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"
},
Observe que o registro em log ocorre apenas para regras que têm o registro em log definido como Habilitado, por exemplo:
{
"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
}
]
}
}
Próximos passos
Para obter informações relacionadas, consulte:
- Visão geral do Firewall do Datacenter.
- Visão geral do controlador de rede.
- SDN no Azure Local e no Windows Server.