当前位置: 首页 > news >正文

[linux运维] 利用zabbix监控linux高危命令并发送告警(基于Zabbix 6)

之前写过一篇是基于zabbix 5.4的实现文章,但是不太详细,最近已经有两个小伙伴在zabbix 6上操作,发现触发器没有str函数,所以更新一下本文,基于zabbix 6

0x01 来看看效果

高危指令出发问题告警:

图片

发出邮件告警:

图片

     

通过历史记录回溯用户指令

图片


0x02 如何实现命令记录?

1)Linux操作系统可以通过history命令查询执行的历史命令信息

图片

2)BASH在每次显示PS1之前都会执行PROMPT_COMMAND定义的内容 -- 可以理解为,每次用户在命令行点击一个回车之后,PROMPT_COMMAND都会被执行一次

3)利用上面两个特性,就可以实现命令行的记录

实现:修改Linux系统的/etc/bashrc文件

# 创建命令行记录文件
log_file=/var/log/cmd.log
# 如果是root的话就创建文件
if [[ $UID -eq 0 ]];then# 判断文件是否存在,不存在就创建if [ ! -f $log_file ]thentouch $log_filechmod 777 $log_filechattr +a $log_filefi
fi
# 定义PROMPT_COMMAND的内容为函数__set_prompt
export PROMPT_COMMAND=__set_prompt
# 定义PROMPT_COMMAND变量为只读变量
readonly PROMPT_COMMAND
# 定义最后一个history id
Last_Hit_Num=`history 1 | awk '{print $1}'`
__set_prompt (){local EXIT=$? # 定义命令执行的结果  # 获取本次命令执行的history idexport Cur_HIT_NUM=`history 1 | awk '{print $1}'`  # 如果本次执行的命令和上次执行的命令一样,则id没有变化,不需要进行记录# 如果这里不处理,空白回车也会导致记录,记录的值就是上次执行的命令if [[ $Cur_HIT_NUM -ne $Last_Hit_Num ]];then# 判断命令是否执行成功if [[ $EXIT -ne 0 ]];thenecho "执行时间:$(date '+%y-%m-%d %T') 用户:$(who am i | awk "{print \$1\" \"\$2\" \"\$5}") 当前目录:$(pwd) 执行命令:$(history 1 | sed 's/^[ \t]*//g' | cut -d " " -f2-) 执行失败" >>$log_fileelseecho "执行时间:$(date '+%y-%m-%d %T') 用户:$(who am i | awk "{print \$1\" \"\$2\" \"\$5}") 当前目录:$(pwd) 执行命令:$(history 1 | sed 's/^[ \t]*//g' | cut -d " " -f2-) 执行成功" >>$log_filefifi# Cur_Hit_Num赋值给Last_Hit_Numexport Last_Hit_Num=$Last_Hit_Numreturn $EXIT
}

退出用户重新登录,或者source一下/etc/bashrc使之生效。

查看记录是否成功

图片


0x03 在Zabbix上配置监控

1)创建一个模板Linux_Securtiry

图片

2)创建监控项Linuxshell

图片

键值是:logrt[/var/log/cmd.log,,,,,,,,]

3)新建一个触发器(触发告警),添加表达式

图片

     4)监控项选择上面创建的监控项,功能选择find(),O为匹配模式,我们用like,和数据库中的like是一样的意思,V是需要匹配的值,结果为1,填完之后点插入即可。

图片

    插入之后就会生成一条表达式

find(/Linux_Security/logrt[/var/log/cmd_log,,,,,,,,],,"like"," rm ")=1

如果要匹配多个命令,可以复制表达式,使用or连接,如:

find(/Linux_Security/logrt[/var/log/cmd_log,,,,,,,,],,"like"," rm ")=1 or
find(/Linux_Security/logrt[/var/log/cmd_log,,,,,,,,],,"like"," touch ")=1 or 
find(/Linux_Security/logrt[/var/log/cmd_log,,,,,,,,],,"like"," vi ")=1

最后把问题时间生成模式设置为多重即可。

图片

以下操作沿用5.4的配置,没有更新

5)配置一个发送邮件的动作

图片

图片



 

0x04 测试一下

    执行命令

图片

    查看Zabbix告警

图片

    可以看到已经发送了邮件,啥时候发恢复邮件呢?等最后一条命令不是高危命令就执行恢复了。

图片

    查看告警邮件

图片

    选择问题,点击历史记录可以查看历史的命令记录

图片

图片

--完,我是运维少年,欢迎关注我的微信公众号~

相关文章:

  • 公有云迁移研究——AWS DMS
  • Kubernetes集群安装高可用postgresql
  • 【c】小红的漂亮串
  • Xshell常用命令大全
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • 容器化技术Docker
  • Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、等业务的企业
  • Argoverse2数据集的导入
  • 【计算机组成体系结构】SRAM和DRAM
  • 了解linux计划任务
  • NumPy学习:NumPy(Numerical Python)基础(一)
  • Java 22种设计模式详解
  • debian11,debian 如何删除虚拟内存,交换分区
  • UE5 树叶飘落 学习笔记
  • 创建第一个 Flink 项目
  • 【comparator, comparable】小总结
  • Cookie 在前端中的实践
  • css系列之关于字体的事
  • Docker下部署自己的LNMP工作环境
  • Java 最常见的 200+ 面试题:面试必备
  • laravel with 查询列表限制条数
  • Nodejs和JavaWeb协助开发
  • Swoft 源码剖析 - 代码自动更新机制
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 百度地图API标注+时间轴组件
  • 简单基于spring的redis配置(单机和集群模式)
  • 开源地图数据可视化库——mapnik
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 微信小程序--------语音识别(前端自己也能玩)
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 小而合理的前端理论:rscss和rsjs
  • 智能合约Solidity教程-事件和日志(一)
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 移动端高清、多屏适配方案
  • #includecmath
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #宝哥教你#查看jquery绑定的事件函数
  • %check_box% in rails :coditions={:has_many , :through}
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (八)c52学习之旅-中断实验
  • (笔试题)分解质因式
  • (转载)从 Java 代码到 Java 堆
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bat文件调用java类的main方法
  • .NET Core跨平台微服务学习资源
  • .NET4.0并行计算技术基础(1)
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET企业级应用架构设计系列之结尾篇
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET学习全景图
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @vue/cli 3.x+引入jQuery
  • [20180129]bash显示path环境变量.txt
  • [20190401]关于semtimedop函数调用.txt
  • [Android Studio] 开发Java 程序