Graylog自定义钉钉报警

Syslog(UDP)统一转发至192.168.22.55:1514

接受日志的节点配置信息如下:

text

allow_override_date: true
bind_address: 0.0.0.0
charset_name: UTF-8
expand_structured_data: false
force_rdns: false
number_worker_threads: 6
override_source: <empty>
port: 1514
recv_buffer_size: 262144
store_full_message: false
timezone: Asia/Shanghai

如需要可额外增加节点,端口配置和以下一致:

text

- 1514:1514/tcp   # Syslog
- 1514:1514/udp   # Syslog
- 12201:12201/tcp # GELF
- 12201:12201/udp # GELF

用于存储日志,建议一个组件对应一个indices

示例配置以Jumpserver为例(几乎默认配置即可):

text

Index prefix:jumpserver_
Shards:1
Replicas:0
Field type refresh interval:5 seconds
Field type profile:Not set
Rotation strategy:Data Tiering
Max. in storage:40 days
Min. in storage:30 days

利用_Rules_来分流形成不同的_Stream_,往往使用这一类报文的唯一标识字段

| application_name must** match exactly suricata 形成suricata stream | source must **match exactly jumpserver:

形成jumpserver stream

原始日志往往是一长串字符串:

jumpserver: operation_log - {“action”: {“label”: “Export”, “value”: “export”}, “datetime”: “2025/06/04 18:23:05 +0800”, “id”: “863130fd-ab64-443f-a2cb-af7b6f3cd368”, “org_id”: “00000000-0000-0000-0000-000000000002”, “org_name”: “DEFAULT”, “remote_addr”: “192.168.109.42”, “resource”: “Export filtered”, “resource_type”: “Account”, “user”: “Administrator(admin)”}

不将json字段分离出来就不能根据某一或某些字段做进一步的区分形成更细分的_stream_从而告警。

解析字段有两种方法:Extractors_和_Pipelines

child_database

得到更细分的字段以后就能将此字段作为Rule分流新的Stream,并以此Stream中的内容作为告警的来源。

以suricata日志中_priority_ = 1的报文为例,此流为suricata Critical Alerts(已知的、成功的攻击,或者对系统/网络有直接威胁的活动):

为上面的需要告警的Stream创造Event,配置可参考Graylog - View “Critical Priority 1 Event” Event Definition

_Fields_字段连接日志源字段内容和告警消息内容,使得告警客户端(钉钉机器人、邮件等)能读取并发送选中字段内容:

日志原字段(部分) Event -> Fields(部分) 告警模板引用格式(部分)
alert_message ${source.alert_message} ${event.fields.alert_message}
classification ${source.classification} ${event.fields.classification}

不设置Fields字段,在告警模板中直接使用${event.<……>}也可以。

最后notification添加配置好的告警客户端。

在钉钉群中添加webhook机器人,安全验证方式可选择限定IP(公网IP),复制_webhook url_。

alert->notification中配置:

Title

Suricata alert Dingtalk notification customer

Description

钉钉群机器人

Notification Type

http-notification-v2

URL

https://oapi.dingtalk.com/robot/send?access_token=

Basic Authentication

API Key/Secret Sent As

API Key

API Secret

Method

POST

Time Zone

Asia/Shanghai

Content Type

JSON

Body Template

text

{
 "msgtype": "markdown",
 "markdown": {
 "title": "#### Suricata 安全告警",

 "text": "**消息**: ${event.fields.alert_message}

 **分类**: ${event.fields.classification}

 **源IP**: ${event.fields.source_ip}:${event.fields.source_port}

 **目标IP**: ${event.fields.destination_ip}:${event.fields.destination_port}

 **协议**: ${event.fields.protocol}

 **时间**: ${event.timestamp}"
 }
}

Upgrade Graylog in Docker