收集 Microsoft 網路政策伺服器 (NPS) 記錄
本文說明如何使用 Google Cloud Storage V2,將 Microsoft Network Policy Server (NPS) 記錄檔擷取至 Google Security Operations。
Microsoft 網路政策伺服器 (NPS) 是 Windows Server 角色,可提供 RADIUS 驗證、授權和會計功能。NPS 可集中管理無線裝置、VPN 連線、交換器和遠端存取的網路存取政策。NPS 沒有原生雲端匯出功能或 API,因此必須使用第三方轉送器收集記錄。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- 已啟用 Cloud Storage API 的 GCP 專案
- 建立及管理 GCS bucket 的權限
- 管理 Google Cloud Storage 值區 IAM 政策的權限
- Windows Server 的特殊存取權 (執行 NPS)
- 在 NPS 伺服器上安裝 NXLog 的管理員存取權
設定 NPS 記錄
啟用 NPS 會計記錄
- 在執行 NPS 的 Windows Server 上,開啟「伺服器管理員」。
- 依序前往「工具」>「網路原則伺服器」。
- 在 NPS 控制台中,展開左側導覽中的「會計」。
- 在「會計」上按一下滑鼠右鍵,然後選取「設定會計」。
- 在「會計設定」精靈中,按一下「下一步」。
- 選取「Log to a text file on the local computer」(記錄到本機電腦的文字檔),然後按一下「Next」(下一步)。
- 在「Configure Log File Properties」頁面中,設定下列項目:
- 「目錄」:保留預設值 (
%systemroot%\System32\LogFiles) 或指定自訂路徑 - 格式:選取「符合 DTS 規範」 (Microsoft 建議使用結構化 XML 格式)
- 建立新的記錄檔:根據記錄檔大小選取「每日」或「每週」
- 「目錄」:保留預設值 (
- 點選「下一步」。
- 檢閱摘要,然後按一下 [Finish] (完成)。
啟用 NPS 稽核記錄
- 在 NPS 伺服器上,以系統管理員身分開啟「命令提示字元」。
執行下列指令,啟用 NPS 稽核記錄:
auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enable確認稽核政策已啟用:
auditpol /get /subcategory:"Network Policy Server"
在 NPS 伺服器上安裝及設定 NXLog
下載並安裝 NXLog
- 在 NPS 伺服器上,從 NXLog 網站下載 NXLog Enterprise Edition。
- 執行安裝程式,然後按照安裝精靈的指示操作。
- 接受預設安裝路徑 (
C:\Program Files\nxlog) 或指定自訂路徑。 - 完成安裝程序。
設定 NXLog 收集 NPS 記錄
- 在 NPS 伺服器上,前往 NXLog 設定目錄:
- 預設路徑:
C:\Program Files\nxlog\conf
- 預設路徑:
- 以系統管理員權限,使用文字編輯器 (例如記事本) 開啟
nxlog.conf檔案。 將
nxlog.conf的所有內容替換為下列設定:## NXLog configuration for Microsoft NPS log collection ## Collects NPS logs and forwards to Google Cloud Storage define ROOT C:\Program Files\nxlog define LOGDIR C:\Windows\System32\LogFiles define GCS_BUCKET your-gcs-bucket-name define GCS_PREFIX nps-logs define GCS_CREDENTIALS C:\nxlog-credentials\gcs-service-account.json Moduledir %ROOT%\modules CacheDir %ROOT%\data Pidfile %ROOT%\data\nxlog.pid SpoolDir %ROOT%\data LogFile %ROOT%\data\nxlog.log LogLevel INFO <Extension nps> Module xm_nps </Extension> <Extension json> Module xm_json </Extension> <Input nps_logs> Module im_file File '%LOGDIR%\IN*.log' SavePos TRUE ReadFromLast TRUE Recursive FALSE InputType nps <Exec> # Parse NPS logs (DTS Compliant format) # Add hostname for tracking $Hostname = hostname(); # Convert to JSON to_json(); </Exec> </Input> <Output gcs> Module om_file File '%ROOT%\data\gcs-upload\nps-' + strftime(now(), '%Y%m%d-%H%M%S') + '.json' <Exec> # Rotate output file every hour if (file_size(file_name()) > 100000000) file_cycle(); </Exec> </Output> <Route nps_to_gcs> Path nps_logs => gcs </Route>在設定檔中,替換下列預留位置:
your-gcs-bucket-name:您的 GCS bucket 名稱 (在下一節中建立)- 確認
LOGDIR路徑與 NPS 記錄檔位置相符
儲存檔案。
建立 Google Cloud Storage bucket
- 前往 Google Cloud 控制台。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 nps-logs-chronicle)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或資料保留政策 點選「建立」。
為 NXLog 建立 GCS 服務帳戶
建立服務帳戶
- 在 GCP 控制台中,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
- 按一下「Create Service Account」(建立服務帳戶)。
- 請提供下列設定詳細資料:
- 服務帳戶名稱:輸入
nxlog-nps-uploader(例如) - 服務帳戶說明:輸入
Service account for NXLog to upload NPS logs to GCS
- 服務帳戶名稱:輸入
- 按一下「建立並繼續」。
- 在「將專案存取權授予這個服務帳戶」部分,新增下列角色:
- 按一下「選擇角色」。
- 搜尋並選取「Storage 物件建立者」。
- 按一下「繼續」。
- 按一下 [完成]。
下載服務帳戶金鑰
- 在「Service Accounts」(服務帳戶) 頁面中,按一下您剛才建立的服務帳戶 (
nxlog-nps-uploader)。 - 前往「金鑰」分頁標籤。
- 依序點選「新增金鑰」>「建立新的金鑰」。
- 選取「JSON」做為金鑰類型。
- 點選「建立」。
- JSON 金鑰檔案會下載至您的電腦。
- 將 JSON 金鑰檔案複製到 NPS 伺服器的下列位置:
C:\nxlog-credentials\gcs-service-account.json
- 如果目錄不存在,請建立
C:\nxlog-credentials。
設定自動上傳至 GCS
建立 PowerShell 上傳指令碼
- 在 NPS 伺服器上建立新目錄:
C:\nxlog-scripts
- 在目錄中建立名為
upload-to-gcs.ps1的新檔案。 在文字編輯器中開啟檔案,然後貼上下列 PowerShell 指令碼:
# PowerShell script to upload NXLog output files to Google Cloud Storage # Uses gsutil command-line tool $ErrorActionPreference = "Stop" # Configuration $LocalLogDir = "C:\Program Files\nxlog\data\gcs-upload" $GcsBucket = "gs://nps-logs-chronicle/nps-logs/" $ArchiveDir = "C:\Program Files\nxlog\data\archive" $LogFile = "C:\nxlog-scripts\upload.log" # Function to write log messages function Write-Log { param([string]$Message) $Timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss" "$Timestamp - $Message" | Out-File -FilePath $LogFile -Append } Write-Log "Starting GCS upload process" # Check if gsutil is available try { $null = gsutil version } catch { Write-Log "ERROR: gsutil not found. Please install Google Cloud SDK." exit 1 } # Activate service account $ServiceAccountKey = "C:\nxlog-credentials\gcs-service-account.json" if (-not (Test-Path $ServiceAccountKey)) { Write-Log "ERROR: Service account key not found at $ServiceAccountKey" exit 1 } try { gcloud auth activate-service-account --key-file=$ServiceAccountKey 2>&1 | Out-Null Write-Log "Service account activated successfully" } catch { Write-Log "ERROR: Failed to activate service account: $_" exit 1 } # Create archive directory if it doesn't exist if (-not (Test-Path $ArchiveDir)) { New-Item -ItemType Directory -Path $ArchiveDir | Out-Null Write-Log "Created archive directory: $ArchiveDir" } # Get all JSON files in the local log directory $Files = Get-ChildItem -Path $LocalLogDir -Filter "*.json" -File if ($Files.Count -eq 0) { Write-Log "No files to upload" exit 0 } Write-Log "Found $($Files.Count) file(s) to upload" # Upload each file to GCS $SuccessCount = 0 $FailCount = 0 foreach ($File in $Files) { try { # Upload to GCS gsutil cp $File.FullName $GcsBucket 2>&1 | Out-Null # Move to archive on success Move-Item -Path $File.FullName -Destination $ArchiveDir -Force Write-Log "Uploaded and archived: $($File.Name)" $SuccessCount++ } catch { Write-Log "ERROR uploading $($File.Name): $_" $FailCount++ } } Write-Log "Upload complete. Success: $SuccessCount, Failed: $FailCount"在指令碼中,請替換下列值:
$GcsBucket:您的 GCS bucket URI (例如gs://nps-logs-chronicle/nps-logs/)
儲存檔案。
安裝 Google Cloud SDK
- 在 NPS 伺服器上,從 Google Cloud SDK 下載 Google Cloud SDK 安裝程式。
- 執行安裝程式,然後按照安裝精靈的指示操作。
- 安裝期間,如果尚未安裝 Python,請選取「安裝隨附 Python」。
- 完成安裝程序。
開啟新的命令提示字元,然後驗證安裝作業:
gsutil version
建立排程工作,自動上傳檔案
- 在 NPS 伺服器上開啟「工作排程器」。
- 在右側面板中,按一下「建立工作」。
- 在「一般」分頁中,設定下列項目:
- 「Name」(名稱):輸入
NXLog GCS Upload - 說明:輸入
Upload NPS logs to Google Cloud Storage - 安全性選項:選取「無論使用者是否登入,都執行」
- 安全性選項:勾選「以最高權限執行」
- 設定:選取「Windows Server 2016」或伺服器版本
- 「Name」(名稱):輸入
- 在「觸發條件」分頁中:
- 點選「New」(新增)。
- 開始工作:選取「根據時間表」。
- 設定:選取「每日」。
- 每隔:輸入
1天。 - 每隔一段時間重複執行工作:選取「15 分鐘」。
- 時間長度:選取「無限期」。
- 按一下 [確定]。
- 在「動作」分頁中:
- 點選「New」(新增)。
- 動作:選取「啟動程式」。
- 「Program/script」:輸入
powershell.exe。 - 新增引數:輸入
-ExecutionPolicy Bypass -File "C:\nxlog-scripts\upload-to-gcs.ps1"。 - 按一下 [確定]。
- 在「條件」分頁中:
- 取消勾選「只有在電腦使用 AC 電源時才啟動工作」。
- 在「設定」分頁中:
- 勾選「在錯過排定的開始時間後,盡快執行工作」。
- 勾選「如果工作失敗,每隔一段時間重新啟動」:輸入
5 minutes。
- 按一下 [確定]。
- 輸入將執行工作的帳戶憑證 (必須具備管理員權限)。
- 按一下 [確定]。
測試上傳程序
- 在 NPS 伺服器上開啟「工作排程器」。
- 在左側面板中,展開「Task Scheduler Library」(工作排程器程式庫)。
- 在「NXLog GCS Upload」工作上按一下滑鼠右鍵,然後選取「Run」。
- 請稍候片刻,等待工作完成。
- 開啟
C:\nxlog-scripts\upload.log的記錄檔,確認上傳作業是否成功。 - 前往 GCP 控制台 > Cloud Storage > Buckets。
- 按一下 bucket 名稱 (
nps-logs-chronicle)。 - 前往
nps-logs/資料夾。 - 確認是否有包含 NPS 記錄的 JSON 檔案。
啟動 NXLog 服務
- 在 NPS 伺服器上開啟「服務」 (執行
services.msc)。 - 在清單中找到 nxlog 服務。
- 在「nxlog」服務上按一下滑鼠右鍵,然後選取「啟動」。
- 確認服務狀態為「執行中」。
- 如要確認 NXLog 是否正在收集記錄,請檢查 NXLog 記錄檔:
C:\Program Files\nxlog\data\nxlog.log
尋找顯示記錄收集成功的訊息:
INFO im_file: monitoring file 'C:\Windows\System32\LogFiles\IN250315.log'
擷取 Google SecOps 服務帳戶
Google SecOps 會使用專屬服務帳戶,從 GCS bucket 讀取資料。您必須授予這個服務帳戶值區存取權。
取得服務帳戶電子郵件地址
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Microsoft NPS Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「MICROSOFT_NPS」做為「記錄類型」。
按一下「取得服務帳戶」。系統會顯示專屬服務帳戶電子郵件地址,例如:
```none chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com ```複製這個電子郵件地址,以便在下一步中使用。
點選「下一步」。
指定下列輸入參數的值:
儲存空間 bucket URL:輸入 GCS bucket URI,並加上前置路徑:
gs://nps-logs-chronicle/nps-logs/- 取代:
nps-logs-chronicle:您的 GCS bucket 名稱。nps-logs/:儲存記錄的前置字元/資料夾路徑。
- 取代:
- 來源刪除選項:根據偏好選取刪除選項:
- 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
- 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
- 刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。
- 檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)
- 資產命名空間:資產命名空間
- 擷取標籤:要套用至這個動態饋給事件的標籤
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
將 IAM 權限授予 Google SecOps 服務帳戶
- Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。
- 依序前往「Cloud Storage」>「Buckets」。
- 按一下 bucket 名稱 (
nps-logs-chronicle)。 - 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址
- 指派角色:選取「Storage 物件檢視者」
按一下 [儲存]。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| 版本 | additional.fields | 如果不是空白,則會與對應物件合併 |
| 管道 | additional.fields | |
| 關鍵字 | additional.fields | |
| Opcode | additional.fields | |
| 工作 | additional.fields | |
| ThreadID | additional.fields | |
| EventData.%1 | additional.fields | |
| EventData.%2 | additional.fields | |
| 管道 | channel.value.string_value | 直接複製值 |
| EventData.%1 | event_data_p1.value.string_value | 直接複製值 |
| EventData.%2 | event_data_p2.value.string_value | 直接複製值 |
| 關鍵字 | keywords.value.string_value | 直接複製值 |
| TimeCreated | metadata.event_timestamp | 從 UNIX_MS 轉換為時間戳記 |
| EventId | metadata.event_type | 如果 EventId == '4400',則設為 STATUS_UNCATEGORIZED;如果 EventId == '13',則設為 STATUS_UPDATE;否則設為 GENERIC_EVENT |
| EventId | metadata.product_event_type | 直接複製值 |
| Opcode | opcode.value.string_value | 直接複製值 |
| 電腦 | principal.asset.hostname | 從 principal.hostname 複製的值 |
| 電腦 | principal.hostname | 直接複製值 |
| ProcessID | principal.process.pid | 值 (如非空白) 已複製 |
| UserId | principal.user.windows_sid | 使用規則運算式擷取 Windows SID |
| EventId | security_result.rule_name | 設為「EventID: 」+ EventId |
| 等級 | security_result.severity | 轉換:INFO/Informational/Information/Normal/NOTICE 轉換為 INFORMATIONAL、ERROR/Error 轉換為 ERROR、WARNING/Warning 轉換為 INFORMATIONAL、DEBUG 轉換為 INFORMATIONAL、Critical 轉換為 CRITICAL |
| 工作 | task.value.string_value | 直接複製值 |
| ThreadID | thread_id.value.string_value | 直接複製值 |
| 版本 | version.value.string_value | 直接複製值 |
| metadata.vendor_name | metadata.vendor_name | 設為「Microsoft」 |
| ProviderName | metadata.product_name | 直接複製值 |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。