收集 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 注入身份验证文件

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 收集代理
  3. 下载注入身份验证文件。将文件安全地保存在将要安装 Bindplane 的系统上。

获取 Google SecOps 客户 ID

  1. 登录 Google SecOps 控制台。
  2. 依次前往 SIEM 设置 > 配置文件
  3. 复制并保存组织详细信息部分中的客户 ID

安装 Bindplane 代理

按照以下说明在 Windows 或 Linux 操作系统上安装 Bindplane 代理。

Windows 安装

  1. 以管理员身份打开命令提示符PowerShell
  2. 运行以下命令:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. 等待安装完成。

  4. 运行以下命令来验证安装:

    sc query observiq-otel-collector
    

该服务应显示为 RUNNING

Linux 安装

  1. 打开具有 root 或 sudo 权限的终端。
  2. 运行以下命令:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. 等待安装完成。

  4. 运行以下命令来验证安装:

    sudo systemctl status observiq-otel-collector
    

该服务应显示为有效(正在运行)

其他安装资源

如需了解其他安装选项和问题排查信息,请参阅 Bindplane 代理安装指南

配置 Bindplane 代理以注入 syslog 并将其发送到 Google SecOps

找到配置文件

  • Linux

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows

    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 syslog
      • 0.0.0.0:要监听的 IP 地址(0.0.0.0 表示监听所有接口)
      • 514:要监听的端口号(标准 syslog 端口)
    • 导出器配置

      • creds_file_path:提取身份验证文件的完整路径:
        • Linux/etc/bindplane-agent/ingestion-auth.json
        • WindowsC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID:从“获取客户 ID”部分获取的客户 ID
      • endpoint:区域端点网址:
        • 美国malachiteingestion-pa.googleapis.com
        • 欧洲europe-malachiteingestion-pa.googleapis.com
        • 亚洲asia-southeast1-malachiteingestion-pa.googleapis.com
        • 如需查看完整列表,请参阅区域级端点
      • log_type:日志类型,与在 Chronicle 中显示的完全一致 (JUNIPER_JUNOS)

保存配置文件

  • 修改后,保存文件:
    • Linux:依次按 Ctrl+OEnterCtrl+X
    • Windows:依次点击文件 > 保存

重启 Bindplane 代理以应用更改

  • 如需在 Linux 中重启 Bindplane 代理,请运行以下命令:

    sudo systemctl restart observiq-otel-collector
    
    1. 验证服务是否正在运行:

        sudo systemctl status observiq-otel-collector
      
    2. 检查日志是否存在错误:

        sudo journalctl -u observiq-otel-collector -f
      
  • 如需在 Windows 中重启 Bindplane 代理,请选择以下选项之一:

    • 以管理员身份运行命令提示符或 PowerShell:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • 服务控制台:

      1. Win+R,输入 services.msc,然后按 Enter 键。
      2. 找到 observIQ OpenTelemetry 收集器
      3. 右键点击并选择重新启动

      4. 验证服务是否正在运行:

        sc query observiq-otel-collector
        
      5. 检查日志是否存在错误:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

在 Juniper Junos 上配置 Syslog 转发

  1. 通过 SSH 或控制台连接到 Juniper 设备。
  2. 进入配置模式:

    configure
    
  3. 使用以下命令配置 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 地址。
  4. 配置其他日志来源(可选,但建议配置):

    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
    
  5. 配置结构化 syslog 数据(可选,用于增强解析):

    set system syslog host BINDPLANE_IP structured-data
    
  6. 提交配置:

    commit and-quit
    
  7. 验证 syslog 配置:

    show system syslog host BINDPLANE_IP
    
  8. 通过检查 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 专业人士的解答。