加强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

相关文章

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Linux磁盘分区、格式化和挂载方式

《Linux磁盘分区、格式化和挂载方式》本文详细介绍了Linux系统中磁盘分区、格式化和挂载的基本操作步骤和命令,包括MBR和GPT分区表的区别、fdisk和gdisk命令的使用、常见的文件系统格式以... 目录一、磁盘分区表分类二、fdisk命令创建分区1、交互式的命令2、分区主分区3、创建扩展分区,然后

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

Linux内核之内核裁剪详解

《Linux内核之内核裁剪详解》Linux内核裁剪是通过移除不必要的功能和模块,调整配置参数来优化内核,以满足特定需求,裁剪的方法包括使用配置选项、模块化设计和优化配置参数,图形裁剪工具如makeme... 目录简介一、 裁剪的原因二、裁剪的方法三、图形裁剪工具四、操作说明五、make menuconfig

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt