Configuración de grupos de seguridad de red en Azure Stack HCI con PowerShell
Se aplica a: Azure Stack HCI, versiones 23H2 y 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016
En este artículo se proporcionan instrucciones para configurar grupos de seguridad de red (NSG) para administrar el flujo de tráfico de datos mediante Datacenter Firewall para redes definidas por software (SDN) en Azure Stack HCI mediante Windows PowerShell. Para habilitar y configurar El firewall del centro de datos, cree grupos de seguridad de red que se apliquen a una subred o a una interfaz de red.
Los scripts de ejemplo de este artículo usan Windows PowerShell comandos exportados desde el módulo NetworkController. También puede usar Windows Admin Center para configurar y administrar grupos de seguridad de red.
Configuración del firewall del centro de datos para permitir todo el tráfico
Una vez que implemente SDN, debe probar la conectividad de red básica en el nuevo entorno. Para ello, cree una regla para el firewall del centro de datos que permita todo el tráfico de red, sin restricciones.
Use las entradas de la tabla siguiente para crear un conjunto de reglas que permitan todo el tráfico de red entrante y saliente.
IP de origen | IP de destino | Protocolo | Puerto de origen | Puerto de destino | Dirección | Acción | Priority |
---|---|---|---|---|---|---|---|
* | * | All | * | * | Entrada | Allow | 100 |
* | * | All | * | * | Salida | Allow | 110 |
En este ejemplo, creará un grupo de seguridad de red con dos reglas:
- AllowAll_Inbound : permite que todo el tráfico de red pase a la interfaz de red donde está configurado este grupo de seguridad de red.
- AllowAllOutbound: permite que todo el tráfico pase fuera de la interfaz de red. Este grupo de seguridad de red, identificado por el identificador de recurso "AllowAll-1" ya está listo para usarse en subredes virtuales e interfaces de red.
Puede ejecutar este comando desde cualquier equipo que tenga acceso al punto de conexión REST de controladora de red. En primer lugar, abra una sesión de PowerShell. En este ejemplo, use el cmdlet Enter-PSSession y reemplace <computer-name>
por el nombre del equipo que tiene el punto de conexión REST de controladora de red.
Enter-PSSession <computer-name>
A continuación, ejecute el siguiente script para crear el grupo de seguridad de red:
$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
La referencia del comando Windows PowerShell para controladora de red se encuentra en los cmdlets de controladora de red.
Uso de grupos de seguridad de red para limitar el tráfico en una subred
En este ejemplo, creará un grupo de seguridad de red que impide que las máquinas virtuales (VM) dentro de la subred 192.168.0.0/24 se comuniquen entre sí. Este tipo de grupo de seguridad de red es útil para limitar la capacidad de un atacante de distribuir lateralmente dentro de la subred, a la vez que permite que las máquinas virtuales reciban solicitudes desde fuera de la subred y se comuniquen con otros servicios en otras subredes.
IP de origen | IP de destino | Protocolo | Puerto de origen | Puerto de destino | Dirección | Acción | Priority |
---|---|---|---|---|---|---|---|
192.168.0.1 | * | All | * | * | Entrada | Allow | 100 |
* | 192.168.0.1 | All | * | * | Salida | Allow | 101 |
192.168.0.0/24 | * | All | * | * | Entrada | Block | 102 |
* | 192.168.0.0/24 | All | * | * | Salida | Block | 103 |
* | * | All | * | * | Entrada | Allow | 104 |
* | * | All | * | * | Salida | Allow | 105 |
El grupo de seguridad de red creado por el script de ejemplo siguiente, identificado por la subred de identificador de recurso Subnet-192-168-0-0, ahora se puede aplicar a una subred de red virtual que use la dirección de subred "192.168.0.0/24". Cualquier interfaz de red conectada a esa subred de red virtual obtiene automáticamente las reglas de grupo de seguridad de red anteriores aplicadas.
A continuación se muestra un script de ejemplo para crear este grupo de seguridad de red mediante la API REST de controladora de red:
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
Adición de un grupo de seguridad de red a una interfaz de red
Una vez que haya creado un grupo de seguridad de red y lo haya asignado a una subred virtual, es posible que desee invalidar ese grupo de seguridad de red predeterminado en la subred virtual con un grupo de seguridad de red específico para una interfaz de red individual. A partir de Windows Server 2019 Datacenter, puede aplicar grupos de seguridad de red específicos directamente a interfaces de red conectadas a redes lógicas SDN, además de redes virtuales sdN. Si tiene grupos de seguridad de red establecidos en la subred virtual conectada a la interfaz de red, se aplican ambos grupos de seguridad de red y se priorizan los grupos de seguridad de red de la interfaz de red por encima de los grupos de seguridad de red de subred virtual.
En este ejemplo, se muestra cómo agregar un grupo de seguridad de red a una red virtual.
Sugerencia
También es posible agregar un grupo de seguridad de red al mismo tiempo que se crea la interfaz de red.
Obtenga o cree la interfaz de red a la que agregará el grupo de seguridad de red.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Obtenga o cree el grupo de seguridad de red que agregará a la interfaz de red.
$acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
Asigne el grupo de seguridad de red a la propiedad AccessControlList de la interfaz de red.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
Agregue la interfaz de red en la Controladora de red.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Eliminación de un grupo de seguridad de red de una interfaz de red
En este ejemplo, se muestra cómo quitar un grupo de seguridad de red de una interfaz de red. Al quitar un grupo de seguridad de red, se aplica el conjunto predeterminado de reglas a la interfaz de red. El conjunto predeterminado de reglas permite todo el tráfico saliente, pero bloquea el entrante. Si desea permitir todo el tráfico entrante, debe seguir el ejemplo anterior para agregar un grupo de seguridad de red que permita todo el tráfico entrante y saliente.
Obtenga la interfaz de red de la que quitará el grupo de seguridad de red.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Asigne $null a la propiedad AccessControlList de ipConfiguration.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $null
Agregue el objeto de la interfaz de red en la Controladora de red.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Auditoría de firewall
La funcionalidad de auditoría de firewall para datacenter Firewall registra cualquier flujo procesado por las reglas de firewall de SDN. Se registran todos los grupos de seguridad de red que tienen habilitado el registro. Los archivos de registro deben estar en una sintaxis coherente con los registros de flujo de Azure Network Watcher. Estos registros se pueden usar para realizar diagnósticos o archivar para su posterior análisis.
Este es un script de ejemplo para habilitar la auditoría de firewall en los servidores host. Actualice las variables del principio y ejecútelo en un clúster de Azure Stack HCI con la Controladora de red implementada:
$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
}
Una vez habilitado, aparece un nuevo archivo en el directorio especificado de cada host aproximadamente una vez por hora. Debe procesar periódicamente estos archivos y quitarlos de los hosts. El archivo actual tiene una longitud igual a cero y se bloquea hasta que se vacía en la marca de hora siguiente:
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
Estos archivos contienen una secuencia de eventos de flujo; por ejemplo:
{
"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"
},
Tenga en cuenta que el registro solo tiene lugar para las reglas que tienen el valor Logging definido como Enabled; por ejemplo:
{
"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
}
]
}
}
Pasos siguientes
Para obtener información relacionada, consulte: