Konfigurera nätverkssäkerhetsgrupper i Azure Local med PowerShell
Gäller för: Azure Local, 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 hjälp av Datacenter Firewall for Software Defined Networking (SDN) i Azure Local med 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 Modulen NetworkController . Du kan också använda Windows Administrationscenter 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 för grundläggande nätverksanslutning i den nya miljön. För att åstadkomma detta skapar du en regel för Datacenter-brandvä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 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>
Kommentar
Windows PowerShell-kommandoreferensen för nätverksstyrenheten finns i cmdletarna nätverksstyrenhet.
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 möjligheten för en angripare att sprida sig i sidled i undernätet, samtidigt som de virtuella datorerna fortfarande 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, som identifieras av resurs-ID :t Subnet-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 för nätverksstyrenhet:
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 den 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, utöver virtuella SDN-nätverk. Om du har nätverkssäkerhetsgrupper inställda på det virtuella undernätet som är anslutet till nätverksgränssnittet tillämpas båda nätverkssäkerhetsgrupperna och nätverksgränssnittets nätverkssäkerhetsgrupper prioriteras ovanför säkerhetsgrupperna för virtuella undernätsnätverk.
I det här exemplet visar vi hur du lägger till en nätverkssäkerhetsgrupp i ett virtuellt nätverk.
Dricks
Du kan också lägga till en nätverkssäkerhetsgrupp samtidigt som du skapar nätverksgränssnittet.
Hämta eller skapa nätverksgränssnittet som du ska lägga till nätverkssäkerhetsgruppen till.
$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öde som bearbetas av SDN-brandväggsregler. Alla nätverkssäkerhetsgrupper som har loggning aktiverat registreras. Loggfilerna måste finnas i en syntax som är konsekvent med Azure Network Watcher-flödesloggarna. 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ärddatorer. Uppdatera variablerna i början och kör detta på en lokal Azure-instans 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 är aktiverad 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ällt 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:
- Översikt över datacenterbrandväggen.
- Översikt över nätverksstyrenheten.
- SDN i Azure Local och Windows Server.