Hálózati biztonsági csoportok konfigurálása az Azure Stack HCI-ben a PowerShell használatával

A következőkre vonatkozik: Azure Stack HCI, 23H2 és 22H2 verzió; Windows Server 2022, Windows Server 2019, Windows Server 2016

Ez a cikk útmutatást nyújt a hálózati biztonsági csoportok (NSG-k) konfigurálásához az adatforgalom kezeléséhez az Azure Stack HCI Datacenter Firewall for Software Defined Networking (SDN) használatával az Windows PowerShell használatával. Az adatközpont tűzfalának engedélyezéséhez és konfigurálásához hozzon létre olyan hálózati biztonsági csoportokat, amelyek egy alhálózatra vagy hálózati adapterre lesznek alkalmazva.

A cikkben szereplő példaszkriptek a NetworkController modulból exportált Windows PowerShell parancsokat használják. A hálózati biztonsági csoportok konfigurálásához és kezeléséhez Windows Admin Center is használhat.

Az adatközpont tűzfalának konfigurálása az összes forgalom engedélyezéséhez

Az SDN üzembe helyezése után tesztelnie kell az alapszintű hálózati kapcsolatot az új környezetben. Ehhez hozzon létre egy szabályt az adatközpont tűzfalához, amely korlátozás nélkül engedélyezi az összes hálózati forgalmat.

Az alábbi táblázatban szereplő bejegyzések használatával hozzon létre egy szabálykészletet, amely lehetővé teszi az összes bejövő és kimenő hálózati forgalmat.

Forrás IP-címe Cél IP-címe Protokoll Forrásport Célport Irány Művelet Prioritás
* * Mind * * Bejövő Engedélyezés 100
* * Mind * * Kimenő Engedélyezés 110

Ebben a példában két szabályt tartalmazó hálózati biztonsági csoportot hoz létre:

  1. AllowAll_Inbound – lehetővé teszi, hogy az összes hálózati forgalom áthaladjon azon a hálózati adapteren, amelyen a hálózati biztonsági csoport konfigurálva van.
  2. AllowAllOutbound – lehetővé teszi, hogy az összes forgalom áthaladjon a hálózati adapteren. Ez az "AllowAll-1" erőforrás-azonosítóval azonosított hálózati biztonsági csoport készen áll a virtuális alhálózatokon és hálózati adaptereken való használatra.

Ezt a parancsot bármely olyan számítógépről futtathatja, amely hozzáfér a Hálózati vezérlő REST-végpontjához. Először nyisson meg egy PowerShell-munkamenetet. Ebben a példában használja az Enter-PSSession parancsmagot, és cserélje le a helyére <computer-name> annak a számítógépnek a nevét, amely a hálózati vezérlő REST-végpontjával rendelkezik.

Enter-PSSession <computer-name>

Ezután futtassa a következő szkriptet a hálózati biztonsági csoport létrehozásához:

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

Megjegyzés

A hálózati vezérlő Windows PowerShell parancshivatkozása a Hálózati vezérlő parancsmagokban található.

Hálózati biztonsági csoportok használata egy alhálózat forgalmának korlátozásához

Ebben a példában létrehoz egy hálózati biztonsági csoportot, amely megakadályozza, hogy a 192.168.0.0/24 alhálózaton belüli virtuális gépek kommunikálnak egymással. Ez a hálózati biztonsági csoport akkor hasznos, ha korlátozza a támadók azon képességét, hogy oldalirányúan terjesszen az alhálózaton belül, ugyanakkor lehetővé teszi a virtuális gépek számára, hogy az alhálózaton kívülről fogadják a kéréseket, és kommunikáljanak más alhálózatokon lévő szolgáltatásokkal.

Forrás IP-címe Cél IP-címe Protokoll Forrásport Célport Irány Művelet Prioritás
192.168.0.1 * Mind * * Bejövő Engedélyezés 100
* 192.168.0.1 Mind * * Kimenő Engedélyezés 101
192.168.0.0/24 * Mind * * Bejövő Letiltás 102
* 192.168.0.0/24 Mind * * Kimenő Letiltás 103
* * Mind * * Bejövő Engedélyezés 104
* * Mind * * Kimenő Engedélyezés 105

Az alábbi példaszkript által létrehozott, a 192-168-0-0 erőforrás-azonosítójú alhálózat által azonosított hálózati biztonsági csoport mostantól alkalmazható a "192.168.0.0/24" alhálózati címet használó virtuális hálózati alhálózatra. Az adott virtuális hálózati alhálózathoz csatlakoztatott hálózati adapterek automatikusan alkalmazzák a fenti hálózati biztonsági csoportszabályokat.

