加强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利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带