Mengonfigurasi grup keamanan jaringan di Azure Stack HCI Anda dengan PowerShell

Berlaku untuk: Azure Stack HCI, versi 23H2 dan 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016

Artikel ini menyediakan instruksi untuk mengonfigurasi kelompok keamanan jaringan (NSG) untuk mengelola arus lalu lintas data menggunakan Datacenter Firewall for Software Defined Networking (SDN) di Azure Stack HCI menggunakan Windows PowerShell. Anda mengaktifkan dan mengonfigurasi Firewall Pusat Data dengan membuat grup keamanan jaringan yang diterapkan ke subnet atau antarmuka jaringan.

Contoh skrip dalam artikel ini menggunakan perintah Windows PowerShell yang diekspor dari modul NetworkController. Anda juga dapat menggunakan Windows Admin Center untuk mengonfigurasi dan mengelola grup keamanan jaringan.

Mengonfigurasi Datacenter Firewall untuk mengizinkan semua lalu lintas

Setelah Anda menyebarkan SDN, Anda harus menguji konektivitas jaringan dasar di lingkungan baru Anda. Agar dapat mewujudkan hal tersebut, buat aturan untuk Datacenter Firewall yang mengizinkan semua lalu lintas jaringan tanpa batasan.

Gunakan entri dalam tabel berikut untuk membuat seperangkat aturan yang mengizinkan semua lalu lintas jaringan masuk dan keluar.

IP Sumber IP Tujuan Protokol Port Sumber Port Tujuan Arah Tindakan Prioritas
* * Semua * * Masuk Bolehkan 100
* * Semua * * Keluar Izinkan 110

Dalam contoh ini, Anda membuat grup keamanan jaringan dengan dua aturan:

  1. AllowAll_Inbound - memungkinkan semua lalu lintas jaringan untuk masuk ke antarmuka jaringan tempat grup keamanan jaringan ini dikonfigurasi.
  2. AllowAllOutbound - mengizinkan semua lalu lintas untuk keluar dari antarmuka jaringan. Grup keamanan jaringan ini, yang diidentifikasi oleh ID sumber daya "AllowAll-1" sekarang siap digunakan dalam subnet virtual dan antarmuka jaringan.

Anda dapat menjalankan perintah ini dari komputer mana pun yang memiliki akses ke titik akhir REST Pengontrol Jaringan. Pertama, buka sesi PowerShell. Dalam contoh ini, gunakan cmdlet Enter-PSSession dan ganti <computer-name> dengan nama komputer yang memiliki titik akhir REST Pengontrol Jaringan.

Enter-PSSession <computer-name>

Kemudian, jalankan skrip berikut untuk membuat grup keamanan jaringan:

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

Catatan

Referensi perintah Windows PowerShell untuk Pengontrol Jaringan ada di cmdlet Pengontrol Jaringan.

Menggunakan grup keamanan jaringan untuk membatasi lalu lintas pada subnet

Dalam contoh ini, Anda membuat grup keamanan jaringan yang mencegah komputer virtual (VM) dalam subnet 192.168.0.0/24 berkomunikasi satu sama lain. Jenis kelompok keamanan jaringan ini berguna untuk membatasi kemampuan penyerang untuk menyebar secara lateral dalam subnet, sambil tetap memungkinkan VM menerima permintaan dari luar subnet, dan untuk berkomunikasi dengan layanan lain di subnet lain.

IP Sumber IP Tujuan Protokol Port Sumber Port Tujuan Arah Tindakan Prioritas
192.168.0.1 * Semua * * Masuk Bolehkan 100
* 192.168.0.1 Semua * * Keluar Izinkan 101
192.168.0.0/24 * Semua * * Masuk Blokir 102
* 192.168.0.0/24 Semua * * Keluar Blokir 103
* * Semua * * Masuk Bolehkan 104
* * Semua * * Keluar Izinkan 105

Grup keamanan jaringan yang dibuat oleh contoh skrip di bawah ini, yang diidentifikasi oleh ID sumber daya Subnet-192-168-0-0, sekarang dapat diterapkan ke subnet jaringan virtual yang menggunakan alamat subnet "192.168.0.0/24". Antarmuka jaringan apa pun yang melekat pada subnet jaringan virtual tersebut secara otomatis mendapatkan aturan kelompok keamanan jaringan di atas yang diterapkan.

Berikut ini adalah contoh skrip untuk membuat grup keamanan jaringan ini menggunakan REST API Pengontrol Jaringan:

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

Menambahkan grup keamanan jaringan ke antarmuka jaringan

Setelah membuat grup keamanan jaringan dan menetapkannya ke subnet virtual, Anda mungkin ingin mengambil alih grup keamanan jaringan default tersebut pada subnet virtual dengan kelompok keamanan jaringan tertentu untuk antarmuka jaringan individual. Mulai dari Pusat Data Windows Server 2019, Anda dapat menerapkan grup keamanan jaringan tertentu langsung ke antarmuka jaringan yang terpasang pada jaringan logis SDN, selain jaringan virtual SDN. Jika Anda memiliki kelompok keamanan jaringan yang diatur pada subnet virtual yang terhubung ke antarmuka jaringan, kedua kelompok keamanan jaringan diterapkan, dan kelompok keamanan jaringan antarmuka jaringan diprioritaskan di atas kelompok keamanan jaringan subnet virtual.

Dalam contoh ini, kami menunjukkan cara menambahkan grup keamanan jaringan ke jaringan virtual.

Tip

Dimungkinkan juga untuk menambahkan kelompok keamanan jaringan pada saat yang sama saat Anda membuat antarmuka jaringan.

  1. Dapatkan atau buat antarmuka jaringan tempat Anda akan menambahkan grup keamanan jaringan.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Dapatkan atau buat grup keamanan jaringan yang akan Anda tambahkan ke antarmuka jaringan.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. Tetapkan grup keamanan jaringan ke properti AccessControlList antarmuka jaringan.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. Tambahkan antarmuka jaringan di Pengontrol Jaringan.

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

Menghapus grup keamanan jaringan dari antarmuka jaringan

Dalam contoh ini, kami menunjukkan kepada Anda cara menghapus grup keamanan jaringan dari antarmuka jaringan. Menghapus grup keamanan jaringan menerapkan sekumpulan aturan default ke antarmuka jaringan. Kumpulan aturan default mengizinkan semua lalu lintas keluar tetapi memblokir semua lalu lintas masuk. Jika Anda ingin mengizinkan semua lalu lintas masuk, Anda harus mengikuti contoh sebelumnya untuk menambahkan grup keamanan jaringan yang memungkinkan semua lalu lintas masuk dan semua lalu lintas keluar.

  1. Dapatkan antarmuka jaringan tempat Anda akan menghapus grup keamanan jaringan.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Tetapkan $null ke properti AccessControlList dari ipConfiguration.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. Tambahkan objek antarmuka jaringan di Pengontrol Jaringan.

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

Audit firewall

Kemampuan audit firewall untuk Firewall Pusat Data merekam alur apa pun yang diproses oleh aturan firewall SDN. Semua grup keamanan jaringan yang mengaktifkan pengelogan direkam. File log harus dalam sintaks yang konsisten dengan log aliran Azure Network Watcher. Log ini dapat digunakan untuk diagnostik atau diarsipkan untuk analisis selanjutnya.

Berikut adalah contoh skrip untuk mengaktifkan audit firewall di server host. Perbarui variabel di awal dan jalankan ini di kluster Azure Stack HCI dengan Pengontrol Jaringan yang disebarkan:

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

Setelah diaktifkan, file baru muncul di direktori yang ditentukan pada setiap host sekitar sekali per jam. Anda harus memproses file ini secara berkala dan menghapusnya dari host. File saat ini memiliki panjang nol dan terkunci sampai dibersihkan pada tanda jam berikutnya:

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

File ini berisi urutan peristiwa aliran, misalnya:

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

Harap diperhatikan, pencatatan hanya terjadi untuk aturan yang mengatur Pencatatan ke Aktif, misalnya:

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

Langkah berikutnya

Untuk informasi terkait, lihat: