[linux运维] 利用zabbix监控linux高危命令并发送告警

Posted 运维少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[linux运维] 利用zabbix监控linux高危命令并发送告警相关的知识,希望对你有一定的参考价值。

0x01 来看看效果

高危指令出发问题告警:


[linux运维]


发出邮件告警:[linux运维]     

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


[linux运维]



0x02 如何实现命令记录?

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

[linux运维]

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


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


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

# 创建命令行记录文件
log_file=/var/log/cmd.log
# 如果是root的话就创建文件
if [[ $UID -eq 0 ]];then
# 判断文件是否存在,不存在就创建
if [ ! -f $log_file ]
then
touch $log_file
chmod 777 $log_file
chattr +a $log_file
fi
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 id
export Cur_HIT_NUM=`history 1 | awk print $1`
# 如果本次执行的命令和上次执行的命令一样,则id没有变化,不需要进行记录
# 如果这里不处理,空白回车也会导致记录,记录的值就是上次执行的命令
if [[ $Cur_HIT_NUM -ne $Last_Hit_Num ]];then
# 判断命令是否执行成功
if [[ $EXIT -ne 0 ]];then
echo "执行时间:$(date +%y-%m-%d %T) 用户:$(who am i | awk "print \\$1\\" \\"\\$2\\" \\"\\$5") 当前目录:$(pwd) 执行命令:$(history 1 | sed s/^[ \\t]*//g | cut -d " " -f2-) 执行失败" >>$log_file
else
echo "执行时间:$(date +%y-%m-%d %T) 用户:$(who am i | awk "print \\$1\\" \\"\\$2\\" \\"\\$5") 当前目录:$(pwd) 执行命令:$(history 1 | sed s/^[ \\t]*//g | cut -d " " -f2-) 执行成功" >>$log_file
fi
fi
# Cur_Hit_Num赋值给Last_Hit_Num
export Last_Hit_Num=$Last_Hit_Num
return $EXIT

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

查看记录是否成功

[linux运维]



0x03 在Zabbix上配置监控

1)创建一个模板

[linux运维]

2)在模板中创建应用集

[linux运维]

3)创建监控项

[linux运维]

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

[linux运维]

4)新建一个触发器(触发告警)

[linux运维]

表达式如下(可以将你认为高危的指令写上去):

Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( rm )=1 
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( mv )=1
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( wget )=1
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( curl )=1
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( sh )=1
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( /bin/sh )=1
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( touch )=1
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( vi )=1
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( rmmod )=1
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( start )=1
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( stop )=1
or Linux General Template:logrt[/var/log/cmd.log,,,,,,,,].str( restart )=1

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

[linux运维]

[linux运维]



0x04 测试一下

    ​执行命令

[linux运维]


    查看Zabbix告警

[linux运维]

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

[linux运维]


    查看告警邮件

[linux运维]


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

[linux运维]

[linux运维]


--完

[linux运维]


以上是关于[linux运维] 利用zabbix监控linux高危命令并发送告警的主要内容,如果未能解决你的问题,请参考以下文章

运维监控Zabbix监控Linux主机设置

linux运维之zabbix监控windows服务器

开源的linux运维监控工具都有哪些

如何利用 Zabbix 监控 mysqldump 定时备份数据库是否成功?

从入门到精通 | Linux老司机带你学Zabbix,运维小白速收!

小白都能看懂的Linux系统下安装配置Zabbix