收集 DNSFilter 日志
解析器版本: 1.0
本文档介绍了如何配置 DNSFilter,以使用 HTTP Event Collector (HEC) 协议通过 Webhook 将日志推送到 Google Security Operations。
DNSFilter 是一种由 AI 提供支持的 DNS 安全解决方案,可提供威胁防护、内容过滤和网络可见性。借助数据导出功能,可以通过 HTTP Event Collector (HEC) API 将 DNS 查询日志数据自动导出到 SIEM 平台,从而支持实时安全监控和合规性报告。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 具有管理员权限或更高权限的 DNSFilter 信息中心 访问权限
- 已启用 DNSFilter 数据导出 加购方案功能(适用于 Basic、Pro 和 Enterprise 方案,作为付费加购方案提供)
- Google Cloud Console 的访问权限(用于创建 API 密钥)
在 Google SecOps 中创建 Webhook Feed
创建 Feed
- 依次前往 SIEM 设置 > Feed。
- 点击 Add New Feed (添加新 Feed)。
- 在下一页上,点击 Configure a single feed (配置单个 Feed)。
- 在 Feed 名称 字段中,输入 Feed 的名称(例如
DNSFilter HEC Feed)。 - 选择 Webhook 作为来源类型 。
- 选择 DNSFILTER 作为日志类型 。
- 点击下一步 。
- 为以下输入参数指定值:
- 定界符 (可选):留空,因为每个 HEC 请求都包含格式正确的事件
- 资产命名空间:资产命名空间
- 注入标签:要应用于此 Feed 中事件的标签
- 点击下一步 。
- 在 Finalize (完成)屏幕中检查新 Feed 配置,然后点击提交 。
生成并保存密钥
创建 Feed 后,您必须生成密钥以进行身份验证:
- 在 Feed 详情页面上,点击 Generate Secret Key (生成密钥)。
- 系统会显示一个对话框,其中包含密钥。
复制并妥善保存 密钥。
获取 Feed 端点网址
- 前往 Feed 的详情 标签页。
- 在 Endpoint Information (端点信息)部分,复制 Feed 端点网址 。
网址格式为:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate或
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate保存此网址,以供在后续步骤中使用。
点击完成 。
创建 Google Cloud API 密钥
Google SecOps 需要 API 密钥进行身份验证。在 Google Cloud Console 中创建受限 API 密钥。
创建 API 密钥
- 前往 Google Cloud 控制台的凭据页面。
- 选择您的项目(与您的 Google SecOps 实例关联的项目)。
- 点击创建凭据 > API 密钥。
- 系统会创建 API 密钥,并在对话框中显示该密钥。
- 点击 Edit API key (修改 API 密钥)以限制密钥。
限制 API 密钥
- 在 API 密钥 设置页面中:
名称:输入描述性名称(例如
Google SecOps DNSFilter Webhook API Key) - 在 API 限制 下:
- 选择限制密钥 。
- 在 Select APIs (选择 API)下拉列表中,搜索并选择 Google SecOps API (或 Chronicle API )。
- 点击保存 。
- 从页面顶部的 API 密钥 字段中复制 API 密钥值。
妥善保存 API 密钥。
配置 DNSFilter 数据导出
构建 HEC 端点网址
将 Google SecOps 端点网址和 API 密钥组合在一起,以创建 HEC 网址:
<ENDPOINT_URL>?key=<API_KEY>示例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
在 DNSFilter 中配置数据导出
- 登录 DNSFilter 信息中心 。
- 依次前往 Tools > Data Export (工具 > 数据导出)。
- 在 Export Destination (导出目标)部分,选择 HTTP Event Collector (HEC) 。
- 在 HEC Configuration (HEC 配置)部分,输入以下内容:
- HTTP Event Collector 网址:粘贴上一步中的完整端点网址(包含 API 密钥)。
- Active Event Collector Token:粘贴在创建 Google SecOps Feed 期间生成的密钥。
- 点击保存配置 。
DNSFilter 将测试连接,并在配置正确时显示一条成功消息。
验证数据注入
- 在 DNSFilter 信息中心 中,依次前往 Tools > Data Export(工具 > 数据导出)。
- 验证状态 是否显示为有效 或已连接 。
- 在 Google SecOps 控制台中,依次前往 SIEM 设置 > Feed。
- 找到您的 DNSFilter Feed,并验证状态 是否显示为有效 。
- 点击 Feed 名称以查看详情。
- 检查 Logs Ingested (注入的日志)指标,以确认数据正在流动。
如需搜索 DNSFilter 事件,请前往 Search(搜索),然后运行以下查询:
metadata.log_type = "DNSFILTER"
身份验证方法参考
Google SecOps Webhook Feed 支持多种身份验证方法。DNSFilter HEC 集成使用混合方法。
使用的方法:混合(网址 + 标头)
DNSFilter 会在网址中发送 API 密钥,并在请求标头中发送密钥(HEC 令牌)。
请求格式:
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json Authorization: Splunk <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
替代方法:自定义标头
如果配置自定义应用以将日志发送到 Google SecOps,请使用此方法以提高安全性。
请求格式:
POST <ENDPOINT_URL> HTTP/1.1 Content-Type: application/json x-goog-chronicle-auth: <API_KEY> x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }优点:
- API 密钥和密钥在网址中不可见
- 更安全(标头不会记录在 Web 服务器访问日志中)
- 如果供应商支持,则首选此方法
身份验证标头名称
Google SecOps 接受以下标头名称进行身份验证:
对于 API 密钥:
x-goog-chronicle-auth(推荐)X-Goog-Chronicle-Auth(不区分大小写)
对于密钥:
x-chronicle-auth(推荐)X-Chronicle-Auth(不区分大小写)Authorization: Splunk <TOKEN>(HEC 兼容性)
Webhook 限制和最佳实践
请求限制
| 限制 | 值 |
|---|---|
| 最大请求大小 | 4 MB |
| 最大 QPS(每秒查询次数) | 15,000 |
| 请求超时 | 30 秒 |
| 重试行为 | 自动重试,使用指数退避算法 |
最佳实践
- 监控导出状态:定期检查 DNSFilter 信息中心内的数据导出状态,以确保数据持续流动。
- API 密钥轮替:定期轮替 Google Cloud API 密钥,以确保安全。
- 密钥管理:妥善存储 Google SecOps 密钥,并在密钥被破解时重新生成。
- 数据保留:在 DNSFilter 和 Google SecOps 中配置适当的数据保留政策。
- 提醒配置:在 Google SecOps 中为关键 DNS 安全事件设置提醒。
问题排查
连接测试失败
如果 DNSFilter 数据导出配置测试失败,请执行以下操作:
- 验证 HEC 网址是否正确,并且是否包含 API 密钥参数。
- 验证密钥(HEC 令牌)是否已正确复制,且不包含多余的空格。
- 检查 Google Cloud API 密钥是否已启用 Chronicle API 访问权限。
- 验证 Google SecOps Feed 是否处于有效 状态。
- 检查从 DNSFilter 到 Google Cloud 端点的网络连接。
Google SecOps 中未显示任何数据
如果连接成功,但未显示任何数据,请执行以下操作:
- 验证 DNS 查询是否在 DNSFilter 部署中生成。
- 检查 DNSFilter 查询日志,以确认流量是否正在处理。
- 在 Google SecOps 中,搜索
metadata.log_type = "DNSFILTER"以验证注入。 - 检查 Google SecOps 中的 Feed Logs Ingested (注入的日志)指标。
- 查看 Feed Error Logs (错误日志)是否存在任何注入错误。
数据导出返回错误消息
常见错误原因:
- 凭据无效:API 密钥或密钥不正确或已过期。
- 区域不匹配:Google SecOps 端点网址区域与您的实例不匹配。
- 权限:API 密钥未启用 Chronicle API 访问权限。
- 网络问题:防火墙或代理阻止出站 HTTPS 连接。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
| 时间 | metadata.collected_timestamp | 使用日期格式 yyyy-MM-dd HH:mm:ss Z UTC 进行转换 |
| metadata.event_type | 如果 principal_ip_present、principal_hostname_present 或 principal_mac_present 为 true,则设置为“STATUS_UPDATE”,否则设置为“GENERIC_EVENT” | |
| question_type | network.dns.questions | 使用 DNS 记录类型映射将 question_type 转换为 question.type,然后合并到数组中 |
| 代码 | network.dns.response_code | 使用 DNS 响应代码映射进行转换 |
| 协议 | network.ip_protocol | 使用 IP 协议映射进行转换 |
| 客户端 | principal.hostname | 直接复制值 |
| request_address、ip4、ip6、source_addresses | principal.ip | 从 request_address(提取的 IP)、ip4(提取的 IP)、ip6(提取的 IP)以及从 source_addresses 数组中提取的 IP 合并 |
| 区域 | principal.location.country_or_region | 直接复制值 |
| clientMac | principal.mac | 如果与 MAC 正则表达式匹配,则直接复制值 |
| clientID | principal.resource.product_object_id | 直接复制值 |
| 用户名 | principal.user.user_display_name | 直接复制值 |
| user_id | principal.user.userid | 直接复制值 |
| code、original_code、clientType、collection、network_name、networkID、collectionID、policy、policyID、scheduled_policy、scheduled_policyID、sec_cats、sec_allow_cats、block_cats、block_allow_cats、threat、allowed、method、组织、organizationID、applicationID、application_name、application_categoryID、application_category_name | security_result.detection_fields | 将来自各种源字段的标签合并为键值对 |
| 域名 | target.administrative_domain | 直接复制值 |
| fqdn | target.domain.name | 直接复制值 |
| metadata.product_name | 设置为“DNSFILTER” | |
| metadata.vendor_name | 设置为“DNSFILTER” |
更新日志
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。