我已经开始使用 Zabbix,并且可以看到当 /etc/passwd 等内容发生变化时它会发出警报。
搜索“zabbix 在 root 登录时发出警报”并没有出现任何提示——请问我该如何在 root 登录时发出警报?
答案1
您不应该完全允许 root 登录,因为这不安全。您应该只允许普通用户登录,一旦登录,用户就可以以sudo
root 身份执行命令。
话虽如此,为什么只检查 root 登录?检查普通用户登录同样重要。互联网上的机器人一直在对普通用户进行暴力攻击。
无论哪种方式,您都需要检查/var/log/auth.log
SSH 登录是否成功。检查日志文件需要主动 Zabbix 代理检查。因此,首先您需要确保主动检查正常运行(请参阅这篇博文)。
其次,Zabbix 用户(默认情况下)以用户身份运行zabbix
。因此它将无法读取/var/log/auth.log
,因为该文件仅可由 root 和组中的用户读取adm
。因此您可以将zabbix
用户添加到adm
组。这允许 Zabbix 读取许多日志文件(来源)。
最后,需要在Zabbix前端创建监控项和触发器。
创建项目:
Name: SSH successful authentication
Type: Zabbix agent (active)
Key: log[/var/log/auth.log,"Accepted .*",,,skip,\0]
为该项目创建一个触发器:
Name: Successful SSH authentication on {HOST.NAME}
Expression: {Template OS Linux - Extra:log[/var/log/auth.log,"Accepted .*",,,skip,\0].strlen()}>0 and {Template OS Linux - Extra:log[/var/log/auth.log,"Accepted .*",,,skip,\0].nodata(5m)}=0
注意Accepted .*
项目中的正则表达式。这应该匹配所有类型的 SSH 身份验证,无论是密码身份验证还是公钥身份验证。当然,在您的例子中,您可以将正则表达式更改为仅匹配来自 root 的登录。但如前所述,从安全角度来看,这毫无意义。
还请注意,我使用了log[...]
,因为这会导致正则表达式匹配的负责日志行包含在 Zabbix 将发送的通知电子邮件中。这样,您就可以在电子邮件中看到哪个用户已通过身份验证。
答案2
对于基于 debian 的系统,你需要/var/log/auth.log
像这样解析文件:
log.count[file,<regexp>,<encoding>,<maxproclines>,<mode>,<maxdelay>,<options>]
https://www.zabbix.com/documentation/current/manual/config/items/itemtypes/zabbix_agent
本质上:
log.count[/var/log/auth.log,*root*Accepted,,,skip]