Az alábbi példaszkripttel hozhatja létre ezt a hálózati biztonsági csoportot a Network Controller REST API használatával:

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

Hálózati biztonsági csoport hozzáadása hálózati adapterhez

Miután létrehozott egy hálózati biztonsági csoportot, és hozzárendelte egy virtuális alhálózathoz, érdemes lehet felülbírálni az alapértelmezett hálózati biztonsági csoportot a virtuális alhálózaton egy adott hálózati biztonsági csoporttal az egyes hálózati adapterekhez. A Windows Server 2019 Datacenterben kezdődően az SDN-alapú virtuális hálózatok mellett közvetlenül alkalmazhat adott hálózati biztonsági csoportokat az SDN logikai hálózatokhoz csatlakoztatott hálózati adapterekre. Ha hálózati biztonsági csoportok vannak beállítva a hálózati adapterhez csatlakoztatott virtuális alhálózaton, a rendszer mindkét hálózati biztonsági csoportot alkalmazza, és a hálózati adapter hálózati biztonsági csoportjai a virtuális alhálózati hálózati biztonsági csoportok fölé kerülnek.

Ebben a példában bemutatjuk, hogyan adhat hozzá hálózati biztonsági csoportot egy virtuális hálózathoz.

Tipp

A hálózati adapter létrehozásával egyidejűleg hálózati biztonsági csoport is felvehető.

  1. Szerezze be vagy hozza létre azt a hálózati adaptert, amelyhez hozzáadja a hálózati biztonsági csoportot.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Szerezze be vagy hozza létre a hálózati adapterhez hozzáadni kívánt hálózati biztonsági csoportot.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. Rendelje hozzá a hálózati biztonsági csoportot a hálózati adapter AccessControlList tulajdonságához.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. Adja hozzá a hálózati adaptert a Hálózati vezérlőben.

    new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
    

Hálózati biztonsági csoport eltávolítása hálózati adapterről

Ebben a példában bemutatjuk, hogyan távolíthat el egy hálózati biztonsági csoportot egy hálózati adapterről. A hálózati biztonsági csoport eltávolítása az alapértelmezett szabálykészletet alkalmazza a hálózati adapterre. Az alapértelmezett szabálykészlet lehetővé teszi az összes kimenő forgalmat, de blokkolja az összes bejövő forgalmat. Ha az összes bejövő forgalmat engedélyezni szeretné, az előző példában leírt módon kell hozzáadnia egy olyan hálózati biztonsági csoportot, amely minden bejövő és kimenő forgalmat engedélyez.

  1. Szerezze be azt a hálózati adaptert, amelyről eltávolítja a hálózati biztonsági csoportot.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Rendeljen $null az ipConfiguration AccessControlList tulajdonságához.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. Adja hozzá a hálózati adapter objektumát a Hálózati vezérlőben.

    new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
    

Tűzfal naplózása

Az adatközpont tűzfalának tűzfalnaplózási képessége az SDN-tűzfalszabályok által feldolgozott folyamatokat rögzíti. A rendszer minden olyan hálózati biztonsági csoportot rögzít, amelynél engedélyezve van a naplózás. A naplófájloknak olyan szintaxissal kell rendelkeznie, amely összhangban van az Azure Network Watcher folyamatnaplóival. Ezek a naplók diagnosztikához használhatók, vagy archiválhatók későbbi elemzésekhez.

Az alábbi példaszkripttel engedélyezheti a tűzfalak naplózását a gazdagépkiszolgálókon. Frissítse a változókat az elején, és futtassa ezt egy Azure Stack HCI-fürtön üzembe helyezett Hálózati vezérlővel :

$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
}

Ha engedélyezve van, minden gazdagépen körülbelül óránként egyszer megjelenik egy új fájl a megadott könyvtárban. Ezeket a fájlokat rendszeresen fel kell dolgoznia, és el kell távolítania őket a gazdagépekről. Az aktuális fájl nulla hosszúságú, és zárolva van, amíg a következő órajelnél ki nem üríti:

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

Ezek a fájlok folyamatesemények sorozatát tartalmazzák, például:

{
    "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"
            },

Vegye figyelembe, hogy a naplózás csak olyan szabályok esetében történik, amelyek naplózásaengedélyezve van, például:

{
    "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
                                       }
                                   ]
                   }
}

Következő lépések

A kapcsolódó információkért lásd: