PowerShell ile Azure Stack HCI'nizde ağ güvenlik gruplarını yapılandırma

Şunlar için geçerlidir: Azure Stack HCI, sürüm 23H2 ve 22H2; Windows Server 2022, Windows Server 2019 Windows Server 2016

Bu makalede, Windows PowerShell kullanarak Azure Stack HCI'de Yazılım Tanımlı Ağ (SDN) için Datacenter Güvenlik Duvarı'nı kullanarak veri trafiği akışını yönetmek üzere ağ güvenlik gruplarını (NSG) yapılandırma yönergeleri sağlanır. Bir alt ağa veya ağ arabirimine uygulanan ağ güvenlik grupları oluşturarak Veri Merkezi Güvenlik Duvarı'nı etkinleştirir ve yapılandırabilirsiniz.

Bu makaledeki örnek betikler, NetworkController modülünden dışarı aktarılan Windows PowerShell komutlarını kullanır. Ağ güvenlik gruplarını yapılandırmak ve yönetmek için de Windows Admin Center kullanabilirsiniz.

Veri Merkezi Güvenlik Duvarı'nı tüm trafiğe izin verecek şekilde yapılandırma

SDN'yi dağıttığınızda, yeni ortamınızda temel ağ bağlantısını test etmelisiniz. Bunu gerçekleştirmek için Veri Merkezi Güvenlik Duvarı için kısıtlama olmadan tüm ağ trafiğine izin veren bir kural oluşturun.

Tüm gelen ve giden ağ trafiğine izin veren bir kural kümesi oluşturmak için aşağıdaki tabloda yer alan girişleri kullanın.

Kaynak IP Hedef IP Protokol Kaynak Bağlantı Noktası Hedef Bağlantı Noktası Yön Eylem Öncelik
* * Tümü * * Gelen İzin Ver 100
* * Tümü * * Giden İzin Ver 110

Bu örnekte, iki kurala sahip bir ağ güvenlik grubu oluşturursunuz:

  1. AllowAll_Inbound - Tüm ağ trafiğinin bu ağ güvenlik grubunun yapılandırıldığı ağ arabirimine geçmesine izin verir.
  2. AllowAllOutbound - Tüm trafiğin ağ arabiriminden geçmesini sağlar. "AllowAll-1" kaynak kimliğiyle tanımlanan bu ağ güvenlik grubu artık sanal alt ağlarda ve ağ arabirimlerinde kullanılmaya hazırdır.

Bu komutu Ağ Denetleyicisi REST uç noktasına erişimi olan herhangi bir bilgisayardan çalıştırabilirsiniz. İlk olarak bir PowerShell oturumu açın. Bu örnekte Enter-PSSession cmdlet'ini kullanın ve değerini Ağ Denetleyicisi REST uç noktasına sahip bilgisayarın adıyla değiştirin <computer-name> .

Enter-PSSession <computer-name>

Ardından aşağıdaki betiği çalıştırarak ağ güvenlik grubunu oluşturun:

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

Not

Ağ Denetleyicisi için Windows PowerShell komut başvurusu, Ağ Denetleyicisi cmdlet'lerindedir.

Bir alt ağdaki trafiği sınırlamak için ağ güvenlik gruplarını kullanma

Bu örnekte, 192.168.0.0/24 alt ağındaki sanal makinelerin (VM) birbiriyle iletişim kurmasını engelleyen bir ağ güvenlik grubu oluşturacaksınız. Bu tür bir ağ güvenlik grubu, bir saldırganın alt ağ içinde yayılım yapma becerisini sınırlamak ve vm'lerin alt ağın dışından istek almasına ve diğer alt ağlardaki diğer hizmetlerle iletişim kurmasına izin vermek için kullanışlıdır.

Kaynak IP Hedef IP Protokol Kaynak Bağlantı Noktası Hedef Bağlantı Noktası Yön Eylem Öncelik
192.168.0.1 * Tümü * * Gelen İzin Ver 100
* 192.168.0.1 Tümü * * Giden İzin Ver 101
192.168.0.0/24 * Tümü * * Gelen Blok 102
* 192.168.0.0/24 Tümü * * Giden Blok 103
* * Tümü * * Gelen İzin Ver 104
* * Tümü * * Giden İzin Ver 105

