收集 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 會計記錄

  1. 在執行 NPS 的 Windows Server 上,開啟「伺服器管理員」
  2. 依序前往「工具」>「網路原則伺服器」
  3. 在 NPS 控制台中,展開左側導覽中的「會計」
  4. 在「會計」上按一下滑鼠右鍵,然後選取「設定會計」
  5. 在「會計設定」精靈中,按一下「下一步」
  6. 選取「Log to a text file on the local computer」(記錄到本機電腦的文字檔),然後按一下「Next」(下一步)
  7. 在「Configure Log File Properties」頁面中,設定下列項目:
    • 「目錄」:保留預設值 (%systemroot%\System32\LogFiles) 或指定自訂路徑
    • 格式:選取「符合 DTS 規範」 (Microsoft 建議使用結構化 XML 格式)
    • 建立新的記錄檔:根據記錄檔大小選取「每日」或「每週」
  8. 點選「下一步」
  9. 檢閱摘要,然後按一下 [Finish] (完成)

啟用 NPS 稽核記錄

  1. 在 NPS 伺服器上,以系統管理員身分開啟「命令提示字元」
  2. 執行下列指令,啟用 NPS 稽核記錄:

    auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enable
    
  3. 確認稽核政策已啟用:

    auditpol /get /subcategory:"Network Policy Server"
    

在 NPS 伺服器上安裝及設定 NXLog

下載並安裝 NXLog

  1. 在 NPS 伺服器上,從 NXLog 網站下載 NXLog Enterprise Edition。
  2. 執行安裝程式,然後按照安裝精靈的指示操作。
  3. 接受預設安裝路徑 (C:\Program Files\nxlog) 或指定自訂路徑。
  4. 完成安裝程序。

設定 NXLog 收集 NPS 記錄

  1. 在 NPS 伺服器上,前往 NXLog 設定目錄:
    • 預設路徑:C:\Program Files\nxlog\conf
  2. 以系統管理員權限,使用文字編輯器 (例如記事本) 開啟 nxlog.conf 檔案。
  3. 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>
    
  4. 在設定檔中,替換下列預留位置:

    • your-gcs-bucket-name:您的 GCS bucket 名稱 (在下一節中建立)
    • 確認 LOGDIR 路徑與 NPS 記錄檔位置相符
  5. 儲存檔案。

建立 Google Cloud Storage bucket

  1. 前往 Google Cloud 控制台
  2. 選取專案或建立新專案。
  3. 在導覽選單中,依序前往「Cloud Storage」>「Bucket」
  4. 按一下「建立值區」
  5. 請提供下列設定詳細資料:

    設定
    為 bucket 命名 輸入全域不重複的名稱 (例如 nps-logs-chronicle)
    位置類型 根據需求選擇 (區域、雙區域、多區域)
    位置 選取位置 (例如 us-central1)
    儲存空間級別 標準 (建議用於經常存取的記錄)
    存取控管 統一 (建議)
    保護工具 選用:啟用物件版本管理或資料保留政策
  6. 點選「建立」

為 NXLog 建立 GCS 服務帳戶

建立服務帳戶

  1. GCP 控制台中,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)
  2. 按一下「Create Service Account」(建立服務帳戶)
  3. 請提供下列設定詳細資料:
    • 服務帳戶名稱:輸入 nxlog-nps-uploader (例如)
    • 服務帳戶說明:輸入 Service account for NXLog to upload NPS logs to GCS
  4. 按一下「建立並繼續」
  5. 在「將專案存取權授予這個服務帳戶」部分,新增下列角色:
    1. 按一下「選擇角色」
    2. 搜尋並選取「Storage 物件建立者」
  6. 按一下「繼續」
  7. 按一下 [完成]

下載服務帳戶金鑰

  1. 在「Service Accounts」(服務帳戶) 頁面中,按一下您剛才建立的服務帳戶 (nxlog-nps-uploader)。
  2. 前往「金鑰」分頁標籤。
  3. 依序點選「新增金鑰」>「建立新的金鑰」
  4. 選取「JSON」做為金鑰類型。
  5. 點選「建立」
  6. JSON 金鑰檔案會下載至您的電腦。
  7. 將 JSON 金鑰檔案複製到 NPS 伺服器的下列位置:
    • C:\nxlog-credentials\gcs-service-account.json
  8. 如果目錄不存在,請建立 C:\nxlog-credentials

設定自動上傳至 GCS

