Azure Stack HCı 'de Software-Defined ağı için veri merkezi güvenlik duvarı kullanmaUse Datacenter Firewall for Software-Defined Networking in Azure Stack HCI

Uygulama hedefi: Azure Stack HI, sürüm 20H2; Windows Server 2019Applies to: Azure Stack HCI, version 20H2; Windows Server 2019

Bu konuda, Windows PowerShell kullanarak Azure Stack HıMıNDAKI yazılım tanımlı ağ (SDN) için veri Merkezi güvenlik duvarı 'nı kullanarak veri trafiği akışını yönetmek üzere erişim denetim listelerini (ACL 'ler) yapılandırma yönergeleri sağlanmaktadır.This topic provides instructions for configuring access control lists (ACLs) to manage data traffic flow using Datacenter Firewall for Software Defined Networking (SDN) in Azure Stack HCI using Windows PowerShell. Bir alt ağa veya bir ağ arabirimine uygulanan ACL 'Ler oluşturarak veri merkezi güvenlik duvarını etkinleştirir ve yapılandırırsınız.You enable and configure Datacenter Firewall by creating ACLs that get applied to a subnet or a network interface. Bu konudaki örnek betikler, Networkcontroller modülünden aktarılmış Windows PowerShell komutlarını kullanır.The example scripts in this topic use Windows PowerShell commands exported from the NetworkController module. ACL 'Leri yapılandırmak ve yönetmek için Windows Yönetim merkezini de kullanabilirsiniz.You can also use Windows Admin Center to configure and manage ACLs.

Veri Merkezi güvenlik duvarını tüm trafiğe izin verecek şekilde yapılandırmaConfigure Datacenter Firewall to allow all traffic

SDN 'yi dağıttıktan sonra, yeni ortamınızda temel ağ bağlantısını sınamanız gerekir.Once you deploy SDN, you should test for basic network connectivity in your new environment. Bunu gerçekleştirmek için, bir veri merkezi güvenlik duvarı için tüm ağ trafiğine kısıtlama olmadan izin veren bir kural oluşturun.To accomplish this, create a rule for Datacenter Firewall that allows all network traffic, without restriction.

Tüm gelen ve giden ağ trafiğine izin veren bir kurallar kümesi oluşturmak için aşağıdaki tablodaki girdileri kullanın.Use the entries in the following table to create a set of rules that allow all inbound and outbound network traffic.

Kaynak IPSource IP Hedef IPDestination IP ProtokolProtocol Kaynak Bağlantı NoktasıSource Port Hedef Bağlantı NoktasıDestination Port YönDirection EylemAction ÖncelikPriority
* * TümüAll * * GelenInbound İzin VerAllow 100100
* * TümüAll * * GidenOutbound İzin VerAllow 110110

Bu örnekte, iki kurala sahip bir ACL oluşturursunuz:In this example, you create an ACL with two rules:

  1. AllowAll_Inbound -tüm ağ TRAFIĞININ Bu ACL 'nin yapılandırıldığı ağ arabirimine geçmesine izin verir.AllowAll_Inbound - allows all network traffic to pass into the network interface where this ACL is configured.
  2. Allowalloutbağlanmadı -tüm trafiğin ağ arabiriminden geçmesine izin verir.AllowAllOutbound - allows all traffic to pass out of the network interface. "AllowAll-1" kaynak KIMLIĞI tarafından tanımlanan bu ACL artık sanal alt ağlarda ve ağ arabirimlerinde kullanılmak üzere hazırdır.This ACL, identified by the resource ID "AllowAll-1" is now ready to be used in virtual subnets and network interfaces.

İlk olarak, bir PowerShell oturumu açarak küme düğümlerinden birine bağlanın:First, connect to one of the cluster nodes by opening a PowerShell session:

Enter-PSSession <server-name>

Ardından, ACL oluşturmak için aşağıdaki betiği çalıştırın:Then, run the following script to create the ACL:

$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 'lerindebulunur.The Windows PowerShell command reference for Network Controller is located in the topic Network Controller cmdlets.

Alt ağdaki trafiği sınırlamak için ACL 'Leri kullanmaUse ACLs to limit traffic on a subnet

Bu örnekte, 192.168.0.0/24 alt ağı içindeki sanal makinelerin (VM 'Ler) birbirleriyle iletişim kurmasını engelleyen bir ACL oluşturursunuz.In this example, you create an ACL that prevents virtual machines (VMs) within the 192.168.0.0/24 subnet from communicating with each other. Bu tür bir ACL, bir saldırganın alt ağa dışarıdan yayılmasının yanı sıra VM 'Lerin alt ağ dışından istek almasına izin verirken ve diğer alt ağlardaki diğer hizmetlerle iletişim kurmak için yararlıdır.This type of ACL is useful for limiting the ability of an attacker to spread laterally within the subnet, while still allowing the VMs to receive requests from outside of the subnet, as well as to communicate with other services on other subnets.

Kaynak IPSource IP Hedef IPDestination IP ProtokolProtocol Kaynak Bağlantı NoktasıSource Port Hedef Bağlantı NoktasıDestination Port YönDirection EylemAction ÖncelikPriority
bilgisayarın192.168.0.1 * TümüAll * * GelenInbound İzin VerAllow 100100
* bilgisayarın192.168.0.1 TümüAll * * GidenOutbound İzin VerAllow 101101
192.168.0.0/24192.168.0.0/24 * TümüAll * * GelenInbound BlokBlock 102102
* 192.168.0.0/24192.168.0.0/24 TümüAll * * GidenOutbound BlokBlock 103103
* * TümüAll * * GelenInbound İzin VerAllow 104104
* * TümüAll * * GidenOutbound İzin VerAllow 105105

Aşağıdaki örnek komut dosyası tarafından oluşturulan ACL, kaynak KIMLIĞI alt ağı-192-168-0-0 tarafından tanımlanan, artık "192.168.0.0/24" alt ağ adresini kullanan bir sanal ağ alt ağına uygulanabilir.The ACL created by the example script below, identified by the resource ID Subnet-192-168-0-0, can now be applied to a virtual network subnet that uses the "192.168.0.0/24" subnet address. Bu sanal ağ alt ağına bağlı herhangi bir ağ arabirimi, uygulanan yukarıdaki ACL kurallarını otomatik olarak alır.Any network interface that is attached to that virtual network subnet automatically gets the above ACL rules applied.

Aşağıda, ağ denetleyicisi REST API kullanarak bu ACL 'yi oluşturmak için örnek bir komut dosyası verilmiştir:The following is an example script to create this ACL using the Network Controller 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

Ağ arabirimine bir ACL eklemeAdd an ACL to a network interface

Bir ACL oluşturup bir sanal alt ağa atadıktan sonra, tek bir ağ arabirimi için belirli bir ACL ile sanal alt ağda bu varsayılan ACL 'yi geçersiz kılmak isteyebilirsiniz.Once you've created an ACL and assigned it to a virtual subnet, you might want to override that default ACL on the virtual subnet with a specific ACL for an individual network interface. Bu durumda, sanal ağ yerine VLAN 'Lara bağlı olan ağ arabirimlerine doğrudan belirli ACL 'Leri uygularsınız.In this case, you apply specific ACLs directly to network interfaces attached to VLANs, instead of the virtual network. Ağ arabirimine bağlı sanal alt ağda bir ACL ayarladıysanız, her iki ACL de uygulanır ve sanal alt ağ ACL 'Lerinin üzerindeki ağ arabirimi ACL 'Lerini önceliklendirir.If you have ACLs set on the virtual subnet connected to the network interface, both ACLs are applied and prioritizes the network interface ACLs above the virtual subnet ACLs.

Bu örnekte, bir sanal ağa ACL eklemeyi gösteririz.In this example, we demonstrate how to add an ACL to a virtual network.

İpucu

Ayrıca, ağ arabirimini oluşturduğunuz anda bir ACL eklemek mümkündür.It is also possible to add an ACL at the same time that you create the network interface.

  1. ACL 'yi ekleyeceğiniz ağ arabirimini alın veya oluşturun.Get or create the network interface to which you will add the ACL.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Ağ arabirimine ekleyeceğiniz ACL 'yi alın veya oluşturun.Get or create the ACL you will add to the network interface.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. ACL 'yi ağ arabiriminin AccessControlList özelliğine atayın.Assign the ACL to the AccessControlList property of the network interface.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. Ağ Denetleyicisi ' ne ağ arabirimini ekleyin.Add the network interface in Network Controller.

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

Ağ arabiriminden ACL kaldırmaRemove an ACL from a network interface

Bu örnekte, bir ACL 'yi ağ arabiriminden nasıl kaldıracağız gösterilmektedir.In this example, we show you how to remove an ACL from a network interface. ACL 'yi kaldırmak, varsayılan kurallar kümesini ağ arabirimine uygular.Removing an ACL applies the default set of rules to the network interface. Varsayılan kurallar kümesi tüm giden trafiğe izin verir, ancak tüm gelen trafiği engeller.The default set of rules allows all outbound traffic but blocks all inbound traffic. Tüm gelen trafiğe izin vermek istiyorsanız, tüm gelen ve giden trafiğe izin veren bir ACL eklemek için önceki örneği izlemeniz gerekir.If you want to allow all inbound traffic, you must follow the previous example to add an ACL that allows all inbound and all outbound traffic.

  1. ACL 'yi kaldıracağınız ağ arabirimini alın.Get the network interface from which you will remove the ACL.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. $Null, IP Yapılandırması \ ' nin AccessControlList özelliğine atayın.Assign $null to the AccessControlList property of the ipConfiguration.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. Ağ Denetleyicisi ' ne ağ arabirimi nesnesini ekleyin.Add the network interface object in Network Controller.

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

Güvenlik Duvarı denetimiFirewall auditing

Güvenlik Duvarı denetimi, SDN güvenlik duvarı kuralları tarafından işlenen herhangi bir akışı kaydeden veri merkezi güvenlik duvarı için yeni bir özelliktir.Firewall auditing is a new capability for the Datacenter Firewall that records any flow processed by SDN firewall rules. Günlüğe kaydetme etkin olan tüm ACL 'Ler kaydedilir.All ACLs that have logging enabled are recorded. Günlük dosyaları, Azure Ağ İzleyicisi akış günlükleriile tutarlı bir sözdiziminde olmalıdır.The log files must be in a syntax that is consistent with the Azure Network Watcher flow logs. Bu Günlükler, daha sonraki analizler için tanılama veya arşivlenmiş için kullanılabilir.These logs can be used for diagnostics or archived for later analysis.

Konak sunucularında güvenlik duvarı denetimini etkinleştirmek için örnek bir betik aşağıda verilmiştir.Here is a sample script to enable firewall auditing on the host servers. Başlangıçta değişkenleri güncelleştirin ve bunu ağ denetleyicisi dağıtılan bir Azure Stack HCI kümesinde çalıştırın:Update the variables at the beginning and run this on an Azure Stack HCI cluster with Network Controller deployed:

$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 bir ana bilgisayardaki belirtilen dizinde saatte bir kez yeni bir dosya görüntülenir.Once enabled, a new file appears in the specified directory on each host about once per hour. Bu dosyaları düzenli olarak işlemeli ve konaklardan kaldırmalısınız.You should periodically process these files and remove them from the hosts. Geçerli dosyanın uzunluğu sıfır ve sonraki saat işaretiyle temizlenene kadar kilitli:The current file has zero length and is locked until flushed at the next hour mark:

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 akış olayları dizisi içerir, örneğin:These files contain a sequence of flow events, for example:

{
    "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 kaydetme yalnızca, günlüğü etkin olarak ayarlanmış kurallar için gerçekleşir, örneğin:Note, logging takes place only for rules that have Logging set to Enabled, for example:

{
    "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ımlarNext steps

İlgili bilgiler için Ayrıca bkz:For related information, see also: