Mengumpulkan log Microsoft Network Policy Server (NPS)
Dokumen ini menjelaskan cara menyerap log Microsoft Network Policy Server (NPS) ke Google Security Operations menggunakan Google Cloud Storage V2.
Microsoft Network Policy Server (NPS) adalah peran Windows Server yang menyediakan otentikasi, otorisasi, dan akuntansi RADIUS. NPS memungkinkan pengelolaan terpusat kebijakan akses jaringan untuk perangkat nirkabel, koneksi VPN, switch, dan akses jarak jauh. NPS tidak memiliki kemampuan atau API ekspor cloud native, sehingga log harus dikumpulkan menggunakan penerusan pihak ketiga.
Sebelum memulai
Pastikan Anda memiliki prasyarat berikut:
- Instance Google SecOps
- Project GCP dengan Cloud Storage API diaktifkan
- Izin untuk membuat dan mengelola bucket GCS
- Izin untuk mengelola kebijakan IAM di bucket GCS
- Akses istimewa ke Windows Server yang menjalankan NPS
- Akses administrator untuk menginstal NXLog di server NPS
Mengonfigurasi logging NPS
Mengaktifkan log akuntansi NPS
- Di Windows Server yang menjalankan NPS, buka Server Manager.
- Buka Tools > Network Policy Server.
- Di konsol NPS, luaskan Akuntansi di navigasi kiri.
- Klik kanan Akuntansi, lalu pilih Konfigurasi Akuntansi.
- Di wizard Accounting Configuration, klik Next.
- Pilih Log ke file teks di komputer lokal, lalu klik Berikutnya.
- Di halaman Configure Log File Properties, konfigurasikan hal berikut:
- Direktori: Biarkan sebagai default (
%systemroot%\System32\LogFiles) atau tentukan jalur kustom - Format: Pilih DTS Compliant (direkomendasikan oleh Microsoft untuk format XML terstruktur)
- Buat file log baru: Pilih Harian atau Mingguan berdasarkan volume log Anda
- Direktori: Biarkan sebagai default (
- Klik Berikutnya.
- Tinjau ringkasan, lalu klik Selesai.
Mengaktifkan logging audit NPS
- Buka Command Prompt sebagai Administrator di server NPS.
Jalankan perintah berikut untuk mengaktifkan logging audit NPS:
auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enablePastikan kebijakan audit diaktifkan:
auditpol /get /subcategory:"Network Policy Server"
Menginstal dan mengonfigurasi NXLog di server NPS
Mendownload dan menginstal NXLog
- Di server NPS, download NXLog Enterprise Edition dari situs NXLog.
- Jalankan penginstal dan ikuti wizard penginstalan.
- Terima jalur penginstalan default (
C:\Program Files\nxlog) atau tentukan jalur kustom. - Selesaikan penginstalan.
Mengonfigurasi NXLog untuk mengumpulkan log NPS
- Di server NPS, buka direktori konfigurasi NXLog:
- Jalur default:
C:\Program Files\nxlog\conf
- Jalur default:
- Buka file
nxlog.confdi editor teks (misalnya, Notepad) dengan hak istimewa Administrator. Ganti seluruh konten
nxlog.confdengan konfigurasi berikut:## 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>Dalam file konfigurasi, ganti placeholder berikut:
your-gcs-bucket-name: Nama bucket GCS Anda (dibuat di bagian berikutnya)- Pastikan jalur
LOGDIRcocok dengan lokasi file log NPS Anda
Simpan file.
Buat bucket Google Cloud Storage
- Buka Konsol Google Cloud.
- Pilih project Anda atau buat project baru.
- Di menu navigasi, buka Cloud Storage > Buckets.
- Klik Create bucket.
Berikan detail konfigurasi berikut:
Setelan Nilai Beri nama bucket Anda Masukkan nama yang unik secara global (misalnya, nps-logs-chronicle)Location type Pilih berdasarkan kebutuhan Anda (Region, Dual-region, Multi-region) Location Pilih lokasi (misalnya, us-central1)Kelas penyimpanan Standar (direkomendasikan untuk log yang sering diakses) Kontrol akses Seragam (direkomendasikan) Alat perlindungan Opsional: Aktifkan pembuatan versi objek atau kebijakan retensi Klik Create.
Buat akun layanan GCS untuk NXLog
Membuat akun layanan
- Di Konsol GCP, buka IAM & Admin > Service Accounts.
- Klik Create Service Account.
- Berikan detail konfigurasi berikut:
- Nama akun layanan: Masukkan
nxlog-nps-uploader(misalnya) - Deskripsi akun layanan: Masukkan
Service account for NXLog to upload NPS logs to GCS
- Nama akun layanan: Masukkan
- Klik Create and Continue.
- Di bagian Grant this service account access to project, tambahkan peran berikut:
- Klik Pilih peran.
- Telusuri dan pilih Storage Object Creator.
- Klik Lanjutkan.
- Klik Done.
Mendownload kunci akun layanan
- Di halaman Service Accounts, klik akun layanan yang baru saja Anda buat (
nxlog-nps-uploader). - Buka tab Kunci.
- Klik Add Key > Create new key.
- Pilih JSON sebagai jenis kunci.
- Klik Create.
- File kunci JSON akan didownload ke komputer Anda.
- Salin file kunci JSON ke server NPS di lokasi berikut:
C:\nxlog-credentials\gcs-service-account.json
- Buat direktori
C:\nxlog-credentialsjika belum ada.
Mengonfigurasi upload GCS otomatis
Buat skrip upload PowerShell
- Di server NPS, buat direktori baru:
C:\nxlog-scripts
- Buat file baru bernama
upload-to-gcs.ps1di direktori. Buka file di editor teks dan tempel skrip PowerShell berikut:
# 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"Dalam skrip, ganti nilai berikut:
$GcsBucket: URI bucket GCS Anda (misalnya,gs://nps-logs-chronicle/nps-logs/)
Simpan file.
Instal Google Cloud SDK
- Di server NPS, download penginstal Google Cloud SDK dari Google Cloud SDK.
- Jalankan penginstal dan ikuti wizard penginstalan.
- Selama penginstalan, pilih Instal Python yang dipaketkan jika Python belum diinstal.
- Selesaikan penginstalan.
Buka Command Prompt baru dan verifikasi penginstalan:
gsutil version
Membuat tugas terjadwal untuk upload otomatis
- Di server NPS, buka Task Scheduler.
- Di panel kanan, klik Buat Tugas.
- Di tab Umum, konfigurasikan hal berikut:
- Nama: Masukkan
NXLog GCS Upload - Deskripsi: Masukkan
Upload NPS logs to Google Cloud Storage - Security options: Pilih Run whether user is logged on or not
- Opsi keamanan: Centang Jalankan dengan hak istimewa tertinggi
- Konfigurasi untuk: Pilih Windows Server 2016 atau versi server Anda
- Nama: Masukkan
- Di tab Triggers:
- Klik New.
- Begin the task: Pilih On a schedule.
- Setelan: Pilih Harian.
- Berulang setiap: Masukkan
1hari. - Ulangi tugas setiap: Pilih 15 menit.
- untuk durasi: Pilih Tanpa batas waktu.
- Klik Oke.
- Di tab Tindakan:
- Klik New.
- Tindakan: Pilih Mulai program.
- Program/skrip: Masukkan
powershell.exe. - Tambahkan argumen: Masukkan
-ExecutionPolicy Bypass -File "C:\nxlog-scripts\upload-to-gcs.ps1". - Klik Oke.
- Di tab Kondisi:
- Hapus centang Mulai tugas hanya jika komputer terhubung ke daya AC.
- Di tab Setelan:
- Centang Jalankan tugas sesegera mungkin setelah waktu mulai terjadwal terlewat.
- Periksa Jika tugas gagal, mulai ulang setiap: Masukkan
5 minutes.
- Klik Oke.
- Masukkan kredensial untuk akun yang akan menjalankan tugas (harus memiliki hak istimewa Administrator).
- Klik Oke.
Menguji proses upload
- Di server NPS, buka Task Scheduler.
- Di panel kiri, luaskan Task Scheduler Library.
- Klik kanan tugas NXLog GCS Upload, lalu pilih Run.
- Tunggu beberapa detik hingga tugas selesai.
- Buka file log di
C:\nxlog-scripts\upload.loguntuk memverifikasi bahwa upload berhasil. - Buka GCP Console > Cloud Storage > Buckets.
- Klik nama bucket Anda (
nps-logs-chronicle). - Buka folder
nps-logs/. - Verifikasi bahwa file JSON dengan log NPS ada.
Mulai layanan NXLog
- Di server NPS, buka Services (jalankan
services.msc). - Temukan layanan nxlog dalam daftar.
- Klik kanan layanan nxlog, lalu pilih Start.
- Pastikan status layanan adalah Running.
- Untuk memverifikasi bahwa NXLog mengumpulkan log, periksa file log NXLog:
C:\Program Files\nxlog\data\nxlog.log
Cari pesan yang menunjukkan pengumpulan log berhasil:
INFO im_file: monitoring file 'C:\Windows\System32\LogFiles\IN250315.log'
Mengambil akun layanan Google SecOps
Google SecOps menggunakan akun layanan unik untuk membaca data dari bucket GCS Anda. Anda harus memberi akun layanan ini akses ke bucket Anda.
Dapatkan email akun layanan
- Buka Setelan SIEM > Feed.
- Klik Tambahkan Feed Baru.
- Klik Konfigurasi satu feed.
- Di kolom Nama feed, masukkan nama untuk feed (misalnya,
Microsoft NPS Logs). - Pilih Google Cloud Storage V2 sebagai Source type.
- Pilih MICROSOFT_NPS sebagai Jenis log.
Klik Get Service Account. Email akun layanan yang unik akan ditampilkan, misalnya:
```none chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com ```Salin alamat email ini untuk digunakan di langkah berikutnya.
Klik Berikutnya.
Tentukan nilai untuk parameter input berikut:
URL bucket penyimpanan: Masukkan URI bucket GCS dengan jalur awalan:
gs://nps-logs-chronicle/nps-logs/- Ganti:
nps-logs-chronicle: Nama bucket GCS Anda.nps-logs/: Jalur folder/awalan tempat log disimpan.
- Ganti:
- Opsi penghapusan sumber: Pilih opsi penghapusan sesuai preferensi Anda:
- Jangan pernah: Tidak pernah menghapus file apa pun setelah transfer (direkomendasikan untuk pengujian).
- Hapus file yang ditransfer: Menghapus file setelah transfer berhasil.
- Hapus file yang ditransfer dan direktori kosong: Menghapus file dan direktori kosong setelah transfer berhasil.
- Usia File Maksimum: Menyertakan file yang diubah dalam beberapa hari terakhir (default adalah 180 hari)
- Namespace aset: Namespace aset
- Label penyerapan: Label yang akan diterapkan ke peristiwa dari feed ini
Klik Berikutnya.
Tinjau konfigurasi feed baru Anda di layar Selesaikan, lalu klik Kirim.
Memberikan izin IAM ke akun layanan Google SecOps
- Akun layanan Google SecOps memerlukan peran Storage Object Viewer di bucket GCS Anda.
- Buka Cloud Storage > Buckets.
- Klik nama bucket Anda (
nps-logs-chronicle). - Buka tab Izin.
- Klik Grant access.
- Berikan detail konfigurasi berikut:
- Add principals: Tempel email akun layanan Google SecOps
- Tetapkan peran: Pilih Storage Object Viewer
Klik Simpan.
Tabel pemetaan UDM
| Kolom Log | Pemetaan UDM | Logika |
|---|---|---|
| Versi | additional.fields | Digabungkan dengan objek yang sesuai jika tidak kosong |
| Saluran | additional.fields | |
| Kata kunci | additional.fields | |
| Opcode | additional.fields | |
| Tugas | additional.fields | |
| ThreadID | additional.fields | |
| EventData.%1 | additional.fields | |
| EventData.%2 | additional.fields | |
| Saluran | channel.value.string_value | Nilai disalin secara langsung |
| EventData.%1 | event_data_p1.value.string_value | Nilai disalin secara langsung |
| EventData.%2 | event_data_p2.value.string_value | Nilai disalin secara langsung |
| Kata kunci | keywords.value.string_value | Nilai disalin secara langsung |
| TimeCreated | metadata.event_timestamp | Dikonversi dari UNIX_MS ke stempel waktu |
| EventId | metadata.event_type | Ditetapkan ke STATUS_UNCATEGORIZED jika EventId == '4400', STATUS_UPDATE jika EventId == '13', atau GENERIC_EVENT |
| EventId | metadata.product_event_type | Nilai disalin secara langsung |
| Opcode | opcode.value.string_value | Nilai disalin secara langsung |
| Komputer | principal.asset.hostname | Nilai disalin dari principal.hostname |
| Komputer | principal.hostname | Nilai disalin secara langsung |
| ProcessID | principal.process.pid | Nilai disalin jika tidak kosong |
| ID Pengguna | principal.user.windows_sid | Diekstrak menggunakan ekspresi reguler untuk mendapatkan SID Windows |
| EventId | security_result.rule_name | Ditetapkan ke "EventID: " + EventId |
| Tingkat | security_result.severity | Diubah: INFO/Informasional/Informasi/Normal/PEMBERITAHUAN menjadi INFORMASI, ERROR/Error menjadi ERROR, WARNING/Peringatan menjadi INFORMASI, DEBUG menjadi INFORMASI, Critical menjadi KRITIS |
| Tugas | task.value.string_value | Nilai disalin secara langsung |
| ThreadID | thread_id.value.string_value | Nilai disalin secara langsung |
| Versi | version.value.string_value | Nilai disalin secara langsung |
| metadata.vendor_name | metadata.vendor_name | Setel ke "Microsoft" |
| ProviderName | metadata.product_name | Nilai disalin secara langsung |
Log Perubahan
Melihat Log Perubahan untuk parser ini
Perlu bantuan lain? Dapatkan jawaban dari anggota Komunitas dan profesional Google SecOps.