商业堡垒机对接GrayLog实现生产服务器高危命令钉钉机器人自动告警
一、堡垒机配置syslog日志发送
填写Graylog的IP与端口,为了好区分,我这里选用1516 UDP端口
(图片可点击放大查看)
这样GrayLog上启一下Syslog UDP Input,端口为1516
(图片可点击放大查看)
如图所示
(图片可点击放大查看)
(图片可点击放大查看)
日志样例
代码语言:javascript复制XXXXXXXX SecurityAuditSystemLog logType=YAB_RESOURCE_LOGIN_LOG, startTime=2022-02-26 16:10:50, endTime=2022-02-26 16:11:14, user=yuanfan<袁繁>, sourceIP=192.168.31.100, resource=CentOS7_Prod生产服务器, targetIP=192.168.31.105, protocol=SSH, account=root
日志中都是Key=Value键值对,那么是否将这些键值对直接映射成日志字段呢?
通过翻阅GrayLog官方的文档,找到了一种很简单的方法
代码语言:javascript复制https://docs.graylog.org/docs/extractors
AUTOMATICALLY EXTRACT ALL KEY=VALUE PAIRS
(图片可点击放大查看)
二、配置extractor
选中message最后的下三角符号,创建extractor提取器
(图片可点击放大查看)
类型Copy input
(图片可点击放大查看)
Store as field:message
Add converter选择Key=Value pairs as fields并Add
(图片可点击放大查看)
(图片可点击放大查看)
这时新产生的堡垒机日志就自动生成字段了
(图片可点击放大查看)
(图片可点击放大查看)
三、配置Prometheus告警模板
比如有reboot等高危操作时推送钉钉告警
如下图生产服务器192.168.31.127出现重启命令时就产生告警
Prometheus告警模板如下
代码语言:javascript复制### [【告警信息】](.check_result.Event.Source)
### <font color=#FF0000>告警描述:{{.event_definition_description}}</font>
{{ range $k,$v:=.backlog }}
###### <font color=#67C23A>告警产生时间</font>:{{GetCSTtime $v.timestamp}}
###### <font color=#67C23A>告警详细描述</font>:<font color=#FF0000>员工:{{$v.fields.user}} </font>通过堡垒机登录<font color=#FF0000>{{$v.fields.resource}}</font>于{{GetCSTtime $v.timestamp}}时间点执行了<font color=#FF0000>{{$v.fields.command}}</font>高危操作
###### <font color=#67C23A>告警服务器名称</font>:<font color=#FF0000>{{$v.fields.resource}}</font>
###### <font color=#67C23A>告警服务器的IP</font>:{{$v.fields.targetIP}}
###### <font color=#67C23A>告警原始日志</font>:{{$v.message}}
{{end}}
(图片可点击放大查看)
四、GrayLog配置Alert
Graylog上Alert的配置截图
(图片可点击放大查看)
(图片可点击放大查看)
(图片可点击放大查看)
(图片可点击放大查看)
查询条件
代码语言:javascript复制gl2_remote_ip:192.168.31.245 AND resource:"生产服务器192.168.31.127," AND command:"reboot,"
当然你的查询条件可以不局限这个示例,比如生产服务器如果都需要告警,可以在堡垒上把相关的生产服务器名称中都加上生产服务器的标签 这时查询条件可以这样写:
代码语言:javascript复制gl2_remote_ip:192.168.31.245 AND resource:生产服务器* AND command:reboot,
(图片可点击放大查看)
告警条件及查询语法请自行思维发散
五、钉钉机器人告警效果
钉钉机器人告警效果如下
(图片可点击放大查看)
总结:
本文有测试阶段时也踩过不少坑
在graylog-server-3.3.16 elasticsearch-oss-6.8.8环境中踩了一些坑,截图如下
(图片可点击放大查看)
(图片可点击放大查看)
(图片可点击放大查看)
测试环境中使用的是GrayLog4.1.5 elasticsearch-7.14.0,测试一切正常
经过日志分析与Graylog Google求证,最后参考如下几个链接解决
代码语言:javascript复制https://community.graylog.org/t/key-value-extractor-and-quotes-remove-whitespaces-with-regex-and-replace/3907/6
https://community.graylog.org/t/indexer-error-mapper-parsing-exception-no-matching-token-for-number-type-big-integer/22701/9
https://docs.graylog.org/docs/elasticsearch#custom-index-mappings
https://www.cnblogs.com/huangxiufen/p/12461191.html