Netwerkbeveiligingsgroepen configureren op uw Azure Local met PowerShell
Van toepassing op: Azure Local, versies 23H2 en 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016
Dit artikel bevat instructies voor het configureren van netwerkbeveiligingsgroepen (NSG's) voor het beheren van de gegevensverkeersstroom met datacenterfirewall voor SDN (Software Defined Networking) in Azure Local met behulp van Windows PowerShell. U kunt Datacenter Firewall inschakelen en configureren door netwerkbeveiligingsgroepen te maken die worden toegepast op een subnet of een netwerkinterface.
In de voorbeeldscripts in dit artikel worden Windows PowerShell-opdrachten gebruikt die zijn geëxporteerd uit de NetworkController-module . U kunt ook Windows Admin Center gebruiken om netwerkbeveiligingsgroepen te configureren en te beheren.
Datacenter Firewall configureren om al het verkeer toe te staan
Zodra u SDN hebt geïmplementeerd, moet u testen op basisnetwerkconnectiviteit in uw nieuwe omgeving. Hiervoor maakt u een regel voor Datacenter Firewall die al het netwerkverkeer toestaat, zonder beperking.
Gebruik de vermeldingen in de volgende tabel om een set regels te maken waarmee al het binnenkomende en uitgaande netwerkverkeer wordt toegestaan.
Bron-IP | Doel-IP | Protocol | Bronpoort | Doelpoort | Richting | Actie | Prioriteit |
---|---|---|---|---|---|---|---|
* | * | Alle | * | * | Inkomend | Toestaan | 100 |
* | * | Alle | * | * | Uitgaand | Toestaan | 110 |
In dit voorbeeld maakt u een netwerkbeveiligingsgroep met twee regels:
- AllowAll_Inbound : staat al het netwerkverkeer toe om door te geven aan de netwerkinterface waar deze netwerkbeveiligingsgroep is geconfigureerd.
- AllowAllOutbound : staat al het verkeer toe om de netwerkinterface te passeren. Deze netwerkbeveiligingsgroep, geïdentificeerd door de resource-id 'AllowAll-1' is nu gereed voor gebruik in virtuele subnetten en netwerkinterfaces.
U kunt deze opdracht uitvoeren vanaf elke computer die toegang heeft tot het REST-eindpunt van de netwerkcontroller. Open eerst een PowerShell-sessie. In dit voorbeeld gebruikt u de cmdlet Enter-PSSession en vervangt u door <computer-name>
de naam van de computer met het REST-eindpunt van de netwerkcontroller.
Enter-PSSession <computer-name>
Voer vervolgens het volgende script uit om de netwerkbeveiligingsgroep te maken:
$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>
Notitie
De Windows PowerShell-opdrachtreferentie voor netwerkcontroller bevindt zich in de cmdlets voor de netwerkcontroller.
Netwerkbeveiligingsgroepen gebruiken om verkeer op een subnet te beperken
In dit voorbeeld maakt u een netwerkbeveiligingsgroep die voorkomt dat virtuele machines (VM's) binnen het subnet 192.168.0.0/24 met elkaar communiceren. Dit type netwerkbeveiligingsgroep is handig voor het beperken van de mogelijkheid van een aanvaller om zich lateraal binnen het subnet te verspreiden, terwijl de VM's nog steeds aanvragen van buiten het subnet kunnen ontvangen en kunnen communiceren met andere services op andere subnetten.
Bron-IP | Doel-IP | Protocol | Bronpoort | Doelpoort | Richting | Actie | Prioriteit |
---|---|---|---|---|---|---|---|
192.168.0.1 | * | Alle | * | * | Inkomend | Toestaan | 100 |
* | 192.168.0.1 | Alle | * | * | Uitgaand | Toestaan | 101 |
192.168.0.0/24 | * | Alle | * | * | Inkomend | Blokkeren | 102 |
* | 192.168.0.0/24 | Alle | * | * | Uitgaand | Blokkeren | 103 |
* | * | Alle | * | * | Inkomend | Toestaan | 104 |
* | * | Alle | * | * | Uitgaand | Toestaan | 105 |
De netwerkbeveiligingsgroep die is gemaakt met het onderstaande voorbeeldscript, geïdentificeerd door het resource-id-subnet-192-168-0-0, kan nu worden toegepast op een subnet van een virtueel netwerk dat gebruikmaakt van het subnetadres 192.168.0.0/24. Alle netwerkinterfaces die aan dat subnet van het virtuele netwerk zijn gekoppeld, worden automatisch de bovenstaande regels voor netwerkbeveiligingsgroepen toegepast.
Hier volgt een voorbeeldscript voor het maken van deze netwerkbeveiligingsgroep met behulp van de REST API voor netwerkcontrollers:
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
Een netwerkbeveiligingsgroep toevoegen aan een netwerkinterface
Nadat u een netwerkbeveiligingsgroep hebt gemaakt en deze hebt toegewezen aan een virtueel subnet, wilt u mogelijk die standaardnetwerkbeveiligingsgroep op het virtuele subnet overschrijven met een specifieke netwerkbeveiligingsgroep voor een afzonderlijke netwerkinterface. Vanaf Windows Server 2019 Datacenter kunt u specifieke netwerkbeveiligingsgroepen rechtstreeks toepassen op netwerkinterfaces die zijn gekoppeld aan logische SDN-netwerken, naast virtuele SDN-netwerken. Als u netwerkbeveiligingsgroepen hebt ingesteld op het virtuele subnet dat is verbonden met de netwerkinterface, worden beide netwerkbeveiligingsgroepen toegepast en krijgen de netwerkinterfacenetwerkbeveiligingsgroepen prioriteit boven de netwerkbeveiligingsgroepen van het virtuele subnet.
In dit voorbeeld laten we zien hoe u een netwerkbeveiligingsgroep toevoegt aan een virtueel netwerk.
Tip
Het is ook mogelijk om tegelijkertijd een netwerkbeveiligingsgroep toe te voegen die u de netwerkinterface maakt.
Haal of maak de netwerkinterface waaraan u de netwerkbeveiligingsgroep toevoegt.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Haal of maak de netwerkbeveiligingsgroep die u toevoegt aan de netwerkinterface.
$acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
Wijs de netwerkbeveiligingsgroep toe aan de eigenschap AccessControlList van de netwerkinterface.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
Voeg de netwerkinterface toe in de netwerkcontroller.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Een netwerkbeveiligingsgroep verwijderen uit een netwerkinterface
In dit voorbeeld laten we zien hoe u een netwerkbeveiligingsgroep uit een netwerkinterface verwijdert. Als u een netwerkbeveiligingsgroep verwijdert, wordt de standaardset regels toegepast op de netwerkinterface. De standaardset regels staat al het uitgaande verkeer toe, maar blokkeert al het binnenkomende verkeer. Als u al het binnenkomende verkeer wilt toestaan, moet u het vorige voorbeeld volgen om een netwerkbeveiligingsgroep toe te voegen die al het binnenkomende en uitgaande verkeer toestaat.
Haal de netwerkinterface op waaruit u de netwerkbeveiligingsgroep verwijdert.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Wijs $null toe aan de eigenschap AccessControlList van de ipConfiguration.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $null
Voeg het netwerkinterfaceobject toe in de netwerkcontroller.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Firewallcontrole
De firewallcontrolefunctie voor de datacenterfirewall registreert elke stroom die wordt verwerkt door SDN-firewallregels. Alle netwerkbeveiligingsgroepen waarvoor logboekregistratie is ingeschakeld, worden vastgelegd. De logboekbestanden moeten zich in een syntaxis bevinden die consistent is met de Azure Network Watcher-stroomlogboeken. Deze logboeken kunnen worden gebruikt voor diagnostische gegevens of gearchiveerd voor latere analyse.
Hier volgt een voorbeeldscript voor het inschakelen van firewallcontrole op hostmachines. Werk de variabelen aan het begin bij en voer deze uit op een lokaal Azure-exemplaar met netwerkcontroller geïmplementeerd:
$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
}
Zodra dit is ingeschakeld, wordt er een nieuw bestand weergegeven in de opgegeven map op elke host ongeveer één keer per uur. U moet deze bestanden periodiek verwerken en verwijderen van de hosts. Het huidige bestand heeft geen lengte en is vergrendeld totdat het volgende uur is leeggemaakt:
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
Deze bestanden bevatten een reeks stroomgebeurtenissen, bijvoorbeeld:
{
"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"
},
Opmerking: logboekregistratie vindt alleen plaats voor regels waarvoor Logboekregistratie is ingesteld op Ingeschakeld, bijvoorbeeld:
{
"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
}
]
}
}
Volgende stappen
Zie voor verwante informatie:
- Overzicht van Datacenter Firewall.
- Overzicht van netwerkcontroller.
- SDN in Azure Local en Windows Server.