使用 PowerShell 篩選網路安全組的網路流量
您可以使用網路安全組來篩選虛擬網路子網輸入和輸出的網路流量。 網路安全性群組包含可依 IP 位址、連接埠和通訊協定篩選網路流量的安全性規則。 安全性規則會套用至子網路中部署的資源。 在本文中,您將學會如何:
- 建立網路安全性群組和安全性規則
- 建立虛擬網路,並將網路安全性群組與子網路產生關聯
- 將虛擬機 (VM) 部署到子網
- 測試流量篩選
如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
Azure Cloud Shell
Azure Cloud Shell 是裝載於 Azure 中的互動式殼層環境,可在瀏覽器中使用。 您可以使用 Bash 或 PowerShell 搭配 Cloud Shell,與 Azure 服務共同使用。 您可以使用 Cloud Shell 預先安裝的命令,執行本文提到的程式碼,而不必在本機環境上安裝任何工具。
要啟動 Azure Cloud Shell:
選項 | 範例/連結 |
---|---|
選取程式碼或命令區塊右上角的 [試試看]。 選取 [試試看] 並不會自動將程式碼或命令複製到 Cloud Shell 中。 | |
請前往 https://shell.azure.com,或選取 [啟動 Cloud Shell] 按鈕,在瀏覽器中開啟 Cloud Shell。 | |
選取 Azure 入口網站右上方功能表列上的 [Cloud Shell] 按鈕。 |
若要使用 Azure Cloud Shell:
啟動 Cloud Shell。
選取程式碼區塊 (或命令區塊) 上的 [複製] 按鈕以複製程式碼或命令。
透過在 Windows 和 Linux 上選取 Ctrl+Shift+V;或在 macOS 上選取 Cmd+Shift+V,將程式碼或命令貼到 Cloud Shell 工作階段中。
選取 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 路由傳送子網路之間的流量。 若要瞭解如何,請參閱 建立路由表。