Konfigurera nätverkssäkerhetsgrupper på din Azure Stack HCI med PowerShell
Gäller för: Azure Stack HCI, versionerna 23H2 och 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016
Den här artikeln innehåller instruktioner för hur du konfigurerar nätverkssäkerhetsgrupper (NSG:er) för att hantera datatrafikflöden med datacenterbrandväggen för programvarudefinierade nätverk (SDN) i Azure Stack HCI med hjälp av Windows PowerShell. Du aktiverar och konfigurerar datacenterbrandväggen genom att skapa nätverkssäkerhetsgrupper som tillämpas på ett undernät eller ett nätverksgränssnitt.
Exempelskripten i den här artikeln använder Windows PowerShell kommandon som exporteras från NetworkController-modulen. Du kan också använda Windows Admin Center för att konfigurera och hantera nätverkssäkerhetsgrupper.
Konfigurera datacenterbrandväggen så att all trafik tillåts
När du har distribuerat SDN bör du testa grundläggande nätverksanslutningar i den nya miljön. För att åstadkomma detta skapar du en regel för datacenterbrandväggen som tillåter all nätverkstrafik, utan begränsning.
Använd posterna i följande tabell för att skapa en uppsättning regler som tillåter all inkommande och utgående nätverkstrafik.
Käll-IP-adress | Mål-IP-adress | Protokoll | Källport | Målport | Riktning | Åtgärd | Prioritet |
---|---|---|---|---|---|---|---|
* | * | Alla | * | * | Inkommande | Tillåt | 100 |
* | * | Alla | * | * | Utgående | Tillåt | 110 |
I det här exemplet skapar du en nätverkssäkerhetsgrupp med två regler:
- AllowAll_Inbound – tillåter att all nätverkstrafik skickas till nätverksgränssnittet där den här nätverkssäkerhetsgruppen är konfigurerad.
- AllowAllOutbound – tillåter att all trafik skickas ut från nätverksgränssnittet. Den här nätverkssäkerhetsgruppen som identifieras av resurs-ID:t "AllowAll-1" är nu redo att användas i virtuella undernät och nätverksgränssnitt.
Du kan köra det här kommandot från alla datorer som har åtkomst till REST-slutpunkten för nätverksstyrenheten. Öppna först en PowerShell-session. I det här exemplet använder du cmdleten Enter-PSSession och ersätter <computer-name>
med namnet på den dator som har REST-slutpunkten för nätverksstyrenheten.
Enter-PSSession <computer-name>
Kör sedan följande skript för att skapa nätverkssäkerhetsgruppen:
$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>
Anteckning
Kommandoreferensen Windows PowerShell för nätverksstyrenheten finns i cmdletarna för nätverksstyrenheten.
Använda nätverkssäkerhetsgrupper för att begränsa trafiken i ett undernät
I det här exemplet skapar du en nätverkssäkerhetsgrupp som förhindrar att virtuella datorer (VM) i undernätet 192.168.0.0/24 kommunicerar med varandra. Den här typen av nätverkssäkerhetsgrupp är användbar för att begränsa angriparens möjlighet att sprida sig i sidled i undernätet, samtidigt som de virtuella datorerna kan ta emot begäranden utanför undernätet och kommunicera med andra tjänster i andra undernät.
Käll-IP-adress | Mål-IP-adress | Protokoll | Källport | Målport | Riktning | Åtgärd | Prioritet |
---|---|---|---|---|---|---|---|
192.168.0.1 | * | Alla | * | * | Inkommande | Tillåt | 100 |
* | 192.168.0.1 | Alla | * | * | Utgående | Tillåt | 101 |
192.168.0.0/24 | * | Alla | * | * | Inkommande | Blockera | 102 |
* | 192.168.0.0/24 | Alla | * | * | Utgående | Blockera | 103 |
* | * | Alla | * | * | Inkommande | Tillåt | 104 |
* | * | Alla | * | * | Utgående | Tillåt | 105 |
Nätverkssäkerhetsgruppen som skapas av exempelskriptet nedan, identifierad av resurs-ID-undernätet-192-168-0-0, kan nu tillämpas på ett virtuellt nätverksundernät som använder undernätsadressen "192.168.0.0/24". Alla nätverksgränssnitt som är anslutna till det virtuella nätverksundernätet får automatiskt ovanstående regler för nätverkssäkerhetsgruppen tillämpade.
Följande är ett exempelskript för att skapa den här nätverkssäkerhetsgruppen med hjälp av REST-API:et för nätverksstyrenheten:
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
Lägga till en nätverkssäkerhetsgrupp i ett nätverksgränssnitt
När du har skapat en nätverkssäkerhetsgrupp och tilldelat den till ett virtuellt undernät kanske du vill åsidosätta standardnätverkssäkerhetsgruppen i det virtuella undernätet med en specifik nätverkssäkerhetsgrupp för ett enskilt nätverksgränssnitt. Från och med Windows Server 2019 Datacenter kan du tillämpa specifika nätverkssäkerhetsgrupper direkt på nätverksgränssnitt som är kopplade till logiska SDN-nätverk, förutom virtuella SDN-nätverk. Om du har angett nätverkssäkerhetsgrupper i det virtuella undernätet som är anslutna till nätverksgränssnittet tillämpas båda nätverkssäkerhetsgrupperna och nätverkssäkerhetsgrupperna för nätverksgränssnittet prioriteras ovanför säkerhetsgrupperna för det virtuella undernätets nätverk.
I det här exemplet visar vi hur du lägger till en nätverkssäkerhetsgrupp i ett virtuellt nätverk.
Tips
Du kan också lägga till en nätverkssäkerhetsgrupp samtidigt som du skapar nätverksgränssnittet.
Hämta eller skapa det nätverksgränssnitt som du lägger till nätverkssäkerhetsgruppen i.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Hämta eller skapa den nätverkssäkerhetsgrupp som du ska lägga till i nätverksgränssnittet.
$acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
Tilldela nätverkssäkerhetsgruppen till egenskapen AccessControlList för nätverksgränssnittet.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
Lägg till nätverksgränssnittet i nätverksstyrenheten.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Ta bort en nätverkssäkerhetsgrupp från ett nätverksgränssnitt
I det här exemplet visar vi hur du tar bort en nätverkssäkerhetsgrupp från ett nätverksgränssnitt. Om du tar bort en nätverkssäkerhetsgrupp tillämpas standarduppsättningen med regler på nätverksgränssnittet. Standarduppsättningen med regler tillåter all utgående trafik men blockerar all inkommande trafik. Om du vill tillåta all inkommande trafik måste du följa föregående exempel för att lägga till en nätverkssäkerhetsgrupp som tillåter all inkommande och all utgående trafik.
Hämta nätverksgränssnittet som du tar bort nätverkssäkerhetsgruppen från.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Tilldela $null till egenskapen AccessControlList för ipConfiguration.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $null
Lägg till nätverksgränssnittsobjektet i nätverksstyrenheten.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Brandväggsgranskning
Funktionen för brandväggsgranskning för datacenterbrandväggen registrerar alla flöden som bearbetas av SDN-brandväggsregler. Alla nätverkssäkerhetsgrupper som har loggning aktiverat registreras. Loggfilerna måste finnas i en syntax som överensstämmer med Azure Network Watcher flödesloggar. Dessa loggar kan användas för diagnostik eller arkiveras för senare analys.
Här är ett exempelskript för att aktivera brandväggsgranskning på värdservrarna. Uppdatera variablerna i början och kör detta på ett Azure Stack HCI-kluster med nätverksstyrenheten distribuerad:
$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
}
När den har aktiverats visas en ny fil i den angivna katalogen på varje värd ungefär en gång per timme. Du bör regelbundet bearbeta dessa filer och ta bort dem från värdarna. Den aktuella filen har noll längd och är låst tills den har tömts vid nästa timmarkering:
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
Dessa filer innehåller en sekvens med flödeshändelser, till exempel:
{
"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"
},
Observera att loggning endast sker för regler som har loggning inställd på Aktiverad, till exempel:
{
"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
}
]
}
}
Nästa steg
Relaterad information finns i: