CEF with Elasticsearch

本指南说明如何使用 Elasticsearch、Kibana 和 Fleet Server 配合 MikroTik RouterOS 设备配置 CEF 日志收集与分析。内容涵盖先决条件、Elastic 和 RouterOS 组件的设置步骤,包括 agent policy 创建和 CEF 集成配置。

将 CEF 与 Elasticsearch 配合使用

简介

Elasticsearch 是一个流行的 NoSQL 数据库,可用于存储各种数据,包括 CEF 日志。结合 Kibana,你可以创建一个强大的工具来分析来自 RouterOS 设备的 CEF 日志。本指南依赖 Elasticsearch 集成,要使其正常工作,你需要一个可用的 Elasticsearch 环境。本指南不会涵盖 Elasticsearch 和 Kibana 的安装说明,但会涵盖设置 CEF 日志收集与分析的相关步骤。

使用 Elasticsearch 可以进行许多可能的配置,但为了本指南的目的,我们将使用以下原则:

  • 一台 RouterOS (10.0.0.1) 设备将 CEF 日志发送到运行 CEF 集成的服务器 (10.0.0.2)。
  • 运行 CEF 集成的服务器 (10.0.0.2) 摄取 CEF 日志、处理数据并将其发送到 Fleet Server (10.0.0.3)。
  • Fleet Server (10.0.0.3) 将数据存储在 Elasticsearch (10.0.0.4) 中。
  • Kibana (10.0.0.5) 从 Elasticsearch (10.0.0.4) 检索数据、分析数据并允许你搜索数据。

信息

本指南不会使用 Logstash 作为分析 CEF 日志的一部分;它已被 Fleet Server 取代。

信息

可以将 Elasticsearch、Kibana、Fleet Server 和 CEF 日志集成安装在同一台设备上。

先决条件

  • 设置 Elasticsearch。
    :::info Elasticsearch 在多个平台上得到广泛支持。建议设置一个 Elasticsearch 节点集群。 :::
  • 设置 Kibana。
    :::info Kibana 可以安装在安装 Elasticsearch 的同一台设备上,但出于性能考虑,也可以将其安装在单独的设备上。虽然不使用 Kibana 也可以分析 CEF 日志,但需要编写自己的 API 请求。Kibana 非常易于使用,并具有广泛的功能。 :::
  • 设置 Fleet Server。
    :::info 可以在安装 Elasticsearch 和/或 Kibana 的同一台设备上设置 Fleet Server。建议将 Fleet Server 安装在不同的设备上。有关硬件和拓扑要求的建议,请参阅 Elasticsearch 手册。 :::

设置

设置说明分为两部分:Elastic(有关 Elasticsearch、Kibana 和 Fleet Server 的配置)和 RouterOS(与你的 RouterOS 设备相关的配置)。

Elastic

警告

某些步骤可能会随时间变化,请参阅 Elastic 的手册以查找最新的步骤。

  • 登录你的 Kibana。

  • 在主菜单下打开 Fleet 部分。

  • 打开 "Agent policies" 部分。

  • 按 "Create agent policy" 按钮以创建新的 Agent Policy。

  • 为该策略命名,例如 "CEF policy",根据需要调整高级设置,然后创建该策略。或者你可以使用下面的 API 请求:

    POST kbn:/api/fleet/agent_policies
    {
      "name": "CEF policy",
      "description": "",
      "namespace": "default",
      "monitoring_enabled": [
        "logs",
        "metrics"
      ],
      "inactivity_timeout": 1209600,
      "is_protected": false
    }
    
  • 通过点击名称打开你新创建的策略。

  • 按 "Add integration" 按钮。

  • 搜索 "Common Event Format (CEF)" 并按 "Add Common Event Format (CEF)"。

  • 调整配置,确保:

    • 在 "Collect CEF application logs (input: udp)" 部分下将 "Syslog Host" 设置为 "0.0.0.0"。
    • 在 "Collect CEF application logs (input: tcp)" 部分下将 "Syslog Host" 设置为 "0.0.0.0"。
  • 保存集成。

  • 按 "Add Elastic Agent to your host" 按钮。

  • 按照说明将 Elastic Agent 添加到你的主机。
    :::info Elastic 的官方手册建议将 Elastic Agent 安装为 Fleet-managed。考虑遵循该建议,因为当 agent 由 Fleet 管理时更容易管理。 :::

  • 转到主菜单上的 "Stack Management",然后打开 "Ingest Pipelines"。

  • 通过按 "Create pipeline" 然后 "New pipeline" 来创建新的 Ingest Pipeline。

  • 将 "Name" 设置为 "logs-cef.log@custom"。

  • 按 "Import processors" 并粘贴以下 processors:

    {
    	"processors": [
    		{
    			"set": {
    			"ignore_empty_value": true,
    			"field": "host.name",
    			"copy_from": "cef.extensions.deviceHostName"
    			}
    		},
    		{
    			"set": {
    			"ignore_empty_value": true,
    			"field": "host.ip",
    			"copy_from": "cef.extensions.deviceAddress"
    			}
    		}
    	]
    }
    

    :::info "logs-cef.log@custom" pipeline 不是必需的,但当你还使用 Elasticsearch 处理其他类型的日志时,它可以使搜索日志更容易。 :::

  • 按 "Save pipeline"。

  • 确保你已在主机上以及从 RouterOS 设备 (10.0.0.1) 路径中的其他位置打开 9003/UDP 端口。

  • 你的 Elastic Agent 现在已准备好接收 CEF 日志。

RouterOS

  1. 在你的 RouterOS 设备 (10.0.0.1) 上配置 Logging action 设置:

    /system/logging/action
    add cef-event-delimiter="\n" name=syslog remote=10.0.0.2 remote-log-format=cef remote-port=9003 syslog-facility=syslog syslog-time-format=iso8601 target=remote
    /system/logging
    add action=syslog topics=info
    add action=syslog topics=error
    add action=syslog topics=warning
    add action=syslog topics=critical
    
  2. 添加你希望从 RouterOS 设备 (10.0.0.1) 接收的主题,例如:

    /system/logging
    add action=syslog topics=info
    add action=syslog topics=error
    add action=syslog topics=critical
    add action=syslog topics=warning
    add action=syslog topics=bridge,stp
    
  3. 你现在应该开始看到 CEF 日志被摄取。

  4. 继续本指南以开始使用 Kibana。

使用 Kibana

Kibana 允许你搜索已摄取的 CEF 日志。要查看已摄取的日志,请执行以下操作:

  1. 登录你的 Kibana。

  2. 从主菜单打开 "Discover"。

  3. 添加过滤器,并使用以下参数:

    Select a field: data_stream.dataset
    Select operator: IS
    Select a value: cef.log
    
  4. 为简单起见,我们建议在 Discover 菜单中搜索字段,搜索 "message",然后将该字段添加到视图中。

  5. 我们还建议搜索 "host.name" 字段并将其也添加到视图中。

  6. 考虑保存搜索以便以后更容易访问。

  7. 完成!