GrayLog实现堡垒机绕过告警时体现出具体违规人员的信息

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
日志服务 SLS,月写入数据量 50GB 1个月
简介: GrayLog实现堡垒机绕过告警时体现出具体违规人员的信息

在上一篇文章【实践】GrayLog下利用PrometheusAlert实现堡垒机绕过告警推送到钉钉群 的基础上,进行进一步的细化


GrayLog实现堡垒机绕过告警时能体现出具体违规人员的姓名


640.png

说明:本文所说的堡垒机绕过只针对Linux服务器


先看服务器/var/log/secure原始日志详情


Feb 19 15:53:50 localhost sshd[10978]: Accepted password for root from 192.168.31.25 port 52352 ssh2


640.jpg

思路与方法如下


1、这个功能需要从日志提取出192.168.31.25 这个IP字段field,并存为ssh_login_ip,需要用到GrayLog 的extrator提取器来实现

2、然后再需要用GrayLog的Lookup Tables实现IP字段field:ssh_login_ip查询到具体员工姓名,然后转换或者新增ssh_login_user这个字段

3、接下来再定义PrometheusAlert中GrayLog告警模板即可


具体实践的步骤如下


一、在syslog这个Input中配置extractor提取器


先加载你要提取的日志,可以用Search里找到要原始日志的MessageID以及index来Load message


640.jpg

提取器选择Regular expression正则表达式类型


640.jpg


我这里的正则表达式为


\]: Accepted password for .* from (.+?)\s.?


也可以用下面这个表达式 然后条件Condition你可以设置也可以不设置


Store as field并存为ssh_login_ip这个字段


640.jpg


1、正则表达式可以用Try进行预览测试


640.jpg


  • 2、关于上面的正则表达式也可以用下面这个


(?:<\d+>)?(?:\d{4}-\d{1,2}-\d{1,2}T\d{1,2}:\d{1,2}:\d{1,2}.*?|\S{1,3}\s*\d{1,2}\s*\d{1,2}:\d{1,2


640.jpg

保存这个提取器之后再查询SSH密码成功登录的日志就有了ssh_login_ip这个字段了


640.jpg



二、接下来配置员工IP与员工姓名的lookup Tables


这个步骤可以参考上一篇文章


【精选实践】GrayLog下利用PrometheusAlert实现堡垒机绕过告警推送到钉钉群

配置后的截图


640.jpg


能正常查询到员工姓名

640.jpg


640.jpg

三、创建pipeline中加一条rule 例如staff_ip2username_lookup


规则内容如下


rule "staff_ip2username_lookup"
when 
    has_field("ssh_login_ip")
then 
    //let update_username = lookup_value("staff_ip2username_lookup",$message.ssh_login_ip);
    let update_username = lookup_value("staff_ip2username_lookup",$message.ssh_login_ip);
    set_field("ssh_login_user",update_username);
end


640.jpg

也可以用如下规则(注意用lookup与lookup_value的区别)


rule "staff_ip2username_lookup"
when 
    has_field("ssh_login_ip")
then 
    //let update_username = lookup_value("staff_ip2username_lookup",$message.ssh_login_ip);
    let update_username = lookup("staff_ip2username_lookup",$message.ssh_login_ip);
    set_field("ssh_login_ip",update_username["value"]);
end


如下图所示 在Stage1中应用这个pipeline rule


640.jpg


640.jpg


四、调整日志消息的处理顺序


Message Filter Chain要放在Pipeline Processor之前


640.jpg


五、配置Graylog Alert+PrometheusAlert告警


这时就有了ssh_login_user这个字段了


640.jpg



接下来就只需要配置告警了  

具体告警模板如下


640.jpg

## [告警信息](.check_result.Event.Source)
### <font color=#FF0000>告警描述:{{.event_definition_description}}</font>
{{ range $k,$v:=.backlog }}
#####  <font color=#FF0000>告警时间</font>:{{GetCSTtime $v.timestamp}}
##### <font color=#FF0000>告警描述</font>: 员工:{{$v.fields.ssh_login_user}} 违规绕过堡垒机于{{GetCSTtime $v.timestamp}}时直接SSH登陆 {{$v.source}}:服务器,请及时处理并提醒该员工
##### <font color=#FF0000>告警服务器名称</font>:{{$v.source}}
##### <font color=#FF0000>告警服务器的IP</font>:{{$v.fields.gl2_remote_ip}}
##### <font color=#FF0000>具体违规操作员工姓名</font>: {{$v.fields.ssh_login_user}}
##### <font color=#FF0000>违规操作员工的电脑IP</font>: {{$v.fields.ssh_login_ip}}
##### <font color=#FF0000>告警原始日志</font>:{{$v.message}}
{{end}}


配置后截图示例


640.jpg

640.jpg


六、钉钉机器人告警效果


截图如下

640.jpg

640.jpg


七、总结与展开


其实还有两种方式直接利用LookupTables实现IP转换为员工姓名信息

  • 1、在配置提取器里直接再添加一个converter,类型为Lookup Tables



640.jpg

2、在ssh_login_ip这个字段再二次提取,提取器选择Lookup Table这个类型


640.jpg


640.jpg


  • 3、其实还可以进一步细化 再利用之前提到webhook工具在告警产生后进行命令执行,实现调用脚本自动触发SSH登录IP封锁或者消息推送到该员工


例如调用shell脚本


echo "sshd: $ssh_login_ip" >> /etc/hosts.deny


不过这个做法不太合理,如果配置过防堡垒机绕过的SSH访问控制策略 /etc/hosts.allow里应该是有堡垒机的IP和该员工的IP(意思是该员工有手动修改过/etc/hosts.allow文件,把自己的IP放通了) /etc/hosts.deny里是拒绝所有,一般不让修改(白名单/黑名单,最小化原则实现控制的常见安全控制方法) 所以这时应该调用脚本去删有该员工的IP的配置 例如


sed -i ’/$ssh_login_ip/d' /etc/hosts.allow


(这里只是举例,shell脚本语法不一定对)

当然告警自动化安全运维的想法还可以继续发散,欢迎提出好的建议。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
打赏
0
0
0
0
37
分享
相关文章
|
11月前
【视频小剧场】告警信息太多了怎么办?
云上业务量增多后,每天都会收到无数条告警信息,大多数都是没有必要的信息。但是又不管关闭通知,万一错过重大bug怎么办?试一试智能降噪吧!
101 0
【优化篇】调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
【优化篇】调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
161 0
调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
调用钉钉机器人API接口将堡垒机安全运维告警单发给运维人员
263 0
如何通过Cloudera Manager的API获取集群告警信息
如何通过Cloudera Manager的API获取集群告警信息
253 1
商业堡垒机对接GrayLog实现生产服务器高危命令钉钉机器人自动告警
商业堡垒机对接GrayLog实现生产服务器高危命令钉钉机器人自动告警
477 0
商业堡垒机对接GrayLog实现生产服务器高危命令钉钉机器人自动告警
SpringBoot中连接oracle出现告警信息
前几日领导说需要连接友商的Oracle,然后读取友商的数据展示到页面来。工作还是需要做的嘛,虽然比较简单些,但是工作量还是有的(此处划水摸鱼了呢?)。为了演示连接成功和可以读取数据,我在本地搭建了一个Oracle,然后作为测试来模拟读取,后续只需要替换下连接器的连接即可。然后,在启动SpringBoot项目时,有一个很显眼的WARN红色字体在控制台打印出来了。
SpringBoot中连接oracle出现告警信息
服务器发送告警信息shell脚本
服务器发送告警信息shell脚本
136 0
Java后台推送告警信息到钉钉
Java后台推送告警信息到钉钉的实现
772 0
Java后台推送告警信息到钉钉

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等