Configurare i gruppi di sicurezza di rete in Azure Stack HCI con PowerShell
Si applica a: Azure Stack HCI, versioni 23H2 e 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016
Questo articolo fornisce istruzioni per la configurazione dei gruppi di sicurezza di rete (NSG) per gestire il flusso del traffico di dati usando il firewall del data center per la rete SDN (Software Defined Networking) in Azure Stack HCI usando Windows PowerShell. È possibile abilitare e configurare Il firewall del data center creando gruppi di sicurezza di rete che vengono applicati a una subnet o a un'interfaccia di rete.
Gli script di esempio in questo articolo usano i comandi Windows PowerShell esportati dal modulo NetworkController. È anche possibile usare Windows Admin Center per configurare e gestire i gruppi di sicurezza di rete.
Configurare il firewall del data center per consentire tutto il traffico
Dopo aver distribuito SDN, è necessario testare la connettività di rete di base nel nuovo ambiente. A tale scopo, creare una regola per Il firewall del data center che consenta tutto il traffico di rete, senza restrizioni.
Usare le voci nella tabella seguente per creare un set di regole che consentano tutto il traffico di rete in ingresso e in uscita.
IP di origine | IP di destinazione | Protocollo | Porta di origine | Porta di destinazione | Direzione | Azione | Priorità |
---|---|---|---|---|---|---|---|
* | * | Tutti | * | * | In ingresso | Allow | 100 |
* | * | Tutti | * | * | In uscita | Allow | 110 |
In questo esempio viene creato un gruppo di sicurezza di rete con due regole:
- AllowAll_Inbound : consente a tutto il traffico di rete di passare all'interfaccia di rete in cui è configurato questo gruppo di sicurezza di rete.
- AllowAllOutbound : consente a tutto il traffico di passare dall'interfaccia di rete. Questo gruppo di sicurezza di rete, identificato dall'ID risorsa "AllowAll-1" è ora pronto per essere usato nelle subnet virtuali e nelle interfacce di rete.
È possibile eseguire questo comando da qualsiasi computer che abbia accesso all'endpoint REST del controller di rete. Aprire prima di tutto una sessione di PowerShell. In questo esempio usare il cmdlet Enter-PSSession e sostituire <computer-name>
con il nome del computer con l'endpoint REST del controller di rete.
Enter-PSSession <computer-name>
Eseguire quindi lo script seguente per creare il gruppo di sicurezza di rete:
$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
Il riferimento al comando Windows PowerShell per Controller di rete si trova nei cmdlet del controller di rete.
Usare i gruppi di sicurezza di rete per limitare il traffico in una subnet
In questo esempio si crea un gruppo di sicurezza di rete che impedisce alle macchine virtuali all'interno della subnet 192.168.0.0/24 di comunicare tra loro. Questo tipo di gruppo di sicurezza di rete è utile per limitare la capacità di un utente malintenzionato di estendersi successivamente all'interno della subnet, consentendo comunque alle macchine virtuali di ricevere richieste dall'esterno della subnet e di comunicare con altri servizi in altre subnet.
IP di origine | IP di destinazione | Protocollo | Porta di origine | Porta di destinazione | Direzione | Azione | Priorità |
---|---|---|---|---|---|---|---|
192.168.0.1 | * | Tutti | * | * | In ingresso | Allow | 100 |
* | 192.168.0.1 | Tutti | * | * | In uscita | Allow | 101 |
192.168.0.0/24 | * | Tutti | * | * | In ingresso | Blocca | 102 |
* | 192.168.0.0/24 | Tutti | * | * | In uscita | Blocca | 103 |
* | * | Tutti | * | * | In ingresso | Allow | 104 |
* | * | Tutti | * | * | In uscita | Allow | 105 |
Il gruppo di sicurezza di rete creato dallo script di esempio seguente, identificato dall'ID risorsa Subnet-192-168-0-0, può ora essere applicato a una subnet di rete virtuale che usa l'indirizzo della subnet "192.168.0.0/24". Qualsiasi interfaccia di rete collegata a tale subnet di rete virtuale ottiene automaticamente le regole del gruppo di sicurezza di rete precedenti applicate.
Di seguito è riportato uno script di esempio per creare questo gruppo di sicurezza di rete usando l'API REST del controller di rete:
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
Aggiungere un gruppo di sicurezza di rete a un'interfaccia di rete
Dopo aver creato un gruppo di sicurezza di rete e averlo assegnato a una subnet virtuale, è possibile eseguire l'override di tale gruppo di sicurezza di rete predefinito nella subnet virtuale con un gruppo di sicurezza di rete specifico per una singola interfaccia di rete. A partire da Windows Server 2019 Datacenter, è possibile applicare gruppi di sicurezza di rete specifici direttamente alle interfacce di rete collegate alle reti logiche SDN, oltre alle reti virtuali SDN. Se sono impostati gruppi di sicurezza di rete nella subnet virtuale connessa all'interfaccia di rete, vengono applicati entrambi i gruppi di sicurezza di rete e i gruppi di sicurezza di rete dell'interfaccia di rete sono classificati in ordine di priorità sopra i gruppi di sicurezza di rete della subnet virtuale.
In questo esempio viene illustrato come aggiungere un gruppo di sicurezza di rete a una rete virtuale.
Suggerimento
È anche possibile aggiungere un gruppo di sicurezza di rete contemporaneamente alla creazione dell'interfaccia di rete.
Ottenere o creare l'interfaccia di rete a cui si aggiungerà il gruppo di sicurezza di rete.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Ottenere o creare il gruppo di sicurezza di rete che verrà aggiunto all'interfaccia di rete.
$acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
Assegnare il gruppo di sicurezza di rete alla proprietà AccessControlList dell'interfaccia di rete.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
Aggiungere l'interfaccia di rete in Controller di rete.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Rimuovere un gruppo di sicurezza di rete da un'interfaccia di rete
In questo esempio viene illustrato come rimuovere un gruppo di sicurezza di rete da un'interfaccia di rete. La rimozione di un gruppo di sicurezza di rete applica il set predefinito di regole all'interfaccia di rete. Il set predefinito di regole consente tutto il traffico in uscita, ma blocca tutto il traffico in ingresso. Se si vuole consentire tutto il traffico in ingresso, è necessario seguire l'esempio precedente per aggiungere un gruppo di sicurezza di rete che consenta tutto il traffico in ingresso e tutto il traffico in uscita.
Ottenere l'interfaccia di rete da cui si rimuoverà il gruppo di sicurezza di rete.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Assegnare $null alla proprietà AccessControlList di ipConfiguration.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $null
Aggiungere l'oggetto interfaccia di rete in Controller di rete.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Controllo del firewall
La funzionalità di controllo del firewall per il firewall datacenter registra qualsiasi flusso elaborato dalle regole del firewall SDN. Tutti i gruppi di sicurezza di rete che hanno abilitato la registrazione vengono registrati. I file di log devono trovarsi in una sintassi coerente con i log del flusso di Azure Network Watcher. Questi log possono essere usati per la diagnostica o l'archiviazione per un'analisi successiva.
Ecco uno script di esempio per abilitare il controllo del firewall nei server host. Aggiornare le variabili all'inizio ed eseguire questa operazione in un cluster Azure Stack HCI con il controller di rete distribuito:
$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
}
Dopo aver abilitato, un nuovo file viene visualizzato nella directory specificata in ogni host circa una volta all'ora. È consigliabile elaborare periodicamente questi file e rimuoverli dagli host. Il file corrente ha lunghezza zero e viene bloccato fino a quando non viene scaricato al segno dell'ora successiva:
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
Questi file contengono una sequenza di eventi di flusso, ad esempio:
{
"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"
},
Nota, la registrazione viene eseguita solo per le regole che dispongono di Registrazione impostata su Abilitato, ad esempio:
{
"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
}
]
}
}
Passaggi successivi
Per informazioni correlate, vedere: