Freigeben über


Konfigurieren von Netzwerksicherheitsgruppen in Ihrer Azure Stack HCI mit PowerShell

Gilt für: Azure Stack HCI, 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 for Software Defined Networking (SDN) in Azure Stack HCI mithilfe von Windows PowerShell. Sie aktivieren und konfigurieren datacenter firewall, indem Sie Netzwerksicherheitsgruppen erstellen, die auf ein Subnetz oder eine Netzwerkschnittstelle angewendet werden.

Die Beispielskripts in diesem Artikel verwenden Windows PowerShell Befehle, die aus dem NetworkController-Modul exportiert werden. 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 Allow 100
* * All * * Ausgehend Allow 110

In diesem Beispiel erstellen Sie eine Netzwerksicherheitsgruppe mit zwei Regeln:

  1. AllowAll_Inbound : Ermöglicht die Übergabe des gesamten Netzwerkdatenverkehrs an die Netzwerkschnittstelle, in der diese Netzwerksicherheitsgruppe konfiguriert ist.
  2. 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 auf jedem Computer ausführen, der Zugriff auf den Netzwerkcontroller-REST-Endpunkt hat. Öffnen Sie zunächst eine PowerShell-Sitzung. Verwenden Sie in diesem Beispiel das Cmdlet Enter-PSSession , und ersetzen Sie durch <computer-name> den Namen des Computers, der über den Netzwerkcontroller-REST-Endpunkt verfügt.

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 Den Netzwerkcontroller finden Sie in den Netzwerkcontroller-Cmdlets.

Verwenden von Netzwerksicherheitsgruppen zum Einschränken des Datenverkehrs in einem Subnetz

In diesem Beispiel erstellen Sie eine Netzwerksicherheitsgruppe, die verhindert, dass virtuelle Computer (VMs) im Subnetz 192.168.0.0/24 miteinander kommunizieren. Diese Art von Netzwerksicherheitsgruppe ist nützlich, um die Fähigkeit eines Angreifers zu begrenzen, sich seitlich 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 Allow 100
* 192.168.0.1 Alle * * Ausgehend Allow 101
192.168.0.0/24 * Alle * * Eingehend Block 102
* 192.168.0.0/24 Alle * * Ausgehend Block 103
* * Alle * * Eingehend Allow 104
* * Alle * * Ausgehend Allow 105

Die durch das folgende Beispielskript erstellte Netzwerksicherheitsgruppe, die durch die Ressourcen-ID Subnet-192-168-0-0 identifiziert wird, kann jetzt auf ein Subnetz des virtuellen Netzwerks angewendet werden, das die Subnetzadresse "192.168.0.0/24" verwendet. Für jede Netzwerkschnittstelle, die an dieses Subnetz des virtuellen Netzwerks angefügt ist, werden automatisch die oben genannten Regeln für Netzwerksicherheitsgruppen angewendet.

Im Folgenden finden Sie ein Beispielskript zum Erstellen dieser Netzwerksicherheitsgruppe mithilfe der Netzwerkcontroller-REST-API:

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, können Sie diese Standard-Netzwerksicherheitsgruppe im virtuellen Subnetz mit einer bestimmten Netzwerksicherheitsgruppe für eine einzelne Netzwerkschnittstelle überschreiben. Ab Windows Server 2019 Datacenter können Sie bestimmte Netzwerksicherheitsgruppen zusätzlich zu virtuellen SDN-Netzwerken direkt auf Netzwerkschnittstellen anwenden, die an logische SDN-Netzwerke angefügt sind. Wenn Sie Netzwerksicherheitsgruppen für das virtuelle Subnetz festgelegt haben, das mit der Netzwerkschnittstelle verbunden ist, werden beide Netzwerksicherheitsgruppen angewendet, und die Netzwerksicherheitsgruppen der Netzwerkschnittstelle werden über den Netzwerksicherheitsgruppen des virtuellen Subnetzes priorisiert.

In diesem Beispiel wird veranschaulicht, wie Sie einem virtuellen Netzwerk eine Netzwerksicherheitsgruppe hinzufügen.

Tipp

Es ist auch möglich, eine Netzwerksicherheitsgruppe hinzuzufügen, während Sie die Netzwerkschnittstelle erstellen.

  1. Rufen Sie die Netzwerkschnittstelle ab, der Sie die Netzwerksicherheitsgruppe hinzufügen, oder erstellen Sie sie.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Rufen Sie die Netzwerksicherheitsgruppe ab, die Sie der Netzwerkschnittstelle hinzufügen, oder erstellen Sie sie.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. Weisen Sie die Netzwerksicherheitsgruppe der AccessControlList-Eigenschaft der Netzwerkschnittstelle zu.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. 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 wird gezeigt, wie Sie eine Netzwerksicherheitsgruppe aus einer Netzwerkschnittstelle entfernen. Beim Entfernen einer Netzwerksicherheitsgruppe wird der Standardregelsatz 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 den gesamten eingehenden und den gesamten ausgehenden Datenverkehr zulässt.

  1. Rufen Sie die Netzwerkschnittstelle ab, von der Sie die Netzwerksicherheitsgruppe entfernen.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Weisen Sie der IP-Konfigurationseigenschaft „AccessControlList“ den Wert „$null“ zu.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. 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 Rechenzentrumsfirewall zeichnet alle Datenflüsse auf, die von SDN-Firewallregeln verarbeitet werden. 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.

Im Folgenden finden Sie ein Beispielskript zum Aktivieren der Firewallüberwachung auf den Hostservern. Aktualisieren Sie die am Anfang aufgeführten Variablen, und führen Sie diese Skript für einen Azure Stack HCI-Cluster aus, für den Netzwerkcontroller bereitgestellt ist:

$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":"394f647d-2ed0-4c31-87c5-389b8c0c8132",
            "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