建立 PowerShell 上傳指令碼

  1. 在 NPS 伺服器上建立新目錄:
    • C:\nxlog-scripts
  2. 在目錄中建立名為 upload-to-gcs.ps1 的新檔案。
  3. 在文字編輯器中開啟檔案,然後貼上下列 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"
    
  4. 在指令碼中,請替換下列值:

    • $GcsBucket:您的 GCS bucket URI (例如 gs://nps-logs-chronicle/nps-logs/)
  5. 儲存檔案。

安裝 Google Cloud SDK

  1. 在 NPS 伺服器上,從 Google Cloud SDK 下載 Google Cloud SDK 安裝程式。
  2. 執行安裝程式,然後按照安裝精靈的指示操作。
  3. 安裝期間,如果尚未安裝 Python,請選取「安裝隨附 Python」
  4. 完成安裝程序。
  5. 開啟新的命令提示字元,然後驗證安裝作業:

    gsutil version
    

建立排程工作,自動上傳檔案

  1. 在 NPS 伺服器上開啟「工作排程器」
  2. 在右側面板中,按一下「建立工作」
  3. 在「一般」分頁中,設定下列項目:
    • 「Name」(名稱):輸入 NXLog GCS Upload
    • 說明:輸入 Upload NPS logs to Google Cloud Storage
    • 安全性選項:選取「無論使用者是否登入,都執行」
    • 安全性選項:勾選「以最高權限執行」
    • 設定:選取「Windows Server 2016」或伺服器版本
  4. 在「觸發條件」分頁中:
    1. 點選「New」(新增)
    2. 開始工作:選取「根據時間表」
    3. 設定:選取「每日」
    4. 每隔:輸入 1 天。
    5. 每隔一段時間重複執行工作:選取「15 分鐘」
    6. 時間長度:選取「無限期」
    7. 按一下 [確定]
  5. 在「動作」分頁中:
    1. 點選「New」(新增)
    2. 動作:選取「啟動程式」
    3. 「Program/script」:輸入 powershell.exe
    4. 新增引數:輸入 -ExecutionPolicy Bypass -File "C:\nxlog-scripts\upload-to-gcs.ps1"
    5. 按一下 [確定]
  6. 在「條件」分頁中:
    • 取消勾選「只有在電腦使用 AC 電源時才啟動工作」
  7. 在「設定」分頁中:
    • 勾選「在錯過排定的開始時間後,盡快執行工作」
    • 勾選「如果工作失敗,每隔一段時間重新啟動」:輸入 5 minutes
  8. 按一下 [確定]
  9. 輸入將執行工作的帳戶憑證 (必須具備管理員權限)。
  10. 按一下 [確定]

測試上傳程序

  1. 在 NPS 伺服器上開啟「工作排程器」
  2. 在左側面板中,展開「Task Scheduler Library」(工作排程器程式庫)
  3. 在「NXLog GCS Upload」工作上按一下滑鼠右鍵,然後選取「Run」
  4. 請稍候片刻,等待工作完成。
  5. 開啟 C:\nxlog-scripts\upload.log 的記錄檔,確認上傳作業是否成功。
  6. 前往 GCP 控制台 > Cloud Storage > Buckets
  7. 按一下 bucket 名稱 (nps-logs-chronicle)。
  8. 前往 nps-logs/ 資料夾。
  9. 確認是否有包含 NPS 記錄的 JSON 檔案。

啟動 NXLog 服務

  1. 在 NPS 伺服器上開啟「服務」 (執行 services.msc)。
  2. 在清單中找到 nxlog 服務。
  3. 在「nxlog」服務上按一下滑鼠右鍵,然後選取「啟動」
  4. 確認服務狀態為「執行中」
  5. 如要確認 NXLog 是否正在收集記錄,請檢查 NXLog 記錄檔:
    • C:\Program Files\nxlog\data\nxlog.log
  6. 尋找顯示記錄收集成功的訊息:

    INFO im_file: monitoring file 'C:\Windows\System32\LogFiles\IN250315.log'
    

擷取 Google SecOps 服務帳戶

Google SecOps 會使用專屬服務帳戶,從 GCS bucket 讀取資料。您必須授予這個服務帳戶值區存取權。

取得服務帳戶電子郵件地址

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 Microsoft NPS Logs)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」
  6. 選取「MICROSOFT_NPS」做為「記錄類型」
  7. 按一下「取得服務帳戶」。系統會顯示專屬服務帳戶電子郵件地址,例如:

    ```none
    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    ```
    
  8. 複製這個電子郵件地址,以便在下一步中使用。

  9. 點選「下一步」

  10. 指定下列輸入參數的值:

    • 儲存空間 bucket URL:輸入 GCS bucket URI,並加上前置路徑:

      gs://nps-logs-chronicle/nps-logs/
      
      • 取代:
        • nps-logs-chronicle:您的 GCS bucket 名稱。
        • nps-logs/:儲存記錄的前置字元/資料夾路徑。
    • 來源刪除選項:根據偏好選取刪除選項:
      • 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
      • 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
      • 刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。
    • 檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)
    • 資產命名空間資產命名空間
    • 擷取標籤:要套用至這個動態饋給事件的標籤
  11. 點選「下一步」

  12. 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)

將 IAM 權限授予 Google SecOps 服務帳戶

  • Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。
  1. 依序前往「Cloud Storage」>「Buckets」
  2. 按一下 bucket 名稱 (nps-logs-chronicle)。
  3. 前往「權限」分頁標籤。
  4. 按一下「授予存取權」
  5. 請提供下列設定詳細資料:
    • 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址
    • 指派角色:選取「Storage 物件檢視者」
  6. 按一下 [儲存]

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 專業人員尋求答案。