收集 EfficientIP DDI 日志
本文档介绍了如何使用 Bindplane 代理将 EfficientIP DDI 日志注入到 Google Security Operations 中。
EfficientIP SOLIDserver 是一款全面的 DDI (DNS-DHCP-IPAM) 解决方案,可为关键网络服务(包括 DNS、DHCP、IP 地址管理、NTP 和 TFTP)提供高度伸缩、安全且可靠的虚拟和硬件设备。该平台可为网络基础设施提供集中式管理和自动化功能,并具备高级监控和安全功能。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows Server 2016 或更高版本,或者具有
systemd的 Linux 主机 - Bindplane 代理与 EfficientIP SOLIDserver 设备之间的网络连接
- 如果通过代理运行,请确保防火墙端口已根据 Bindplane 代理要求打开
- 对 EfficientIP SOLIDserver Web 控制台的管理员访问权限
- SOLIDserver 版本 8.0 或更高版本(已通过 8.3.x 和 8.4.x 测试)
获取 Google SecOps 注入身份验证文件
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 收集代理。
下载注入身份验证文件。将该文件安全地保存在将要安装 Bindplane 的系统上。
获取 Google SecOps 客户 ID
- 登录 Google SecOps 控制台。
- 依次前往 SIEM 设置 > 配置文件。
复制并保存组织详细信息部分中的客户 ID。
安装 Bindplane 代理
按照以下说明在 Windows 或 Linux 操作系统上安装 Bindplane 代理。
Windows 安装
- 以管理员身份打开命令提示符或 PowerShell。
运行以下命令:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet等待安装完成。
运行以下命令来验证安装:
sc query observiq-otel-collector服务状态应为 RUNNING。
Linux 安装
- 打开具有 root 或 sudo 权限的终端。
运行以下命令:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh等待安装完成。
运行以下命令来验证安装:
sudo systemctl status observiq-otel-collector服务状态应为有效(正在运行)。
其他安装资源
如需了解其他安装选项和问题排查信息,请参阅 Bindplane 代理安装指南。
配置 Bindplane 代理以注入 syslog 并将其发送到 Google SecOps
找到配置文件
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
修改配置文件
将
config.yaml的全部内容替换为以下配置:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/efficientip_ddi: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: EFFICIENTIP_DDI raw_log_field: body ingestion_labels: env: production source: solidserver service: pipelines: logs/efficientip_to_chronicle: receivers: - udplog exporters: - chronicle/efficientip_ddi替换以下占位符:
接收器配置:
listen_address:设置为0.0.0.0:514可在 UDP 端口 514 上监听所有接口。- 对于 Linux 非 root 部署,请使用端口
1514或更高端口。 - 确保端口与 SOLIDserver 中的配置相匹配。
- 对于 Linux 非 root 部署,请使用端口
导出器配置:
creds_file_path:提取身份验证文件的完整路径:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
customer_id:将YOUR_CUSTOMER_ID替换为上一步中的客户 ID。endpoint:区域端点:- 美国:
malachiteingestion-pa.googleapis.com - 欧洲:
europe-malachiteingestion-pa.googleapis.com - 亚洲:
asia-southeast1-malachiteingestion-pa.googleapis.com - 如需查看完整列表,请参阅区域级端点。
- 美国:
log_type:设置为EFFICIENTIP_DDI(必须完全匹配)。ingestion_labels:用于对日志进行分类的可选标签(可根据需要自定义)。
保存配置文件
修改后,保存文件:
- Linux:依次按
Ctrl+O、Enter和Ctrl+X - Windows:依次点击文件 > 保存
重启 Bindplane 代理以应用更改
如需在 Linux 中重启 Bindplane 代理,请执行以下操作:
运行以下命令:
sudo systemctl restart observiq-otel-collector验证服务是否正在运行:
sudo systemctl status observiq-otel-collector检查日志是否存在错误:
sudo journalctl -u observiq-otel-collector -f
如需在 Windows 中重启 Bindplane 代理,请执行以下操作:
请从下列选项中选择一项:
以管理员身份运行命令提示符或 PowerShell:
net stop observiq-otel-collector && net start observiq-otel-collector服务控制台:
- 按
Win+R,输入services.msc,然后按 Enter 键。 - 找到 observIQ OpenTelemetry 收集器。
- 右键点击并选择重新启动。
- 按
验证服务是否正在运行:
sc query observiq-otel-collector检查日志是否存在错误:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
配置 EfficientIP DDI syslog 转发
- 登录 EfficientIP SOLIDserver Web 控制台。
- 在左侧导航栏中,点击管理。
- 在监控部分中,点击配置。
- 在菜单中,点击 + 添加。
- 在服务列表中,选择以下服务:named(用于 DNS 日志)
- 在目标服务器字段中,输入 Bindplane 代理主机(格式为
<ip-address>:<port>)的 IP 地址和端口。- 示例:
192.168.1.100:514 - 如果要在 Linux 上使用非标准端口,请相应地指定端口(例如
192.168.1.100:1514)
- 示例:
点击确定以保存配置。
验证日志转发
- 检查 Bindplane 代理日志,确认是否正在接收日志:
- Linux:
sudo journalctl -u observiq-otel-collector -f - Windows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Linux:
- 查找包含来自 SOLIDserver 的 DNS 查询和回答事件的日志条目。
- 登录 Google SecOps 控制台,并验证 EfficientIP DDI 日志是否显示在事件页面中。
支持的日志类型
此集成会从 EfficientIP SOLIDserver 收集以下类型的日志:
- DNS 查询日志:包含查询类型、域名和客户端 IP 的客户端 DNS 查询
- DNS 回答日志:包含回答记录、TTL 和响应代码的 DNS 响应
- DHCP 日志:DHCP 操作,包括 DISCOVER、OFFER、REQUEST、ACK、NAK、RELEASE 和 INFORM
- DNS Guardian 日志:安全事件,包括可疑行为检测、启动/解除触发器
- DNS 区域转移日志:区域转移操作和通知
- DNS 错误日志:格式错误、SERVFAIL、REFUSED 和其他 DNS 错误
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
| ip_version | additional.fields | 如果非空,则合并为键为“ip_version”的标签 |
| message_size | additional.fields | 如果不为空,则合并为键为“message_size”的标签 |
| domain_name | additional.fields | 如果非空,则合并为键为“domain_name”的标签 |
| 不适用 | 中介 | 从中间对象合并 |
| 说明 | metadata.description | 如果不为空,则直接复制值 |
| msg2 | metadata.description | 如果 event_type 为 GENERIC_EVENT 且 description 为空,则设置为 msg2 |
| su_cmd | metadata.event_type | 如果 su_cmd 为“sudo”,则设置为“PROCESS_OPEN” |
| activity_type | metadata.event_type | 如果 activity_type 与 dns 匹配且 has_dns_questions 为 true,则设置为“NETWORK_DNS” |
| 消息 | metadata.event_type | 如果消息与 DHCP 匹配,则设置为“NETWORK_DHCP” |
| inner_message | metadata.event_type | 如果 inner_message 匹配特定模式,且 has_principal 和 has_target 为 true,则设置为“NETWORK_UNCATEGORIZED” |
| 原始事件 | metadata.event_type | 如果进程为“named”且 has_dns_questions 为 true,则设置为“NETWORK_DNS”;如果进程为“named”且 has_principal 为 true,则设置为“STATUS_UPDATE”;如果进程为“named”,则设置为“GENERIC_EVENT”;如果进程为“dhcpd”,则设置为“NETWORK_DHCP” |
| PWD | metadata.event_type | 如果 PWD 不为空,且 has_target 或 has_principal 为 true,则设置为“PROCESS_OPEN” |
| activity_type | metadata.product_event_type | 直接复制值 |
| 不适用 | metadata.vendor_name | 设置为“EFFICIENTIP_DDI” |
| 不适用 | metadata.product_name | 设置为“EFFICIENTIP_DDI DHCP” |
| activity_type | network.application_protocol | 如果 activity_type 与 dns 匹配且 has_dns_questions 为 true,则设置为“DNS” |
| 消息 | network.application_protocol | 如果消息与 DHCP 匹配,则设置为“DHCP” |
| 原始事件 | network.application_protocol | 如果进程为“named”,则设置为“DNS”;如果进程为“dhcpd”,则设置为“DHCP” |
| src_mac | network.dhcp.chaddr | 如果进程为“dhcpd”,则直接复制值 |
| src_ip | network.dhcp.ciaddr | 如果 dhcp_info 为“REQUEST”,则直接复制值 |
| giaddr | network.dhcp.giaddr | 直接复制值 |
| dhcp_info | network.dhcp.opcode | 如果 dhcp_info 为“INFORM”“DISCOVER”或“REQUEST”,则设置为“BOOTREQUEST”;如果 dhcp_info 为“OFFER”或“ACK”,则设置为“BOOTREPLY” |
| siaddr | network.dhcp.siaddr | 直接复制值 |
| transaction_id | network.dhcp.transaction_id | 如果值不为空或不为“0”,则转换为无符号整数 |
| dhcp_info | network.dhcp.type | 如果 dhcp_info 为“INFORM”,则设置为“INFORM”;如果为“DISCOVER”,则设置为“DISCOVER”;如果为“OFFER”,则设置为“OFFER”;如果为“REQUEST”,则设置为“REQUEST”;如果为“ACK”,则设置为“PACK” |
| yiaddr | network.dhcp.yiaddr | 直接复制值 |
| src_ip | network.dhcp.yiaddr | 如果进程为“dhcpd”且 yiaddr 为空,则设置为 src_ip |
| answer_rrs | network.dns.answers | 从 answer_rrs 中每个 rd 的回答对象合并 |
| 不适用 | network.dns.questions | 如果 has_dns_questions 为 true,则从 questions 对象合并 |
| rcode | network.dns.response_code | 转换为无符号整数的值 |
| response_code | network.dns.response_code | 映射到数字代码并转换为无符号整数的值 |
| transport | network.ip_protocol | 如果与 UDP 或 TCP 匹配,则值会转换为大写 |
| 观察者 | observer.ip | 值已转换为 ipaddress |
| su_cmd | principal.application | 如果 su_cmd 为“sudo”,则直接复制值 |
| 原始事件 | principal.application | 如果进程为“named”或“dhcpd”,则设置为处理 |
| 主机 | principal.asset.hostname | 如果不为空,则直接复制值 |
| 主机名 | principal.asset.hostname | 如果值不为空且主机为空,则直接复制值 |
| src_ip | principal.asset.ip | 直接复制值 |
| asset_id | principal.asset_id | 串联为“ID:”+ asset_id |
| 主机 | principal.hostname | 如果不为空,则直接复制值 |
| 主机名 | principal.hostname | 如果值不为空且主机为空,则直接复制值 |
| domain_name | principal.hostname | 如果说明包含主机名且主机/主机名为空,则直接复制值 |
| src_ip | principal.ip | 如果成功转换为 IP 地址,则直接复制该值;如果 src_ip 为空,则从说明中提取该值 |
| src_mac | principal.mac | 直接复制值 |
| src_port | principal.port | 转换为整数的值 |
| process_id | principal.process.pid | 直接复制值 |
| source_user | principal.user.userid | 直接复制值 |
| 不适用 | security_result | 从 sec_result 合并 |
| dst_ip | target.asset.ip | 直接复制值 |
| file_path | target.file.full_path | 直接复制值 |
| dst_ip | target.hostname | 如果不是有效的 IP 地址,则直接复制值 |
| 主机 | target.hostname | 如果 inner_message 匹配特定模式,则直接复制值 |
| dst_ip | target.ip | 直接复制值 |
| dst_port | target.port | 转换为整数的值 |
| target_cmd_line | target.process.command_line | 直接复制值 |
| target_user | target.user.userid | 直接复制值 |
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。