收集 Microsoft IAS / 網路政策伺服器 (NPS) 記錄
本文說明如何使用 Microsoft Azure Blob 儲存體 V2 設定 Google SecOps 資訊提供,藉此收集 Microsoft Internet Authentication Service (IAS) / Network Policy Server (NPS) 記錄。
Microsoft 網路政策伺服器 (NPS) 是 Microsoft 實作的 RADIUS (遠端使用者撥入驗證) 伺服器和 Proxy。NPS 可集中管理 VPN 連線、無線存取點、802.1X 驗證交換器和撥號遠端存取的網路存取驗證、授權和會計。在 Windows Server 2003 和更早版本中,NPS 稱為網際網路驗證服務 (IAS)。由於 NPS 是以 Windows Server 角色執行,沒有原生雲端匯出功能,因此本指南會使用 Azure 監視器代理程式,從本機檔案系統收集 NPS 帳戶記錄檔,並透過 Log Analytics 工作區將這些檔案傳送至 Azure Blob 儲存體。
事前準備
請確認您已完成下列事前準備事項:
Google SecOps 執行個體
具備下列權限的 Microsoft Azure 入口網站特殊存取權:
- 建立儲存空間帳戶
- 建立及管理 Log Analytics 工作區
- 建立資料收集規則
- 建立資料匯出規則
- 管理存取金鑰
Windows Server 2016 以上版本,並安裝 NPS 角色
NPS 伺服器的管理員存取權
從 NPS 伺服器到 Azure 的網路連線 (通訊埠 443 的 HTTPS 外送連線)
設定 NPS 會計和記錄
啟用 NPS,以 IAS 格式將驗證和會計要求記錄到本機文字檔。
啟用 NPS 會計記錄
- 在執行 NPS 的 Windows Server 上,開啟「伺服器管理員」。
- 依序前往「工具」>「網路原則伺服器」。
- 在 NPS 控制台樹狀結構中,按一下「會計」。
- 在詳細資料窗格中,按一下「會計」下方的「設定會計」。
- 在「會計設定」精靈中,選取「記錄到本機電腦上的文字檔」,然後按一下「下一步」。
- 在「Configure Log File Properties」(設定記錄檔屬性) 頁面中,設定下列項目:
- 在「記錄下列資訊」部分,勾選要記錄的資訊核取方塊:
- 會計要求
- 驗證要求
- 週期性會計狀態
- 週期性驗證狀態
- 在「記錄失敗動作」部分,選取「如果記錄失敗,請捨棄連線要求」,讓 NPS 在記錄檔無法使用時停止處理。如果即使記錄失敗,仍要繼續處理 NPS,請取消勾選這個核取方塊。
- 在「記錄下列資訊」部分,勾選要記錄的資訊核取方塊:
- 點選「下一步」。
- 檢閱摘要,然後按一下 [Finish] (完成)。
設定記錄檔屬性
- 在 NPS 控制台樹狀結構中,按一下「會計」。
- 在詳細資料窗格的「記錄檔屬性」下方,按一下「變更記錄檔屬性」。
- 按一下「記錄檔」分頁標籤。
- 在「目錄」欄位中,確認或變更記錄檔位置:
- 預設位置:
%systemroot%\System32\LogFiles - 為方便管理,請指定專用目錄 (例如
C:\NPSLogs)
- 預設位置:
在「格式」下拉式選單中,選取「IAS (舊版)」。
。在「建立新的記錄檔」中,選取記錄輪替間隔:
- 每日 (建議用於大多數環境)
- 每週
- 每月
- 永不 (檔案大小無限制)
- 記錄檔達到這個大小時 (以 MB 為單位指定大小)
如要讓 NPS 在磁碟空間不足時刪除舊記錄檔,請選取「When the disk is full delete older log files」(磁碟空間不足時刪除舊記錄檔)。
按一下「確定」儲存設定。
確認記錄檔是否在設定的目錄中建立。
設定 Azure 儲存體帳戶
建立儲存空間帳戶
- 在 Azure 入口網站中,搜尋「儲存體帳戶」。
- 點選「+ 建立」。
提供下列設定詳細資料:
設定 值 訂閱項目 選取 Azure 訂閱項目 資源群組 選取現有資料庫或建立新資料庫 儲存空間帳戶名稱 輸入不重複的名稱 (例如 npsiaslogs)區域 選取區域 (例如 East US)效能 標準 (建議) 備援 GRS (異地備援儲存空間) 或 LRS (本機備援儲存空間) 按一下「Review + create」。
查看帳戶總覽,然後按一下「建立」。
等待部署作業完成。
取得儲存空間帳戶憑證
- 前往您剛建立的「儲存空間帳戶」。
- 在左側導覽列中,選取「Security + networking」下方的「Access keys」。
- 按一下「顯示金鑰」。
- 複製並儲存下列項目,以供日後使用:
- 儲存空間帳戶名稱:儲存空間帳戶名稱 (例如
npsiaslogs) - 金鑰 1 或金鑰 2:共用存取金鑰 (採用 Base64 編碼的 512 位元隨機字串)
- 儲存空間帳戶名稱:儲存空間帳戶名稱 (例如
取得 Blob 服務端點
- 在同一個儲存空間帳戶中,選取左側導覽列的「Endpoints」(端點)。
- 複製並儲存「Blob service」端點網址。
- 範例:
https://npsiaslogs.blob.core.windows.net/
- 範例:
建立 Log Analytics 工作區
如要接收 Azure Monitor 代理程式的自訂文字記錄,並匯出至 Azure Blob 儲存空間,必須先建立 Log Analytics 工作區。
- 在 Azure 入口網站中,搜尋「Log Analytics 工作區」。
- 點選「+ 建立」。
提供下列設定詳細資料:
設定 值 訂閱項目 選取 Azure 訂閱項目 資源群組 選取與儲存空間帳戶相同的資源群組 名稱 輸入不重複的名稱 (例如 nps-ias-workspace)區域 選取與儲存空間帳戶相同的區域 按一下「Review + Create」。
檢查設定,然後按一下「建立」。
等待部署作業完成。
建立自訂記錄資料表
在 Log Analytics 工作區中建立自訂表格,儲存 NPS/IAS 記錄資料。
- 在 Azure 入口網站中,前往您剛建立的 Log Analytics 工作區。
- 在左側導覽中,選取「設定」下方的「表格」。
- 依序點選「+ 建立」>「新的自訂記錄 (以 DCR 為準)」。
- 在「Table name」(資料表名稱) 欄位中輸入
NpsIasLogs。完整資料表名稱為NpsIasLogs_CL。 點選「建立」。
將 NPS 伺服器上線至 Azure Arc
由於 NPS 是在內部部署的 Windows Server 上執行,因此您必須先將伺服器加入 Azure Arc,才能安裝 Azure 監視器代理程式。
向 Azure Arc 註冊 NPS 伺服器
- 在 Azure 入口網站中,搜尋 Azure Arc。
- 在左側導覽面板中,選取「基礎架構」下方的「機器」。
- 依序點選「+ 新增/建立」>「新增機器」。
- 在「透過 Azure Arc 新增伺服器」部分,選取「新增單一伺服器」下方的「產生指令碼」。
- 請提供下列設定詳細資料:
- 訂閱:選取 Azure 訂閱。
- 資源群組:選取先前使用的資源群組。
- 區域:選取與 Log Analytics 工作區相同的區域。
- 作業系統:選取「Windows」。
- 連線方法:選取「公開端點」 (或「Proxy 伺服器」,視網路需求而定)。
- 按一下「下載並執行指令碼」。
- 將產生的 PowerShell 指令碼複製到 NPS 伺服器。
在 NPS 伺服器上,以管理員身分開啟 PowerShell,然後執行指令碼:
& '.\OnboardingScript.ps1'按照畫面上的指示透過 Azure 進行驗證,並完成新手上路程序。
指令碼執行完畢後,請返回 Azure 入口網站 > Azure Arc > 機器,確認 NPS 伺服器顯示「已連線」狀態。
安裝 Azure 監視器代理程式
在已啟用 Azure Arc 的伺服器上安裝 Azure 監視器代理程式
- 在 Azure 入口網站中,前往「Azure Arc」>「機器」。
- 從機器清單中選取 NPS 伺服器。
- 在左側導覽選單中,選取「設定」下方的「擴充功能」。
- 按一下「+ 新增」。
- 從擴充功能清單中選取「Azure Monitor Agent」。
- 點選「下一步」。
- 按一下「Review + create」。
- 點選「建立」。
等待擴充功能安裝完成。狀態會變更為「佈建成功」。
為 NPS 記錄檔建立資料收集規則
資料收集規則 (DCR) 會指示 Azure 監視器代理程式收集 NPS IAS 記錄檔,並傳送至 Log Analytics 工作區。
- 在 Azure 入口網站中,搜尋「監視器」。
- 在左側導覽選單中,選取「設定」下方的「資料收集規則」。
- 點選「+ 建立」。
- 在「基本」分頁中,提供下列設定詳細資料:
- 規則名稱:輸入
dcr-nps-ias-logs。 - 訂閱:選取 Azure 訂閱。
- 資源群組:選取先前使用的資源群組。
- 區域:選取與 Log Analytics 工作區相同的區域。
- 平台類型:選取「Windows」。
- 規則名稱:輸入
- 按一下「下一步:資源」。
- 在「資源」分頁中:
- 按一下「+ 新增資源」。
- 展開資源群組,然後選取已啟用 Azure Arc 的 NPS 伺服器。
- 按一下「套用」。
- 按一下「下一步:收取和運送」。
在「收取和運送」分頁中:
- 按一下「+ 新增資料來源」。
- 在「資料來源類型」下拉式選單中,選取「自訂文字記錄」。
在「File pattern」(檔案模式) 欄位中,輸入 NPS 記錄檔的路徑:
C:\Windows\System32\LogFiles\IN*.log在「資料表名稱」下拉式選單中,選取
NpsIasLogs_CL。在「Record delimiter」(記錄分隔符) 欄位中,選取「End of line」(行尾)。
在「轉換」欄位中輸入
source,即可傳送未經變更的原始記錄資料。按一下「新增資料來源」。
在「目的地」部分,確認您建立的 Log Analytics 工作區是否列於其中。
按一下「下一步:檢閱 + 建立」。
檢查設定,然後按一下「建立」。
設定將資料匯出至 Azure Blob 儲存體
建立資料匯出規則,持續將 NPS/IAS 記錄資料從 Log Analytics 工作區匯出至 Azure Blob 儲存體。
建立資料匯出規則
- 在 Azure 入口網站中,前往您建立的 Log Analytics 工作區。
- 在左側導覽中,選取「設定」下方的「資料匯出」。
- 按一下「+ 新增匯出規則」。
- 在「基本」分頁中,提供下列設定詳細資料:
- 規則名稱:輸入
export-nps-ias-logs。 - 目的地:選取「儲存空間帳戶」。
- 規則名稱:輸入
- 按一下「下一步:來源」。
- 在「來源」分頁中,選取「NpsIasLogs_CL」資料表。
- 按一下「下一步:目的地」。
- 在「目的地」分頁中:
- 訂閱項目:選取包含儲存空間帳戶的訂閱項目。
- 「Storage Account」(儲存空間帳戶):選取您先前建立的儲存空間帳戶 (例如
npsiaslogs)。
- 按一下「Review + create」。
檢查設定,然後按一下「建立」。
在 Google SecOps 中設定動態饋給,擷取 Microsoft IAS 記錄
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態饋給」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Microsoft IAS NPS Logs)。 - 選取「Microsoft Azure Blob Storage V2」做為「來源類型」。
- 選取「Microsoft IAS」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
- Azure URI:輸入 Blob 服務端點網址和容器路徑:
https://npsiaslogs.blob.core.windows.net/am-NpsIasLogs_CL/- 取代下列項目:
npsiaslogs:您的 Azure 儲存空間帳戶名稱。am-NpsIasLogs_CL:資料匯出規則自動建立的 Blob 容器名稱。
- 來源刪除選項:根據偏好設定選取刪除選項:
- 永不:轉移後一律不刪除任何檔案。
- 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
- 刪除已轉移的檔案和空白目錄:成功轉移檔案後,刪除檔案和空白目錄。
- 檔案存在時間上限:納入在過去天數內修改的檔案 (預設為 180 天)
- 共用金鑰:輸入您先前從儲存空間帳戶擷取的共用金鑰值 (存取金鑰)
- 資產命名空間:資產命名空間
- 擷取標籤:要套用至這個動態饋給事件的標籤
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
設定 Azure 儲存空間防火牆 (如已啟用)
如果 Azure 儲存空間帳戶使用防火牆,您必須新增 Google SecOps IP 範圍。
- 在 Azure 入口網站中,前往「儲存體帳戶」。
- 選取「安全性 + 網路」下方的「網路」。
- 在「防火牆和虛擬網路」下方,選取「從所選虛擬網路和 IP 位址啟用」。
- 在「防火牆」部分,按一下「位址範圍」下方的「+ 新增 IP 範圍」。
以 CIDR 標記法新增每個 Google SecOps IP 範圍。
如要取得目前的 IP 範圍,請按照下列步驟操作:
- 請參閱 IP 許可清單說明文件
- 或者使用 Feed Management API,以程式輔助方式擷取動態饋給。
確認已選取「Allow Azure services on the trusted services list to access this storage account」核取方塊 (這是 Log Analytics 資料匯出功能運作的必要條件)。
按一下 [儲存]。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| packet_type | additional.fields | 如果欄位不為空白,則會與每個欄位的標籤合併 |
| auth_type | additional.fields | |
| filter_id | additional.fields | |
| framed_netmask | additional.fields | |
| framed_address | additional.fields | |
| framed_protocol | additional.fields | |
| framed_routing | additional.fields | |
| framed_mtu | additional.fields | |
| framed_compression | additional.fields | |
| reason_code | additional.fields | |
| extensible_auth_protocol | additional.fields | |
| service_type | additional.fields | |
| nas_port | additional.fields | |
| reply_message | additional.fields | |
| nas_identifier | additional.fields | |
| device-type | additional.fields | |
| coa-push | additional.fields | |
| audit-session-id | additional.fields | |
| 日期 | metadata.event_timestamp | 由日期和時間串連而成,然後以 MM/dd/yyyy HH:mm:ss 格式剖析 |
| 時間 | metadata.event_timestamp | |
| principal_present | metadata.event_type | 如果 principal_present 和 target_present 存在,則設為「GENERIC_EVENT」,然後設為「NETWORK_CONNECTION」;如果 principal_present 存在,則設為「STATUS_UPDATE」 |
| target_present | metadata.event_type | |
| ac-user-agent | network.http.parsed_user_agent | 如果剖析成功,則從 ac-user-agent 轉換 |
| ac-user-agent | network.http.user_agent | 直接複製值 |
| session_duration | network.session_duration.seconds | 直接複製值,然後轉換為整數 |
| session_id | network.session_id | 直接複製值 |
| principal_hostname | principal.asset.hostname | 直接複製值 |
| principal_ip | principal.asset.ip | 如果 principal_ip 是有效 IP,則為該值;如果 calling_station_id 是有效 IP,則為該值 |
| calling_station_id | principal.asset.ip | |
| principal_hostname | principal.hostname | 直接複製值 |
| principal_ip | principal.ip | 如果 principal_ip 是有效 IP,則為該值;如果 calling_station_id 是有效 IP,則為該值 |
| calling_station_id | principal.ip | |
| device-mac | principal.mac | 如果裝置 MAC 位址不為空白 (取代 - 與 : 之後),則為裝置 MAC 位址,否則為裝置公開 MAC 位址 |
| device-public-mac | principal.mac | |
| nat_ip | principal.nat_ip | 直接複製值 |
| device-platform | principal.platform | 如果位於 ["Win","win"],則設為「WINDOWS」;如果 =~ "mac|iOS",則設為「MAC」;如果 =~ "lin",則設為「LINUX」 |
| device-platform-version | principal.platform_version | 直接複製值 |
| device-uid | principal.resource.product_object_id | 直接複製值 |
| user_name | principal.user.user_display_name | 直接複製值 |
| userid | principal.user.userid | 直接複製值 |
| service_name | target.application | 直接複製值 |
| computer_name | target.asset.hostname | 直接複製值 |
| target_ip | target.asset.ip | 如果 IP 有效,則為 target_ip 的值;如果 IP 無效,則為 called_station_id 的值 |
| called_station_id | target.asset.ip | |
| computer_name | target.hostname | 直接複製值 |
| target_ip | target.ip | 如果 IP 有效,則為 target_ip 的值;如果 IP 無效,則為 called_station_id 的值 |
| called_station_id | target.ip | |
| target_port | target.port | 直接複製值,然後轉換為整數 |
| metadata.product_name | metadata.product_name | 設為「MICROSOFT_IAS」 |
| metadata.vendor_name | metadata.vendor_name | 設為「MICROSOFT_IAS」 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。