收集 Juniper Junos 日志
本文档介绍了如何使用 Bindplane 将 Juniper Junos 日志注入到 Google Security Operations。
Juniper Junos OS 是为 Juniper Networks 路由器、交换机和安全设备提供支持的操作系统。它提供了一个统一的平台,用于网络基础设施管理、路由、交换和安全功能,并全面记录系统事件、安全事件和网络流量。解析器从 Juniper Junos syslog 和键值格式的日志中提取字段。它使用 grok 和/或 kv 来解析日志消息,然后将这些值映射到统一数据模型 (UDM)。它还会为事件来源和类型设置默认元数据值。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- Windows Server 2016 或更高版本,或者具有
systemd的 Linux 主机 - 如果通过代理运行,请确保防火墙端口已根据 Bindplane 代理要求打开
- 对运行 Junos OS 的 Juniper 设备的特权访问权限
获取 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/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'JUNIPER_JUNOS' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
配置参数
替换以下占位符:
接收器配置:
udplog:使用udplog表示 UDP syslog,使用tcplog表示 TCP syslog0.0.0.0:要监听的 IP 地址(0.0.0.0表示监听所有接口)514:要监听的端口号(标准 syslog 端口)
导出器配置:
creds_file_path:提取身份验证文件的完整路径:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID:从“获取客户 ID”部分获取的客户 IDendpoint:区域端点网址:- 美国:
malachiteingestion-pa.googleapis.com - 欧洲:
europe-malachiteingestion-pa.googleapis.com - 亚洲:
asia-southeast1-malachiteingestion-pa.googleapis.com - 如需查看完整列表,请参阅区域级端点
- 美国:
log_type:日志类型,与在 Chronicle 中显示的完全一致 (JUNIPER_JUNOS)
保存配置文件
- 修改后,保存文件:
- Linux:依次按
Ctrl+O、Enter和Ctrl+X - Windows:依次点击文件 > 保存
- Linux:依次按
重启 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"
- 按
在 Juniper Junos 上配置 Syslog 转发
- 通过 SSH 或控制台连接到 Juniper 设备。
进入配置模式:
configure使用以下命令配置 syslog 主机:
set system syslog host BINDPLANE_IP any info set system syslog host BINDPLANE_IP port 514 set system syslog host BINDPLANE_IP facility-override local7 set system syslog host BINDPLANE_IP log-prefix JUNOS- 将
BINDPLANE_IP替换为 Bindplane 代理主机 IP 地址。
- 将
配置其他日志来源(可选,但建议配置):
set system syslog host BINDPLANE_IP authorization info set system syslog host BINDPLANE_IP daemon info set system syslog host BINDPLANE_IP kernel info set system syslog host BINDPLANE_IP firewall any set system syslog host BINDPLANE_IP interactive-commands info配置结构化 syslog 数据(可选,用于增强解析):
set system syslog host BINDPLANE_IP structured-data提交配置:
commit and-quit验证 syslog 配置:
show system syslog host BINDPLANE_IP通过检查 Bindplane 代理日志,验证是否正在发送 syslog 消息。
UDM 映射表
| 日志字段 | UDM 映射 | 逻辑 |
|---|---|---|
| 数据处理条款 : DPT | target.port | 网络连接的目标端口,已转换为整数。 |
| 数字服务税 (DST) | target.ip | 网络连接的目标 IP 地址。 |
| FLAG | additional.fields{}.key: "FLAG", additional.fields{}.value.string_value: FLAG 的值 | 与网络连接相关联的 TCP 标志。 |
| ID | additional.fields{}.key: "ID", additional.fields{}.value.string_value: ID 的值 | IP 识别字段。 |
| 印度 | additional.fields{}.key: "IN", additional.fields{}.value.string_value: Value of IN | 传入网络接口。 |
| LEN | additional.fields{}.key: "LEN", additional.fields{}.value.string_value: LEN 的值 | IP 数据包的长度。 |
| MAC | principal.mac | 从 MAC 字段提取的 MAC 地址。 |
| OUT | additional.fields{}.key: "OUT", additional.fields{}.value.string_value: OUT 的值 | 传出网络接口。 |
| PREC | additional.fields{}.key: "PREC", additional.fields{}.value.string_value: PREC 的值 | IP 标头中的“优先级”字段。 |
| PROTO | network.ip_protocol | 网络连接中使用的 IP 协议。 |
| RES | additional.fields{}.key: "RES", additional.fields{}.value.string_value: RES 的值 | TCP 标头中的保留字段。 |
| SPT | principal.port | 网络连接的来源端口(已转换为整数)。 |
| SRC | principal.ip | 网络连接的源 IP 地址。 |
| TOS | additional.fields{}.key: "TOS", additional.fields{}.value.string_value: TOS 的值 | IP 标头中的“服务类型”字段。 |
| TTL | network.dns.additional.ttl | 存留时间值,已转换为无符号整数。 |
| URGP | additional.fields{}.key: "URGP", additional.fields{}.value.string_value: URGP 的值 | TCP 标头中的紧急指针字段。 |
| WINDOW | additional.fields{}.key: "WINDOW_SIZE", additional.fields{}.value.string_value: WINDOW 的值 | TCP 窗口大小。 |
| 操作 | security_result.action | 从 CEF 消息中提取的防火墙采取的操作。 |
| agt | observer.ip | 代理的 IP 地址。 |
| amac | target.mac | 目标的 MAC 地址,转换为小写形式,并将连字符替换为英文冒号。 |
| 应用 | target.application | 涉及相应事件的应用。 |
| artz | observer.zone | 观测者时区。 |
| atz | target.location.country_or_region | 目标时区。 |
| categoryBehavior | additional.fields{}.key: "Category Behavior", additional.fields{}.value.string_value: categoryBehavior 的值(已移除斜杠) | 类别行为。 |
| categoryDeviceGroup | additional.fields{}.key: "Category Device Group", additional.fields{}.value.string_value: Value of categoryDeviceGroup with slashes removed | 类别设备组。 |
| categoryObject | additional.fields{}.key: "Category Object", additional.fields{}.value.string_value: Value of categoryObject with slashes removed | 类别对象。 |
| categoryOutcome | additional.fields{}.key: "Category Outcome", additional.fields{}.value.string_value: categoryOutcome 的值(已移除斜杠) | 分类处理结果。 |
| categorySignificance | additional.fields{}.key: "category Significance", additional.fields{}.value.string_value: categorySignificance 的值 | 类别的显著性。 |
| 命令 | target.process.command_line | 执行的命令。 |
| cs1Label | additional.fields{}.key: cs1Label, additional.fields{}.value.string_value: 相应 CEF 字段的值 | 来自 CEF 消息的自定义字符串字段 1 标签和值。 |
| cs2Label | additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: 相应 CEF 字段的值 | 来自 CEF 消息的自定义字符串字段 2 标签和值。 |
| cs3Label | additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: 相应 CEF 字段的值 | 来自 CEF 消息的自定义字符串字段 3 标签和值。 |
| cs4Label | additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: 相应 CEF 字段的值 | 来自 CEF 消息的自定义字符串字段 4 标签和值。 |
| cs5Label | additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: 相应 CEF 字段的值 | 来自 CEF 消息的自定义字符串字段 5 标签和值。 |
| cs6Label | additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: 相应 CEF 字段的值 | 来自 CEF 消息的自定义字符串字段 6 标签和值。 |
| dhost | target.hostname | 目标主机名。 |
| deviceCustomString1 | additional.fields{}.key: cs1Label, additional.fields{}.value.string_value: Value of deviceCustomString1 | 设备自定义字符串 1。 |
| deviceCustomString2 | additional.fields{}.key: cs2Label, additional.fields{}.value.string_value: Value of deviceCustomString2 | 设备自定义字符串 2。 |
| deviceCustomString3 | additional.fields{}.key: cs3Label, additional.fields{}.value.string_value: Value of deviceCustomString3 | 设备自定义字符串 3。 |
| deviceCustomString4 | additional.fields{}.key: cs4Label, additional.fields{}.value.string_value: Value of deviceCustomString4 | 设备自定义字符串 4。 |
| deviceCustomString5 | additional.fields{}.key: cs5Label, additional.fields{}.value.string_value: Value of deviceCustomString5 | 设备自定义字符串 5。 |
| deviceCustomString6 | additional.fields{}.key: cs6Label, additional.fields{}.value.string_value: Value of deviceCustomString6 | 设备自定义字符串 6。 |
| deviceDirection | network.direction | 网络流量的方向。 |
| deviceEventClassId | additional.fields{}.key: "eventId", additional.fields{}.value.string_value: Value of deviceEventClassId | 设备事件类 ID。 |
| deviceFacility | observer.product.subproduct | 设备设施。 |
| deviceProcessName | about.process.command_line | 设备进程名称。 |
| deviceSeverity | security_result.severity | 设备严重程度。 |
| deviceTimeZone | observer.zone | 设备时区。 |
| deviceVendor | metadata.vendor_name | 设备供应商。 |
| deviceVersion | metadata.product_version | 设备版本。 |
| dpt | target.port | 目标端口。 |
| dst | target.ip | 目标 IP 地址。 |
| duser | target.user.user_display_name | 目标用户。 |
| eventId | additional.fields{}.key: "eventId", additional.fields{}.value.string_value: Value of eventId | 活动 ID。 |
| event_time | metadata.event_timestamp | 从消息中解析出的事件发生时间。 |
| firewall_action | security_result.action_details | 采取的防火墙操作。 |
| 主机 | principal.hostname、intermediary.hostname | 生成日志的设备的主机名。在不同情况下,既可用于委托人,也可用于中介。 |
| msg | security_result.summary | 与事件关联的消息,用作安全结果的摘要。 |
| name | metadata.product_event_type | 事件的名称。 |
| process_name | additional.fields{}.key: "process_name", additional.fields{}.value.string_value: Value of process_name | 进程的名称。 |
| p_id | target.process.pid | 进程 ID(已转换为字符串)。 |
| sha256 | principal.process.file.sha256 | 从 SSH2 密钥信息中提取的文件的 SHA256 哈希值。 |
| shost | principal.hostname | 来源主机名。 |
| source_address | principal.ip | 来源 IP 地址。 |
| source_port | principal.port | 转换为整数的源端口。 |
| src | principal.ip | 来源 IP 地址。 |
| src_ip | principal.ip | 来源 IP 地址。 |
| src_port | principal.port | 转换为整数的源端口。 |
| ssh2 | security_result.detection_fields{}.key: "ssh2", security_result.detection_fields{}.value: Value of ssh2 | SSH2 密钥信息。 |
| 子类型 | metadata.product_event_type | 事件的子类型。 |
| task_summary | security_result.description | 任务摘要,用作安全结果的说明。 |
| 时间戳 | metadata.event_timestamp | 事件的时间戳。 |
| 用户 | target.user.userid | 与事件关联的用户。 |
| 用户名 | principal.user.userid | 与事件关联的用户名。 |
| user_name | principal.user.userid | 用户名。 |
| metadata.vendor_name | 硬编码为“Juniper 防火墙”。硬编码为“Juniper 防火墙”。硬编码为“JUNIPER_JUNOS”。由解析器逻辑根据日志内容确定。如果不是 CEF 消息,且未识别出其他特定事件类型,则默认为“STATUS_UPDATE”。对于 CEF 消息,设置为“NETWORK_HTTP”。如果不存在 desc 字段,则此字段会填充从原始日志消息中提取的 message_description。 |
需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。