收集 Microsoft IAS / 网络策略服务器 (NPS) 日志

支持的平台:

本文档介绍了如何使用 Microsoft Azure Blob 存储 V2 设置 Google SecOps Feed,以收集 Microsoft Internet 身份验证服务 (IAS) / 网络政策服务器 (NPS) 日志。

Microsoft 网络策略服务器 (NPS) 是 Microsoft 对 RADIUS(远程用户拨入验证服务)服务器和代理的实现。NPS 可集中管理 VPN 连接、无线接入点、802.1X 身份验证交换机和拨号远程访问的网络访问身份验证、授权和计费。在 Windows Server 2003 及更早版本中,NPS 以前称为 Internet 身份验证服务 (IAS)。由于 NPS 作为 Windows Server 角色运行,不具备原生云导出功能,因此本指南使用 Azure Monitor 代理从本地文件系统收集 NPS 结算日志文件,并通过 Log Analytics 工作区将其路由到 Azure Blob Storage。

准备工作

  • 确保您满足以下前提条件:

  • Google SecOps 实例

  • Microsoft Azure 门户的特权访问权限,包括:

    • 创建存储账号
    • 创建和管理 Log Analytics 工作区
    • 创建数据收集规则
    • 创建数据导出规则
    • 管理访问密钥
  • 安装了 NPS 角色的 Windows Server 2016 或更高版本

  • 对 NPS 服务器的管理员访问权限

  • 从 NPS 服务器到 Azure 的网络连接(端口 443 上的 HTTPS 出站)

配置 NPS 统计和日志记录

启用 NPS 以将身份验证和计费请求记录到本地文本文件中(采用 IAS 格式)。

启用 NPS 结算日志

  1. 在运行 NPS 的 Windows Server 上,打开服务器管理器
  2. 依次前往工具 > 网络策略服务器
  3. 在 NPS 控制台树中,点击统计
  4. 在详情窗格中,点击会计下方的配置会计
  5. 记账配置向导中,选择记录到本地计算机上的文本文件,然后点击下一步
  6. 配置日志文件属性页面中,配置以下内容:
    • 记录以下信息部分,选中要记录的信息对应的复选框:
      • 会计请求
      • 身份验证请求
      • 定期结算状态
      • 定期身份验证状态
    • 日志记录失败操作部分中,如果您希望 NPS 在日志文件不可用时停止处理,请选择如果日志记录失败,则舍弃连接请求。如果您希望即使日志记录失败,NPS 也能继续处理,请保持未选中状态。
  7. 点击下一步
  8. 查看摘要并点击 Finish

配置日志文件属性

  1. 在 NPS 控制台树中,点击统计
  2. 在详情窗格中的日志文件属性下,点击更改日志文件属性
  3. 点击日志文件标签页。
  4. 目录字段中,验证或更改日志文件位置:
    • 默认位置:%systemroot%\System32\LogFiles
    • 为了更好地组织,请指定专用目录(例如 C:\NPSLogs
  5. 格式下拉菜单中,选择 IAS(旧版)

  6. 创建新的日志文件中,选择日志轮换间隔:

    • 每天(建议在大多数环境下使用)
    • 每周一次
    • 按月
    • 从不(文件大小不受限制)
    • 当日志文件达到此大小(以 MB 为单位指定大小)
  7. 如果您希望 NPS 在磁盘空间不足时删除旧的日志文件,请选择当磁盘空间不足时删除旧的日志文件

  8. 点击确定以保存配置。

  9. 验证是否正在配置的目录中创建日志文件。

配置 Azure 存储账号

创建存储账号

  1. Azure 门户中,搜索存储账号
  2. 点击 + 创建
  3. 提供以下配置详细信息:

    设置
    订阅 选择您的 Azure 订阅
    资源组 选择现有组或创建新组
    存储账号名称 输入唯一名称(例如 npsiaslogs
    区域 选择区域(例如 East US
    性能 标准(推荐)
    冗余 GRS(地理位置冗余存储)或 LRS(本地冗余存储)
  4. 点击检查 + 创建

  5. 查看账号概览,然后点击创建

  6. 等待部署完成。

获取存储账号凭据

  1. 前往您刚刚创建的存储账号
  2. 在左侧导航栏中,选择安全性 + 网络下的访问密钥
  3. 点击显示密钥
  4. 复制并保存以下内容以供日后使用:
    • 存储账号名称:您的存储账号名称(例如 npsiaslogs
    • 密钥 1密钥 2:共享访问密钥(采用 base-64 编码的 512 位随机字符串)

获取 Blob 服务端点

  1. 在同一存储账号中,从左侧导航栏中选择端点
  2. 复制并保存 Blob 服务端点网址。
    • 示例:https://npsiaslogs.blob.core.windows.net/

创建 Log Analytics 工作区

您需要使用 Log Analytics 工作区从 Azure 监视代理接收自定义文本日志,然后才能将其导出到 Azure Blob Storage。

  1. Azure 门户中,搜索 Log Analytics 工作区
  2. 点击 + 创建
  3. 提供以下配置详细信息:

    设置
    订阅 选择您的 Azure 订阅
    资源组 选择与存储账号相同的资源组
    名称 输入唯一名称(例如 nps-ias-workspace
    区域 选择与存储账号相同的区域
  4. 点击检查 + 创建

  5. 检查设置,然后点击创建

  6. 等待部署完成。

创建自定义日志表

在 Log Analytics 工作区中创建一个自定义表,用于存储 NPS/IAS 日志数据。

  1. Azure 门户中,前往您刚刚创建的 Log Analytics 工作区
  2. 在左侧导航栏中,选择设置下的表格
  3. 依次点击 + 创建 > 新的自定义日志(基于 DCR)
  4. 表名称字段中,输入 NpsIasLogs。完整表名称将为 NpsIasLogs_CL
  5. 点击创建

将 NPS 服务器载入到 Azure Arc

由于 NPS 在本地 Windows Server 上运行,因此您必须先将服务器载入到 Azure Arc,然后才能安装 Azure Monitor 代理。

向 Azure Arc 注册 NPS 服务器

  1. Azure 门户中,搜索 Azure Arc
  2. 在左侧导航栏中,选择基础设施下的机器
  3. 依次点击 + 添加/创建 > 添加机器
  4. 通过 Azure Arc 添加服务器部分中,选择添加单个服务器下的生成脚本
  5. 提供以下配置详细信息:
    • 订阅:选择您的 Azure 订阅。
    • 资源组:选择之前使用的同一资源组。
    • 区域:选择与您的 Log Analytics 工作区相同的区域。
    • 操作系统:选择 Windows
    • 连接方法:选择公共端点(或代理服务器,如果您的网络需要)。
  6. 点击下载并运行脚本
  7. 将生成的 PowerShell 脚本复制到 NPS 服务器。
  8. 在 NPS 服务器上,以管理员身份打开 PowerShell 并运行以下脚本:

    & '.\OnboardingScript.ps1'
    
  9. 按照屏幕上的说明使用 Azure 进行身份验证,并完成初始配置。

  10. 脚本完成后,返回 Azure 门户 > Azure Arc > 计算机,并验证 NPS 服务器是否显示为已连接状态。

安装 Azure Monitor 代理

在已启用 Arc 的服务器上安装 Azure Monitor 代理

  1. Azure 门户中,依次前往 Azure Arc > 计算机
  2. 从机器列表中选择 NPS 服务器。
  3. 在左侧导航栏中,选择设置下的扩展程序
  4. 点击添加
  5. 从扩展程序列表中选择 Azure Monitor 代理
  6. 点击下一步
  7. 点击 Review + create(检查 + 创建)。
  8. 点击创建
  9. 等待扩展程序安装完成。状态将更改为 Provisioning succeeded

为 NPS 日志文件创建数据收集规则

数据收集规则 (DCR) 会指示 Azure 监视代理收集 NPS IAS 日志文件,并将其发送到 Log Analytics 工作区。

  1. Azure 门户中,搜索监控
  2. 在左侧导航栏中,选择设置下的数据收集规则
  3. 点击 + 创建
  4. 基本标签页中,提供以下配置详细信息:
    • 规则名称:输入 dcr-nps-ias-logs
    • 订阅:选择您的 Azure 订阅。
    • 资源组:选择之前使用的同一资源组。
    • 区域:选择与您的 Log Analytics 工作区相同的区域。
    • 平台类型:选择 Windows
  5. 点击下一步:资源
  6. 资源标签页中:
    1. 点击 + 添加资源
    2. 展开资源组,然后选择已启用 Azure Arc 的 NPS 服务器。
    3. 点击应用
  7. 点击下一部分:收集和交付
  8. 取件和送达标签页中:

    1. 点击 + 添加数据源
    2. 数据源类型下拉菜单中,选择自定义文本日志
    3. 文件模式字段中,输入 NPS 日志文件的路径:

      C:\Windows\System32\LogFiles\IN*.log
      
    4. 表名称下拉菜单中,选择 NpsIasLogs_CL

    5. 记录定界符字段中,选择行尾

    6. 转换字段中,输入 source 以发送未更改的原始日志数据。

    7. 点击添加数据源

  9. 目标位置部分,验证您创建的 Log Analytics 工作区是否已列出。

  10. 点击下一步:检查 + 创建

  11. 检查配置,然后点击创建

将数据导出到 Azure Blob Storage

创建数据导出规则,以将 NPS/IAS 日志数据从 Log Analytics 工作区持续导出到 Azure Blob Storage。

创建数据导出规则

  1. Azure 门户中,前往您创建的 Log Analytics 工作区
  2. 在左侧导航栏中,选择设置下的数据导出
  3. 点击 + 新导出规则
  4. 基本标签页中,提供以下配置详细信息:
    • 规则名称:输入 export-nps-ias-logs
    • 目标位置:选择存储账号
  5. 点击下一步:来源
  6. 来源标签页中,选择 NpsIasLogs_CL 表。
  7. 点击下一步:目的地
  8. 目标标签页中:
    • 订阅:选择包含存储空间的订阅。
    • 存储账号:选择您之前创建的存储账号(例如 npsiaslogs)。
  9. 点击 Review + create(检查 + 创建)。
  10. 检查配置,然后点击创建

在 Google SecOps 中配置 Feed 以注入 Microsoft IAS 日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称(例如 Microsoft IAS NPS Logs)。
  5. 选择 Microsoft Azure Blob Storage V2 作为来源类型
  6. 选择 Microsoft IAS 作为日志类型
  7. 点击下一步
  8. 为以下输入参数指定值:

    • Azure URI:输入包含容器路径的 Blob 服务端点网址:
    https://npsiaslogs.blob.core.windows.net/am-NpsIasLogs_CL/
    
    • 替换以下内容:
      • npsiaslogs:您的 Azure 存储账号名称。
      • am-NpsIasLogs_CL:数据导出规则自动创建的 Blob 容器名称。
    • 来源删除选项:根据您的偏好选择删除选项:
    • 永不:转移后永不删除任何文件。
    • 删除已转移的文件:在成功转移后删除文件。
    • 删除已转移的文件和空目录:成功转移后删除文件和空目录。
    • 文件存在时间上限:包含在过去指定天数内修改的文件(默认值为 180 天)
    • 共享密钥:输入您之前从存储账号中捕获的共享密钥值(访问密钥)
    • 资产命名空间资产命名空间
    • 注入标签:要应用于此 Feed 中事件的标签
  9. 点击下一步

  10. 最终确定界面中查看新的 Feed 配置,然后点击提交

配置 Azure 存储防火墙(如果已启用)

如果您的 Azure 存储账号使用防火墙,则必须添加 Google SecOps IP 范围。

  1. Azure 门户中,前往您的存储账号
  2. 安全性 + 网络下,选择网络
  3. 防火墙和虚拟网络下,选择从所选虚拟网络和 IP 地址启用
  4. 防火墙部分的地址范围下,点击 + 添加 IP 范围
  5. 以 CIDR 表示法添加每个 Google SecOps IP 范围。

    如需获取当前的 IP 范围,请执行以下操作:

  6. 验证是否已选中允许受信任的服务列表中的 Azure 服务访问此存储账号复选框(这是 Log Analytics 数据导出功能正常运行的必要条件)。

  7. 点击保存

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 如果 target_ip 是有效的 IP,则使用该值;否则,如果 called_station_id 是有效的 IP,则使用该值
called_station_id target.asset.ip
computer_name target.hostname 直接复制值
target_ip target.ip 如果 target_ip 是有效的 IP,则使用该值;否则,如果 called_station_id 是有效的 IP,则使用该值
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 专业人士的解答。