Aşağıdaki örnek betik tarafından oluşturulan ve Subnet-192-168-0-0 kaynak kimliğiyle tanımlanan ağ güvenlik grubu artık "192.168.0.0/24" alt ağ adresini kullanan bir sanal ağ alt ağına uygulanabilir. Bu sanal ağ alt ağına bağlı tüm ağ arabirimleri, yukarıdaki ağ güvenlik grubu kurallarını otomatik olarak uygular.

Aşağıda, Ağ Denetleyicisi REST API'sini kullanarak bu ağ güvenlik grubunu oluşturmaya yönelik örnek bir betik verilmiştir:

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

Ağ arabirimine ağ güvenlik grubu ekleme

Bir ağ güvenlik grubu oluşturup bunu bir sanal alt ağa atadıktan sonra, tek bir ağ arabirimi için belirli bir ağ güvenlik grubuyla sanal alt ağda bu varsayılan ağ güvenlik grubunu geçersiz kılmak isteyebilirsiniz. Windows Server 2019 Datacenter'da başlayarak, belirli ağ güvenlik gruplarını SDN sanal ağlarına ek olarak doğrudan SDN mantıksal ağlarına bağlı ağ arabirimlerine uygulayabilirsiniz. Ağ arabirimine bağlı sanal alt ağda ayarlanmış ağ güvenlik gruplarınız varsa, her iki ağ güvenlik grubu da uygulanır ve ağ arabirimi ağ güvenlik grupları, sanal alt ağ ağ güvenlik gruplarının üzerinde önceliklendirilir.

Bu örnekte, bir sanal ağa ağ güvenlik grubu eklemeyi göstereceğiz.

İpucu

Ağ arabirimini oluşturduğunuz sırada bir ağ güvenlik grubu da ekleyebilirsiniz.

  1. Ağ güvenlik grubunu ekleyeceğiniz ağ arabirimini alın veya oluşturun.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Ağ arabirimine ekleyeceğiniz ağ güvenlik grubunu alın veya oluşturun.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. Ağ güvenlik grubunu ağ arabiriminin AccessControlList özelliğine atayın.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. Ağ Denetleyicisi'ne ağ arabirimini ekleyin.

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

Ağ arabiriminden ağ güvenlik grubunu kaldırma

Bu örnekte, ağ arabiriminden bir ağ güvenlik grubunun nasıl kaldırılacağı gösterilir. Ağ güvenlik grubunu kaldırmak, varsayılan kural kümesini ağ arabirimine uygular. Varsayılan kural kümesi tüm giden trafiğe izin verir, ancak tüm gelen trafiği engeller. Tüm gelen trafiğe izin vermek istiyorsanız, tüm gelen ve giden trafiğe izin veren bir ağ güvenlik grubu eklemek için önceki örneği izlemeniz gerekir.

  1. Ağ güvenlik grubunu kaldırdığınız ağ arabirimini alın.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. ipConfiguration'ın AccessControlList özelliğine $null atayın.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. Ağ Denetleyicisi'ne ağ arabirimi nesnesini ekleyin.

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

Güvenlik duvarı denetimi

Datacenter Güvenlik Duvarı için güvenlik duvarı denetim özelliği, SDN güvenlik duvarı kuralları tarafından işlenen tüm akışları kaydeder. Günlüğü etkinleştirilen tüm ağ güvenlik grupları kaydedilir. Günlük dosyalarının Azure Ağ İzleyicisi akış günlükleriyle tutarlı bir söz diziminde olması gerekir. Bu günlükler tanılama için kullanılabilir veya daha sonra analiz için arşivlenebilir.

Konak sunucularında güvenlik duvarı denetimini etkinleştirmeye yönelik örnek bir betik aşağıda verilmiştır. Başlangıçtaki değişkenleri güncelleştirin ve bunu Ağ Denetleyicisi dağıtılan bir Azure Stack HCI kümesinde çalıştırın:

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

Etkinleştirildikten sonra, her konakta belirtilen dizinde saatte yaklaşık bir kez yeni bir dosya görüntülenir. Bu dosyaları düzenli aralıklarla işlemeli ve konaklardan kaldırmalısınız. Geçerli dosyanın uzunluğu sıfırdır ve sonraki saat işaretine göre boşaltılana kadar kilitlenir:

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

Bu dosyalar bir dizi akış olayı içerir, örneğin:

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

Günlüğe kaydetmenin yalnızca GünlüğüEtkin olarak ayarlanmış kurallar için gerçekleştiğini unutmayın, örneğin:

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

Sonraki adımlar

İlgili bilgiler için bkz: