Azure 網路安全群組或 Azure NSGs 允許您在一個或多個 Azure 資源之間篩選網路流量的進出。如果您需要防止對 Azure 資源的訪問,您必須了解 NSGs 的運作方式。
在本文中,您將學習 Azure NSG 的目的以及如何使用 PowerShell 指令碼語言進行設定。
先備條件
- 一個要針對的 Azure 資源。本教程將使用按使用量計費的訂閱和一個 Windows Server 2019 Azure 虛擬機器。
- PowerShell 7+。較早版本的 PowerShell 可能也可以運作,但本教程使用的是 PowerShell 7.0.1 進行配置。
- Azure Az 模組 PowerShell 模組
了解 Azure NSGs
將 Azure NSG 視為防火牆。防火牆由定義對進出流量採取的動作的規則集組成。防火牆通常會附帶預設的規則集,這些規則決定了什麼可以通過防火牆,什麼不可以通過;Azure NSGs 也有類似的功能。
與傳統防火牆不同,Azure NSG還有一個名為服務標籤的雲端概念。服務標籤是Azure對地址範圍的抽象,使其更易於管理。
讓我們簡要介紹一下這些重要主題。
使用服務標籤簡化規則配置
在雲端服務中,IP地址和範圍通常會變動。這可能會使維護手動定義的Azure IP範圍規則集變得困難。幸運的是,Azure定義了許多不同的服務標籤,您的NSG規則可以針對這些標籤進行定位。
服務標籤是一個概念,它始終使用最新的地址列表。服務標籤是一種將地址範圍集合分配給易於管理的佔位符的方法。

注意默認規則集
當您創建並應用Azure NSG時,您首先需要了解這些NSG所應用的規則。這些默認規則集是不可變的,並且為入站和出站流量創建。
Azure NSG規則集中的每個規則都有一個優先級。優先級決定了操作順序或哪些規則優先於其他規則。例如,如果存在一個優先級為65000的規則阻止所有入站流量,而您創建了一個優先級為64999的規則允許端口80,那麼Azure NSG將阻止所有流量,除了端口80。

預設的規則集無法更改,但您可以使用較高優先級的規則覆蓋它們,如上所示。這些規則中的每一個都適用於TCP、UDP和ICMP等所有協議。
請確保您的規則使用低於
65500
的數字來覆蓋默認規則!
在創建Azure NSG時,您將看到各種默認規則:
入站規則
AllowVNetInBound
– 此入站規則包含為虛擬網路和所有連接的本地網區定義的所有IP地址範圍。此外,此規則還包含了與虛擬網路網關相連的虛擬網路、主機的虛擬IP地址以及用於使用者定義路由的任何地址前綴。此規則設置了65000
的優先級。AllowAzureLoadBalancerInBound
–AzureLoadBalancer
服務標籤對應到主機的虛擬IP地址168.63.129.16
,其中Azure健康探測器發起。實際流量並不經過此處,如果您不使用Azure負載平衡,可以覆蓋此規則。主機的虛擬IP地址存在於所有區域,專門提供基本的基礎架構服務,如DHCP、DNS、IMDS和健康監控。此規則設置了65001
的優先級。DenyAllInbound
– 設置為最後一個規則,使用優先級65500
,此規則拒絕所有未明確允許的入站流量。
出站規則
AllowVNetOutBound
– 包含虛擬網路定義的所有 IP 位址範圍,連接的本地位址空間,互連的虛擬網路,連接到虛擬網路閘道的虛擬網路,主機的虛擬 IP 位址,以及在使用者定義路由中使用的任何位址前綴。此規則設定為優先順序65000
。AllowInternetOutBound
– 虛擬網路外部且可由公共網際網路訪問的 IP 位址空間。包括 Azure 擁有的公共 IP 位址範圍。此規則設定為優先順序65001
。DenyAllOutBound
– 類似於入站規則集中的規則,此規則設定為最後一個規則,使用優先順序65500
。此出站規則將拒絕所有非明確允許的流量。
使用 PowerShell 建立 Azure NSGs
言歸正傳,讓我們開始使用 PowerShell 建立一些 Azure NSGs!假設您已在 PowerShell 控制台中進行身份驗證,請繼續閱讀。
相關文章: Connect-AzAccount: 使用 PowerShell 連接到 Azure
要使用 PowerShell 建立 Azure NSG,您需要一個命令:New-AzNetworkSecurityGroup
。使用此命令建立 NSG,提供名稱、要在其下建立 NSG 的資源群組名稱以及位置。
下面的示例代码使用New-AzNetworkSecurityGroup
cmdlet在位于eastus
Azure数据中心的Articles资源组中创建名为NSG-MyVM
的NSG。
使用PowerShell创建Azure NSG规则
一旦您拥有了NSG,可能默认的规则不够用。您需要创建自己的规则。
为远程桌面协议配置入站规则
A common administrative task is the need to create an inbound rule for the Remote Desktop Protocol (RDP). In the tutorial’s example, perhaps it’s going to be applied to a Windows Server Azure VM and you need to access the VM via RDP. In that case, you need to open up port 3389 inbound.
向现有的NSG添加新的入站规则需要三个步骤:
- 运行
Get-AzNetworkSecurityGroup
命令以检索现有的NSG。 - 运行
Add-AzNetworkSecurityRuleConfig
以创建规则。 - 运行
Set-AzNetworkSecurityGroup
命令将该规则应用于NSG。
下面的示例代码使用Get-AzNetworkSecurityGroup
检索现有的NSG。然后,使用Add-AzNetworkSecurityRuleConfig
定义规则,然后使用Set-AzNetworkSecurityGroup
cmdlet将其应用于现有的NSG。
優先權參數決定了規則的評估順序,
200
的值接近頂部,而4096
是最低優先權的規則。
拒絕出站 SANS 建議流量
由於很難知道應用程序可能需要使用的所有可能埠,所以通常不會封鎖出站流量。幸運的是,您可以從 SANS 學院獲得一些專家出口過濾建議,該組織是廣受信賴的信息安全標準組織。
要實施 SANS 的建議,我們可以使用上面提供的三個步驟,但這次創建一個具有多個埠和方向
為出站的規則。
- MS RPC – TCP 和 UDP 埠 135
- NetBIOS/IP – TCP 和 UDP 埠 137-139
- SMB/IP – TCP 埠 445
- 簡單文件傳輸協議 (TFTP) – UDP 埠 69
- Syslog – UDP 埠 514
- 簡單網絡管理協議 (SNMP) – UDP 埠 161-162
以下代碼使用Get-AzNetworkSecurityGroup
cmdlet 檢索現有的 NSG 規則。使用Add-AzNetworkSecurityRuleConfig
定義出站規則,並通過Set-AzNetworkSecurityGroup
cmdlet 應用。
當然,這些端口中有些是有價值且必要的,這取決於您所提供的服務。您可能需要根據應用程式的要求自定義此清單,通常由供應商提供或使用類似於netstat
的工具尋找開啟的端口。
相關資訊:使用 Netstat 和 PowerShell 尋找端口
設定特定子網的 Azure NSG
也許您已經通過子網對虛擬網路空間進行劃分。為了更細粒度地控制該子網中的流量,您可以僅將 NSG 應用於特定子網。
下面的程式碼片段尋找整個地址前綴並將 NSG 應用於其上。
接下來,了解如何使用網路介面進一步劃分和限制僅所需的 NSG,例如網路介面。
將 Azure NSG 應用於網路介面
與子網路的工作方式相似,您可以直接將NSG規則應用於網路介面。這個細分層級通常是不必要的,但當您的虛擬機器有多個網路介面時,根據需要對個別的網路介面應用不同的規則集可能是有意義的。
與限制子網路的方式類似,您可以對個別的網路介面應用規則。在這種情況下,您使用Get-AzNetworkInterface
命令來擷取給定虛擬機器上的特定網路介面。這個網路介面將具有先前建立的NSG設定為NetworkSecurityGroup
屬性。
那麼如何診斷和分析通過NSG的流量呢?繼續閱讀以了解有關NSG流量日誌以及如何使用它們的資訊!
使用NSG流量日誌進行除錯和故障排除
在NSG的建立和使用過程中,您可能會發現您需要更進一步的除錯來排除破損的規則或分析流量。流量日誌是Azure Network Watcher的一個功能,它記錄通過NSG的IP流量的相關資訊。
一旦Azure Network Watcher捕獲到網路流量,它就會將該資料存儲在Azure存儲帳戶中。使用PowerShell,您可以配置Azure NSG流量日誌來解析該Azure存儲帳戶並進行調試和更好地排除故障。
相關文章: 如何下載並安裝AzCopy工具
啟用NSG流量日誌在PowerShell中大致需要三個步驟:
- 註冊
Microsoft.Insights
提供者。 - 建立一個 Operational Insights 工作區 來儲存資料。
- 使用
Set-AzNetworkWatcherConfigFlowLog
指令啟用 NSG 流量記錄。
為了使 Azure NSG 流量記錄的設定更加容易,以下 PowerShell 程式碼將簡化所需的不同步驟。特別是,此程式碼將建立一個 Operational Insights 工作區,並將流量記錄設定與正確的訂閱、工作區和 NSG 關聯。
流量記錄包含許多不同的屬性,這在防火牆記錄中很常見。這包括源 IP、目標 IP、連接埠、協議和時間戳記等屬性。版本 1 和版本 2 的記錄有一個重大差異,即版本 2 具有流量狀態的概念。這標記了流量的繼續和終止,以及流量帶寬資訊。
下一步
Azure NSG 是限制和審核資源流量的強大工具。有效使用時,您可以適當地保護您的資源和基礎架構。通過 NSG 流量記錄的審核功能以及將 NSG 限制在子網路或網路介面卡上的能力,您可以按需範圍設定規則並驗證所有流量是否符合預期。