加强Linux防线,快速构建异常登录检测,并通过钉钉机器人把告警推送到钉钉工作群上

本文主要是介绍加强Linux防线,快速构建异常登录检测,并通过钉钉机器人把告警推送到钉钉工作群上,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在管理和维护Linux服务器时,安全是一个非常重要的方面。监控登录异常可以帮助管理员及时发现潜在的安全问题,比如多次失败的登录尝试、来自未知IP的访问等。本文将介绍如何编写一个Shell脚本,监控Linux服务器的登录异常并发送警报。

工作场景

运维工程师小张负责管理公司的多台Linux服务器。为了确保服务器的安全性,小张需要定期监控服务器的登录记录,尤其是关注异常的登录行为,例如多次失败的登录尝试或者来自不常见IP地址的登录。通过自动化脚本,小张可以及时获取异常登录的警报,从而采取必要的安全措施。

脚本功能概述

我们将编写一个Shell脚本,实现以下功能:

  1. 定期检查系统日志,获取登录失败的记录。

  2. 识别多次失败的登录尝试和来自未知IP的登录,并查询这些IP的归属地

  3. 将异常情况记录到日志文件。

  4. 把告警信息推送到钉钉群。

准备工作

在开始编写脚本之前,需要在钉钉群创建一个机器人,机器人的类别选择webhook,如下图所示:

目前钉钉webhook强制要求了加签关键字IP,3选一,关键字最简单,如下图所示:

关键字的作用是你发送的消息体一定要包括关键字才能触发。

执行下面代码测试机器人是否配置成功。

curl "https://oapi.dingtalk.com/robot/send?access_token=你的密钥" -H 'Content-Type: application/json'  -d '{"msgtype": "text","text": {"content":"监控报警:异常登录"}}'

成功执行,会在钉钉群上看到如下图消息:

编写监控脚本

该脚本主要用于监控 Linux服务器的登录日志文件 以检测登录失败的情况,并将告警信息发送到钉钉。当检测到关键词pam_unix(sshd:auth): authentication failure时,脚本提取日志中的IP地址和用户名。然后,通过调用ipinfo.io API 查询该IP地址的归属地信息(包括国家、城市和地区),并将这些信息准备发送到钉钉。

  1. 设置日志文件路径和钉钉WebHook URL
LOG_FILE="/var/log/auth.log"
WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=you_token"
  1. 定义关键词,用于检测登录失败。
KEYWORD="pam_unix(sshd:auth): authentication failure"
  1. 实时监控日志文件
tail -Fn0 "$LOG_FILE" | while read line ; do
  1. 检查是否包含关键词
echo "$line" | grep "$KEYWORD" &> /dev/null
if [ $? = 0 ]
then
  1. 提取IP地址和登录用户名
IP=$(echo "$line" | awk '{for(i=1;i<=NF;i++){if($i ~ /rhost=/){print $i}}}' | cut -d '=' -f 2)
USER=$(echo "$line" | awk '{for(i=1;i<=NF;i++){if($i ~ /^user=/){print $i}}}' |cut -d '=' -f 2)
  1. 查询IP的归属地信息
location=$(curl -s ipinfo.io/$IP | jq -r '" Country: \(.country), City: \(.city), Region: \(.region)"')
  1. 构建消息内容
    PAYLOAD=$(cat <<-EOF
{       
"msgtype": "markdown",
"markdown": {
"title":"监控报警:异常登录",
"text":"
##### Linux服务器监控报警:异常登录 \n
>  ##### <font color=#67C23A> 【登录用户】</font> :<font color=#FF0000> $USER</font>
>  ##### <font color=#67C23A> 【登录IP】</font> :<font color=#FF0000> $IP </font> 
>  ##### <font color=#67C23A> 【IP归属地】</font> :<font color=#FF0000> $location </font> 
>  ##### <font color=#67C23A> 【告警时间】</font> :<font color=#FF0000> $(date +"%Y-%m-%d %H:%M:%S") </font> 
"
}
}
EOF)
  1. 把告警信息推送到钉钉
curl -s -H "Content-Type: application/json" -d "$PAYLOAD" "$WEBHOOK_URL" &>/dev/null

脚本使用

在要监控的服务器上新建一个名为monitor_login.sh,把脚本内容复制到文件中如下图:

并为脚本赋予执行权限,如下:

运行如下命令,启动脚本:

root@didiplus:/home# ./monitor_login.sh

在另外一台机器上模拟登录失败,这时,监控服务器会出现如下图所示:

然后,在钉钉群上可以看到如下告警信息:

总结

通过上述脚本,运维人员可以有效地监控Linux服务器的登录异常情况,及时发现并处理潜在的安全问题。该脚本通过解析系统日志,识别多次失败的登录尝试和来自未知IP的登录,并通过钉钉方式通知管理员,实现了对登录异常的实时监控。希望这篇教程能帮助到你,提高服务器的安全管理水平。

如果对该脚本感兴趣的小伙伴可以关注公众号《攻城狮成长日记》私信回复脚本即可获取。

这篇关于加强Linux防线,快速构建异常登录检测,并通过钉钉机器人把告警推送到钉钉工作群上的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082628

相关文章

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

Linux命令rm如何删除名字以“-”开头的文件

《Linux命令rm如何删除名字以“-”开头的文件》Linux中,命令的解析机制非常灵活,它会根据命令的开头字符来判断是否需要执行命令选项,对于文件操作命令(如rm、ls等),系统默认会将命令开头的某... 目录先搞懂:为啥“-”开头的文件删不掉?两种超简单的删除方法(小白也能学会)方法1:用“--”分隔命