Konfigurieren von Netzwerksicherheitsgruppen in Azure Local mit PowerShell
Gilt für: Azure Local, Versionen 23H2 und 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016
Dieser Artikel enthält Anweisungen zum Konfigurieren von Netzwerksicherheitsgruppen (NSGs) zum Verwalten des Datenverkehrsflusses mithilfe der Datacenter-Firewall für softwaredefinierte Netzwerke (SDN) in Azure Local mithilfe von Windows PowerShell. Sie aktivieren und konfigurieren die Rechenzentrumsfirewall, indem Sie Netzwerksicherheitsgruppen erstellen, die auf ein Subnetz oder eine Netzwerkschnittstelle angewendet werden.
In den Beispielskripts in diesem Artikel werden Windows PowerShell-Befehle verwendet, die aus dem NetworkController-Modul exportiert wurden. Sie können auch Windows Admin Center verwenden, um Netzwerksicherheitsgruppen zu konfigurieren und zu verwalten.
Konfigurieren der Rechenzentrumsfirewall so, dass jeglicher Datenverkehr zugelassen wird
Nachdem Sie SDN bereitgestellt haben, sollten Sie die elementare Netzwerkkonnektivität in Ihrer neuen Umgebung testen. Erstellen Sie hierzu eine Regel für die Rechenzentrumsfirewall, die den gesamten Netzwerkdatenverkehr ohne Einschränkung zulässt.
Verwenden Sie die Einträge aus der folgenden Tabelle, um eine Reihe von Regeln zu erstellen, der den gesamten eingehenden und ausgehenden Netzwerkdatenverkehr zulassen.
Quell-IP | Ziel-IP | Protocol | Quellport | Zielport | Direction | Aktion | Priorität |
---|---|---|---|---|---|---|---|
* | * | Alle | * | * | Eingehend | Zulassen | 100 |
* | * | Alle | * | * | Ausgehend | Zulassen | 110 |
In diesem Beispiel erstellen Sie eine Netzwerksicherheitsgruppe mit zwei Regeln:
- AllowAll_Inbound : Ermöglicht allen Netzwerkdatenverkehr, an die Netzwerkschnittstelle zu übergeben, an die diese Netzwerksicherheitsgruppe konfiguriert ist.
- AllowAll_Outbound: Lässt zu, dass jeglicher Datenverkehr die Netzwerkschnittstelle nach außen passieren kann. Diese Netzwerksicherheitsgruppe, die durch die Ressourcen-ID "AllowAll-1" identifiziert wird, kann jetzt in virtuellen Subnetzen und Netzwerkschnittstellen verwendet werden.
Sie können diesen Befehl von jedem Computer ausführen, der Zugriff auf den REST-Endpunkt des Netzwerkcontrollers hat. Öffnen Sie zunächst eine PowerShell-Sitzung. Verwenden Sie in diesem Beispiel das Cmdlet Enter-PSSession , und ersetzen Sie <computer-name>
ihn durch den Namen des Computers mit dem Rest-Endpunkt des Netzwerkcontrollers.
Enter-PSSession <computer-name>
Führen Sie dann das folgende Skript aus, um die Netzwerksicherheitsgruppe zu erstellen:
$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>
Hinweis
Die Windows PowerShell-Befehlsreferenz für Netzwerkcontroller befindet sich in den Cmdlets des Netzwerkcontrollers.
Verwenden von Netzwerksicherheitsgruppen zum Einschränken des Datenverkehrs in einem Subnetz
In diesem Beispiel erstellen Sie eine Netzwerksicherheitsgruppe, die verhindert, dass virtuelle Computer (VMs) innerhalb des Subnetzes 192.168.0.0/24 miteinander kommunizieren. Diese Art von Netzwerksicherheitsgruppe ist nützlich, um die Fähigkeit eines Angreifers zu beschränken, sich lateral innerhalb des Subnetzes zu verbreiten, während die VMs weiterhin Anforderungen von außerhalb des Subnetzes empfangen und mit anderen Diensten in anderen Subnetzen kommunizieren können.
Quell-IP | Ziel-IP | Protocol | Quellport | Zielport | Direction | Aktion | Priorität |
---|---|---|---|---|---|---|---|
192.168.0.1 | * | Alle | * | * | Eingehend | Zulassen | 100 |
* | 192.168.0.1 | Alle | * | * | Ausgehend | Zulassen | 101 |
192.168.0.0/24 | * | Alle | * | * | Eingehend | Blockieren | 102 |
* | 192.168.0.0/24 | Alle | * | * | Ausgehend | Blockieren | 103 |
* | * | Alle | * | * | Eingehend | Zulassen | 104 |
* | * | Alle | * | * | Ausgehend | Zulassen | 105 |
Die vom folgenden Beispielskript erstellte Netzwerksicherheitsgruppe, die durch die Ressourcen-ID Subnetz 192-168-0-0 identifiziert wurde, kann jetzt auf ein virtuelles Netzwerk-Subnetz angewendet werden, das die Subadresse "192.168.0.0/24" verwendet. Jede Netzwerkschnittstelle, die an das virtuelle Netzwerksubnetz angefügt ist, erhält automatisch die oben genannten Regeln für die Netzwerksicherheitsgruppe.
Im Folgenden sehen Sie ein Beispielskript zum Erstellen dieser Netzwerksicherheitsgruppe mithilfe der REST-API des Netzwerkcontrollers:
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
Hinzufügen einer Netzwerksicherheitsgruppe zu einer Netzwerkschnittstelle
Nachdem Sie eine Netzwerksicherheitsgruppe erstellt und einem virtuellen Subnetz zugewiesen haben, sollten Sie diese Standardmäßige Netzwerksicherheitsgruppe im virtuellen Subnetz mit einer bestimmten Netzwerksicherheitsgruppe für eine einzelne Netzwerkschnittstelle überschreiben. Ab Windows Server 2019 Datacenter können Sie bestimmte Netzwerksicherheitsgruppen direkt auf Netzwerkschnittstellen anwenden, die an logische SDN-Netzwerke angefügt sind, zusätzlich zu virtuellen SDN-Netzwerken. Wenn Netzwerksicherheitsgruppen für das virtuelle Subnetz festgelegt sind, das mit der Netzwerkschnittstelle verbunden ist, werden beide Netzwerksicherheitsgruppen angewendet, und die Netzwerkschnittstellen-Netzwerksicherheitsgruppen werden über den Sicherheitsgruppen des virtuellen Subnetznetzwerks priorisiert.
In diesem Beispiel wird veranschaulicht, wie sie einem virtuellen Netzwerk eine Netzwerksicherheitsgruppe hinzufügen.
Tipp
Es ist auch möglich, eine Netzwerksicherheitsgruppe gleichzeitig hinzuzufügen, mit der Sie die Netzwerkschnittstelle erstellen.
Rufen Sie die Netzwerkschnittstelle ab, der Sie die Netzwerksicherheitsgruppe hinzufügen, oder erstellen Sie sie.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Rufen Sie die Netzwerksicherheitsgruppe ab, die Sie der Netzwerkschnittstelle hinzufügen, oder erstellen Sie sie.
$acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
Weisen Sie die Netzwerksicherheitsgruppe der AccessControlList-Eigenschaft der Netzwerkschnittstelle zu.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
Fügen Sie die Netzwerkschnittstelle im Netzwerkcontroller hinzu.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Entfernen einer Netzwerksicherheitsgruppe aus einer Netzwerkschnittstelle
In diesem Beispiel zeigen wir Ihnen, wie Sie eine Netzwerksicherheitsgruppe aus einer Netzwerkschnittstelle entfernen. Durch das Entfernen einer Netzwerksicherheitsgruppe werden die Standardregeln auf die Netzwerkschnittstelle angewendet. Der Standardsatz von Regeln lässt jeglichen ausgehenden Datenverkehr zu, blockiert jedoch jeglichen eingehenden Datenverkehr. Wenn Sie den gesamten eingehenden Datenverkehr zulassen möchten, müssen Sie dem vorherigen Beispiel folgen, um eine Netzwerksicherheitsgruppe hinzuzufügen, die alle eingehenden und alle ausgehenden Datenverkehr zulässt.
Rufen Sie die Netzwerkschnittstelle ab, aus der Sie die Netzwerksicherheitsgruppe entfernen.
$nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
Weisen Sie der IP-Konfigurationseigenschaft „AccessControlList“ den Wert „$null“ zu.
$nic.properties.ipconfigurations[0].properties.AccessControlList = $null
Fügen Sie das Netzwerkschnittstellenobjekt im Netzwerkcontroller hinzu.
new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
Firewallüberwachung
Die Firewallüberwachungsfunktion für die Datacenter-Firewall zeichnet jeden von SDN-Firewallregeln verarbeiteten Fluss auf. Alle Netzwerksicherheitsgruppen, für die die Protokollierung aktiviert ist, werden aufgezeichnet. Die Protokolldateien müssen in einer Syntax vorliegen, die mit den Azure Network Watcher-Datenflussprotokollen übereinstimmt. Diese Protokolle können für Diagnosen verwendet oder zur späteren Analyse archiviert werden.
Hier ist ein Beispielskript zum Aktivieren der Firewallüberwachung auf Hostcomputern. Aktualisieren Sie die Variablen am Anfang, und führen Sie dies auf einer lokalen Azure-Instanz mit bereitgestelltem Netzwerkcontroller aus:
$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
}
Nach der Aktivierung wird im angegebenen Verzeichnis auf jedem Host etwa einmal pro Stunde eine neue Datei gespeichert. Sie sollten diese Dateien regelmäßig verarbeiten und von den Hosts entfernen. Die aktuelle Datei hat eine Länge von null und ist gesperrt, bis sie bei der nächsten Stundenmarke gefüllt wurde:
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
Diese Dateien enthalten eine Sequenz von Datenflussereignissen. Beispiel:
{
"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"
},
Protokollierung erfolgt nur für Regeln, für die Logging auf Enabled festgelegt ist. Beispiel:
{
"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ächste Schritte
Verwandte Informationen
- Übersicht über die Rechenzentrumsfirewall.
- Übersicht über netzwerkcontroller.
- SDN in Azure Local und Windows Server.