Konfigurace skupin zabezpečení sítě ve službě Azure Stack HCI pomocí PowerShellu

Platí pro: Azure Stack HCI verze 23H2 a 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016

Tento článek obsahuje pokyny ke konfiguraci skupin zabezpečení sítě (NSG) pro správu toku datového provozu pomocí brány firewall datacenter pro softwarově definované sítě (SDN) ve službě Azure Stack HCI pomocí Windows PowerShell. Bránu firewall datacentra povolíte a nakonfigurujete vytvořením skupin zabezpečení sítě, které se použijí pro podsíť nebo síťové rozhraní.

Ukázkové skripty v tomto článku používají příkazy Windows PowerShell exportované z modulu NetworkController. Můžete také použít Windows Admin Center ke konfiguraci a správě skupin zabezpečení sítě.

Konfigurace brány firewall datacentra pro povolení veškerého provozu

Po nasazení SDN byste měli otestovat základní síťové připojení v novém prostředí. Chcete-li toho dosáhnout, vytvořte pravidlo pro bránu firewall datacentra, které umožňuje veškerý síťový provoz bez omezení.

Pomocí položek v následující tabulce vytvořte sadu pravidel, která povolují veškerý příchozí a odchozí síťový provoz.

Zdrojová IP adresa Cílová IP adresa Protokol Zdrojový port Cílový port Směr Akce Priorita
* * Vše * * Příchozí Povolit 100
* * Vše * * Odchozí Povolit 110

V tomto příkladu vytvoříte skupinu zabezpečení sítě se dvěma pravidly:

  1. AllowAll_Inbound – umožňuje přenos veškerého síťového provozu do síťového rozhraní, ve kterém je tato skupina zabezpečení sítě nakonfigurovaná.
  2. AllowAllOutbound – umožňuje průchod veškerého provozu ze síťového rozhraní. Tato skupina zabezpečení sítě identifikovaná ID prostředku AllowAll-1 je teď připravená k použití ve virtuálních podsítích a síťových rozhraních.

Tento příkaz můžete spustit z libovolného počítače, který má přístup ke koncovému bodu REST síťového adaptéru. Nejprve otevřete relaci PowerShellu. V tomto příkladu použijte rutinu Enter-PSSession a nahraďte <computer-name> názvem počítače s koncovým bodem REST síťového adaptéru.

Enter-PSSession <computer-name>

Potom spuštěním následujícího skriptu vytvořte skupinu zabezpečení sítě:

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

Poznámka

Referenční informace k Windows PowerShell příkazu síťového adaptéru najdete v rutinách síťového adaptéru.

Omezení provozu v podsíti pomocí skupin zabezpečení sítě

V tomto příkladu vytvoříte skupinu zabezpečení sítě, která brání vzájemné komunikaci virtuálních počítačů v podsíti 192.168.0.0/24. Tento typ skupiny zabezpečení sítě je užitečný k omezení možnosti útočníka rozšířit se laterálně v rámci podsítě a zároveň umožnit virtuálním počítačům přijímat požadavky mimo podsíť a komunikovat s jinými službami v jiných podsítích.

Zdrojová IP adresa Cílová IP adresa Protokol Zdrojový port Cílový port Směr Akce Priorita
192.168.0.1 * Vše * * Příchozí Povolit 100
* 192.168.0.1 Vše * * Odchozí Povolit 101
192.168.0.0/24 * Vše * * Příchozí Blok 102
* 192.168.0.0/24 Vše * * Odchozí Blok 103
* * Vše * * Příchozí Povolit 104
* * Vše * * Odchozí Povolit 105

Skupinu zabezpečení sítě vytvořenou následujícím ukázkovým skriptem, kterou identifikuje ID prostředku Subnet-192-168-0-0, se teď dá použít na podsíť virtuální sítě, která používá adresu podsítě 192.168.0.0/24. Každé síťové rozhraní připojené k podsíti virtuální sítě automaticky použije výše uvedená pravidla skupiny zabezpečení sítě.

Následuje příklad skriptu pro vytvoření této skupiny zabezpečení sítě pomocí rozhraní REST API síťového adaptéru:

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

Přidání skupiny zabezpečení sítě do síťového rozhraní

Jakmile vytvoříte skupinu zabezpečení sítě a přiřadíte ji k virtuální podsíti, můžete tuto výchozí skupinu zabezpečení sítě ve virtuální podsíti přepsat konkrétní skupinou zabezpečení sítě pro jednotlivé síťové rozhraní. Počínaje Windows Serverem 2019 Datacenter můžete kromě virtuálních sítí SDN použít také specifické skupiny zabezpečení sítě přímo na síťová rozhraní připojená k logickým sítím SDN. Pokud máte ve virtuální podsíti připojené k síťovému rozhraní nastavené skupiny zabezpečení sítě, použijí se obě skupiny zabezpečení sítě a skupiny zabezpečení sítě síťového rozhraní mají prioritu nad skupinami zabezpečení sítě virtuální podsítě.

V tomto příkladu si ukážeme, jak přidat skupinu zabezpečení sítě do virtuální sítě.

Tip

Současně s vytvořením síťového rozhraní je také možné přidat skupinu zabezpečení sítě.

  1. Získejte nebo vytvořte síťové rozhraní, do kterého přidáte skupinu zabezpečení sítě.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Získejte nebo vytvořte skupinu zabezpečení sítě, kterou přidáte do síťového rozhraní.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. Přiřaďte skupinu zabezpečení sítě vlastnosti AccessControlList síťového rozhraní.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. Přidejte síťové rozhraní do síťového adaptéru.

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

Odebrání skupiny zabezpečení sítě ze síťového rozhraní

V tomto příkladu vám ukážeme, jak odebrat skupinu zabezpečení sítě ze síťového rozhraní. Odebrání skupiny zabezpečení sítě použije výchozí sadu pravidel pro síťové rozhraní. Výchozí sada pravidel umožňuje veškerý odchozí provoz, ale blokuje veškerý příchozí provoz. Pokud chcete povolit veškerý příchozí provoz, musíte podle předchozího příkladu přidat skupinu zabezpečení sítě, která umožňuje veškerý příchozí a veškerý odchozí provoz.

  1. Získejte síťové rozhraní, ze kterého odeberete skupinu zabezpečení sítě.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Přiřaďte $null vlastnosti AccessControlList ipConfiguration.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. Přidejte objekt síťového rozhraní do síťového adaptéru.

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

Auditování brány firewall

Funkce auditování brány firewall pro bránu firewall datacentra zaznamenává všechny toky zpracovávané pravidly brány firewall SDN. Zaznamenávají se všechny skupiny zabezpečení sítě, které mají povolené protokolování. Soubory protokolu musí být v syntaxi, která je konzistentní s protokoly toku azure Network Watcher. Tyto protokoly je možné použít pro diagnostiku nebo archivovat pro pozdější analýzu.

Tady je ukázkový skript pro povolení auditování brány firewall na hostitelských serverech. Na začátku aktualizujte proměnné a spusťte tento příkaz v clusteru Azure Stack HCI s nasazeným síťovým adaptérem :

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

Po povolení se v zadaném adresáři na každém hostiteli přibližně jednou za hodinu zobrazí nový soubor. Tyto soubory byste měli pravidelně zpracovávat a odebírat z hostitelů. Aktuální soubor má nulovou délku a je uzamčený, dokud není vyprázdněný při další hodině:

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

Tyto soubory obsahují posloupnost událostí toku, například:

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

Upozorňujeme, že protokolování probíhá pouze u pravidel, u kterých je protokolování nastavené na Povoleno, například:

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

Další kroky

Související informace najdete tady: