使用 PowerShell 篩選網路安全組的網路流量

您可以使用網路安全組來篩選虛擬網路子網輸入和輸出的網路流量。 網路安全性群組包含可依 IP 位址、連接埠和通訊協定篩選網路流量的安全性規則。 安全性規則會套用至子網路中部署的資源。 在本文中,您將學會如何:

  • 建立網路安全性群組和安全性規則
  • 建立虛擬網路,並將網路安全性群組與子網路產生關聯
  • 將虛擬機 (VM) 部署到子網
  • 測試流量篩選

如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

Azure Cloud Shell

Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。

要啟動 Azure Cloud Shell:

選項 範例/連結
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 Screenshot that shows an example of Try It for Azure Cloud Shell.
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 Button to launch Azure Cloud Shell.
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 Screenshot that shows the Cloud Shell button in the Azure portal

若要使用 Azure Cloud Shell:

  1. 啟動 Cloud Shell。

  2. 選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。

  3. 透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼或命令貼到 Cloud Shell 工作階段中。

  4. 選取 Enter 鍵執行程式碼或命令。

如果您選擇在本機安裝和使用 PowerShell,本文會要求使用 Azure PowerShell 模組 1.0.0 版或更新版本。 執行 Get-Module -ListAvailable Az 以尋找安裝的版本。 如果您需要升級,請參閱安裝 Azure PowerShell 模組。 如果您在本機執行 PowerShell,則也需要執行 Connect-AzAccount 以建立與 Azure 的連線。

建立網路安全性群組

網路安全組包含安全性規則。 安全性規則會指定來源和目的地。 來源和目的地可以是應用程式安全組。

建立應用程式安全性群組

首先,使用 New-AzResourceGroup 為本文中建立的所有資源建立資源群組。 下列範例會在 eastus 位置建立資源群組:

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

使用 New-AzApplicationSecurityGroup 建立應用程式安全組。 應用程式安全組可讓您將具有類似埠篩選需求的伺服器分組。 下列範例會建立兩個應用程式安全組。

$webAsg = New-AzApplicationSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Name myAsgWebServers `
  -Location eastus

$mgmtAsg = New-AzApplicationSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Name myAsgMgmtServers `
  -Location eastus

建立安全性規則

使用 New-AzNetworkSecurityRuleConfig 建立安全性規則。 下列範例會建立規則,允許透過埠 80 和 443 從因特網輸入至 myWebServers 應用程式安全組的流量:

$webRule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-Web-All" `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 100 `
  -SourceAddressPrefix Internet `
  -SourcePortRange * `
  -DestinationApplicationSecurityGroupId $webAsg.id `
  -DestinationPortRange 80,443

The following example creates a rule that allows traffic inbound from the internet to the *myMgmtServers* application security group over port 3389:

$mgmtRule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-RDP-All" `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 110 `
  -SourceAddressPrefix Internet `
  -SourcePortRange * `
  -DestinationApplicationSecurityGroupId $mgmtAsg.id `
  -DestinationPortRange 3389

在本文中,RDP(埠 3389)會公開給 myAsgMgmtServers VM 的因特網。 針對生產環境,建議您使用 VPN專用網連線來連線到您想要管理的 Azure 資源,而不是向因特網公開埠 3389。

建立網路安全性群組

使用 New-AzNetworkSecurityGroup 建立網路安全性群組。 下列範例會建立名為 myNsg 的網路安全組:

$nsg = New-AzNetworkSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myNsg `
  -SecurityRules $webRule,$mgmtRule

建立虛擬網路

使用 New-AzVirtualNetwork 建立虛擬網路。 下列範例會建立名為 myVirtualNetwork 的虛擬:

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

使用 New-AzVirtualNetworkSubnetConfig 建立子網組態,然後使用 Set-AzVirtualNetwork 將子網組態寫入虛擬網路。 下列範例會將名為 mySubnet 的子網新增至虛擬網路, 並將 myNsg 網路安全組與其產生關聯:

Add-AzVirtualNetworkSubnetConfig `
  -Name mySubnet `
  -VirtualNetwork $virtualNetwork `
  -AddressPrefix "10.0.2.0/24" `
  -NetworkSecurityGroup $nsg
$virtualNetwork | Set-AzVirtualNetwork

建立虛擬機器

建立 VM 之前,請使用 Get-AzVirtualNetwork 擷取具有子網的虛擬網路物件:

$virtualNetwork = Get-AzVirtualNetwork `
 -Name myVirtualNetwork `
 -Resourcegroupname myResourceGroup

使用 New-AzPublicIpAddress 為每個 VM 建立公用 IP 位址:

$publicIpWeb = New-AzPublicIpAddress `
  -AllocationMethod Dynamic `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myVmWeb

$publicIpMgmt = New-AzPublicIpAddress `
  -AllocationMethod Dynamic `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myVmMgmt

使用 New-AzNetworkInterface 建立兩個網路介面,並將公用 IP 位址指派給網路介面。 下列範例會建立網路介面、將 myVmWeb 公用 IP 位址與其產生關聯,並使它成為 myAsgWebServers 應用程式安全組的成員

$webNic = New-AzNetworkInterface `
  -Location eastus `
  -Name myVmWeb `
  -ResourceGroupName myResourceGroup `
  -SubnetId $virtualNetwork.Subnets[0].Id `
  -ApplicationSecurityGroupId $webAsg.Id `
  -PublicIpAddressId $publicIpWeb.Id

下列範例會建立網路介面、將 myVmMgmt 公用 IP 位址與其產生關聯,並使它成為 myAsgMgmtServers 應用程式安全組的成員

$mgmtNic = New-AzNetworkInterface `
  -Location eastus `
  -Name myVmMgmt `
  -ResourceGroupName myResourceGroup `
  -SubnetId $virtualNetwork.Subnets[0].Id `
  -ApplicationSecurityGroupId $mgmtAsg.Id `
  -PublicIpAddressId $publicIpMgmt.Id

在虛擬網路中建立兩個 VM,以便您可以在稍後的步驟中驗證流量篩選。

使用 New-AzVMConfig 建立 VM 組態,然後使用 New-AzVM 建立 VM。 下列範例會建立將做為網頁伺服器的 VM。 選項 -AsJob 會在背景中建立 VM,因此您可以繼續進行下一個步驟:

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

$webVmConfig = New-AzVMConfig `
  -VMName myVmWeb `
  -VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
  -ComputerName myVmWeb `
  -Credential $cred | `
Set-AzVMSourceImage `
  -PublisherName MicrosoftWindowsServer `
  -Offer WindowsServer `
  -Skus 2016-Datacenter `
  -Version latest | `
Add-AzVMNetworkInterface `
  -Id $webNic.Id
New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -VM $webVmConfig `
  -AsJob

建立 VM 作為管理伺服器:

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

# Create the web server virtual machine configuration and virtual machine.
$mgmtVmConfig = New-AzVMConfig `
  -VMName myVmMgmt `
  -VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
  -ComputerName myVmMgmt `
  -Credential $cred | `
Set-AzVMSourceImage `
  -PublisherName MicrosoftWindowsServer `
  -Offer WindowsServer `
  -Skus 2016-Datacenter `
  -Version latest | `
Add-AzVMNetworkInterface `
  -Id $mgmtNic.Id
New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -VM $mgmtVmConfig

虛擬機需要幾分鐘的時間才能建立。 在 Azure 完成建立 VM 之前,請勿繼續進行下一個步驟。

測試流量篩選

請使用 Get-AzPublicIpAddress 來傳回 VM 的公用 IP 位址。 下列範例會傳回 myVmMgmt VM 的公用 IP 位址:

Get-AzPublicIpAddress `
  -Name myVmMgmt `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

使用下列命令,從本機計算機使用 myVmMgmt VM 建立遠端桌面會話。 以上一個命令傳回的 IP 位址取代 <publicIpAddress>

mstsc /v:<publicIpAddress>

開啟所下載的 RDP 檔案。 如果出現提示,請選取 [連接]

輸入您在建立虛擬機器時指定的使用者名稱和密碼 (您可能需要選取 [更多選擇],然後選取 [使用不同的帳戶] 以指定您在建立虛擬機器時輸入的認證),然後選取 [確定]。 您可能會在登入程序期間收到憑證警告。 選取 [是] 以繼續進行連線。

連線成功,因為允許從因特網輸入埠 3389 到 myAsgMgmtServers 應用程式安全組,而連結至 myVmMgmt VM 的網路介面位於中。

使用下列命令,從 myVmMgmt VM 使用下列命令,從 PowerShell 建立 myVmWeb VM 的遠端桌面連線:

mstsc /v:myvmWeb

線上成功,因為每個網路安全組內的預設安全性規則允許虛擬網路內所有IP位址之間的所有埠之間的流量。 您無法從因特網建立 myVmWeb VM 的遠端桌面連線,因為 myAsgWebServers 的安全性規則不允許從因特網輸入埠 3389。

使用下列命令,從 PowerShell 在 myVmWeb VM 上安裝 Microsoft IIS:

Install-WindowsFeature -name Web-Server -IncludeManagementTools

IIS 安裝完成之後,請中斷與 myVmWeb VM 的連線,這會讓您在 myVmMgmt VM 遠端桌面連線中 若要檢視 IIS 歡迎畫面,請開啟因特網瀏覽器並流覽至 http://myVmWeb.

中斷與 myVmMgmt VM 的連線。

在您的計算機上,從 PowerShell 輸入下列命令,以擷取 myVmWeb 伺服器的公用 IP 位址

Get-AzPublicIpAddress `
  -Name myVmWeb `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

若要確認您可以從 Azure 外部存取 myVmWeb 網頁伺服器,請在您的電腦上開啟因特網瀏覽器並瀏覽至 http://<public-ip-address-from-previous-step>。 線上成功,因為允許從因特網輸入埠 80 到連結至 myVmWeb VM 網路介面的 myAsgWebServers 應用程式安全組。

清除資源

您可以使用 Remove-AzResourceGroup 來移除不再需要的資源群組,以及其所包含的所有資源:

Remove-AzResourceGroup -Name myResourceGroup -Force

下一步

在本文中,您已建立網路安全組,並將其關聯至虛擬網路子網。 若要深入了解網路安全性群組,請參閱網路安全性群組概觀管理網路安全性群組

Azure 依預設會路由傳送子網路之間的流量。 您可以改採其他方式,例如,透過作為防火牆的 VM 路由傳送子網路之間的流量。 若要瞭解如何,請參閱 建立路由表