1、需求
出于服务器安全原因,需要实时检测Ubuntu服务器登录失败的用户登录信息并且发送到slack,试过以下几种办法
1)python脚本去定时检测日志文件当中的失败信息,但是这样检测有个缺点就是需要判断日志产生的时间,要避免重复发送提醒信息,还有需要给python脚本单独做守护进程或者是定时任务
2)将日志文件转发出来,比如通过promtail发送日志文件信息到loki,然后再利用Granfa的的alert功能定时检测日志文件当中的关键字然后发送警告,但是这样不是很友好,不可以将日志文件的关键字的信息发送出来,只能偏向监控统计告警
3)利用loki结合Prometheus的Alertmanager,原理是在loki当中配置关键字检索,然后发送到Alertmanager,配置较为繁琐
4)利用脚本语言定时扫描loki日志,通过api定时去扫描日志并且做时间判断筛选,loki的第三方脚本api封装包其实不是很多,不建议;假如是elk架构另外的话是不可以操作服务器配置的话可以考虑去扫描es的日志数据做关键字日志监控
5)利用syslog-ng,syslog-ng 是一个开源的日志管理工具,它可以收集、处理和传输日志信息。它支持多种协议和格式,可以从多种来源收集日志信息,并将其传输到多种目的地,以下是它的优点
- 高效的日志处理:syslog-ng 可以快速地处理大量的日志信息。
- 灵活的配置:syslog-ng 提供了丰富的配置选项,可以满足各种不同的需求。
- 安全性:syslog-ng 支持多种安全协议,可以确保日志信息在传输过程中的安全性。
- 可扩展性:syslog-ng 支持多种插件和模块,可以方便地扩展其功能。
2、Ubuntu安装syslog-ng
1. 打开终端并更新软件包列表:
sudo apt-get update
2. 安装 syslog-ng 软件包:
sudo apt-get install syslog-ng
3. 安装完成后,syslog-ng 服务将自动启动。您可以使用以下命令检查其状态:
sudo service syslog-ng status
4. syslog-ng 的配置文件位于 `/etc/syslog-ng/syslog-ng.conf`。可以根据需要编辑此文件来配置 syslog-ng。
5. 在修改配置文件后,需要重启 syslog-ng 服务以使更改生效:
sudo service syslog-ng restart
3、监控日志文件
1、安装并配置 syslog-ng 软件包,用于监控 /var/log/auth.log 文件中的登录失败信息。您可以在 /etc/syslog-ng/conf.d/ 目录下创建一个新交件,内容如下:
filter f_authfail { (facility(auth, authpriv) and match("Failed password")) or (facility(auth, authpriv) and match("Disconnected from authenticating")); };
destination d_slack { program("/root/task/slack.sh"); };
log { source(s_src); filter(f_authfail); destination(d_slack); };
这个配置会监控 auth.log 文件中包含Failed password”文本的消息,并将其转发到 /root/task/slack.sh 脚本 2、.在 /root/task/slack.sh 路径下创建个脚本,用于通过 Slack APl token 和用户名发送通知到 Slack。下面是一个示例脚本,它使用 Slack APl token 和用户名向Slack 频道发送消息:
#!/bin/bash
SLACK_API_TOKEN="xxxxx"
SLACK_CHANNEL_ID="xxxx"
SLACK_USERNAME="xxxxx"
read MESSAGE
ipAddr=$(ip addr show | grep inet | grep -v inet6 | grep '/24' | awk '{print $2}' | awk -F '/' '{print $1}')
list=("Failed password" "Disconnected from authenticating")
found=0
for item in "${list[@]}"; do
if [[ $MESSAGE == *"$item"* ]]; then
found=1
break
fi
done
if [[ $found -eq 1 ]]; then
echo "Substring found in full string"
curl -X POST -H 'Content-type: application/json' \
-H "Authorization: Bearer $SLACK_API_TOKEN" \
--data "{\"channel\":\"$SLACK_CHANNEL_ID\",\"text\":\"$MESSAGE $ipAddr\",\"username\":\"$SLACK_USERNAME\"}" \
https://slack.com/api/chat.postMessage
else
echo "Substring not found in full string"
fi
3、配置完成,重启服务即可
sudo service syslog-ng restart
以下是效果图
4、不生效排查
1)、排查syslog-ng是否启动
2)、通过一下命令检查文件是否执行正常、是否有权限
echo "Test message" | /root/task/slack.sh
# 假如没权限的话赋予权限
chmod +x /root/task/slack.sh