Freigeben über


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:

  1. AllowAll_Inbound : Ermöglicht allen Netzwerkdatenverkehr, an die Netzwerkschnittstelle zu übergeben, an die 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 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.

  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 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.

  1. Rufen Sie die Netzwerkschnittstelle ab, aus 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 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