加强Linux防线,快速构建异常登录检测与警报系统

系统 Linux
本文将介绍如何编写一个 Shell 脚本,监控Linux服务器的登录异常并发送警报。

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

工作场景

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

脚本功能概述

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

  • 定期检查系统日志,获取登录失败的记录。
  • 识别多次失败的登录尝试和来自未知IP的登录,并查询这些IP的归属地
  • 将异常情况记录到日志文件。
  • 把告警信息推送到钉钉群。

准备工作

在开始编写脚本之前,需要在钉钉群创建一个机器人,机器人的类别选择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"

(2) 定义关键词,用于检测登录失败。

KEYWORD="pam_unix(sshd:auth): authentication failure"

(3) 实时监控日志文件

tail -Fn0 "$LOG_FILE" | while read line ; do

(4) 检查是否包含关键词

echo "$line" | grep "$KEYWORD" &> /dev/null
if [ $? = 0 ]
then

(5) 提取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)

(6) 查询IP的归属地信息

location=$(curl -s ipinfo.io/$IP | jq -r '" Country: \(.country), City: \(.city), Region: \(.region)"')

(7) 构建消息内容

    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
    )

(8) 把告警信息推送到钉钉

curl -s -H "Content-Type: application/json" -d "$PAYLOAD" "$WEBHOOK_URL" &>/dev/null

脚本使用

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

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

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

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

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

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

总结

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

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2010-01-08 12:13:09

ibmdwDB2

2017-05-04 08:00:54

2023-11-21 08:57:16

2024-05-17 10:00:52

系统监控日志记录性能指标

2019-10-29 20:42:50

物联网技术操作系统

2024-04-07 09:49:18

OpenAINATSStreamlit

2023-11-22 09:42:02

系统检测

2024-10-29 16:18:32

YOLOOpenCV

2012-11-05 13:59:12

WebFdSafeJS

2023-07-06 09:53:39

2011-03-22 16:28:59

2014-09-03 11:26:11

2009-03-03 12:54:58

2009-09-29 10:39:04

Linuxlinux系统性能检测

2009-11-30 10:50:24

Suse Linux

2021-11-26 14:59:02

异常检测网络攻击网络威胁

2021-01-15 12:22:35

异常检测工具

2009-09-04 10:21:00

2011-01-18 11:31:37

2022-07-27 08:25:13

语言操作系统日志
点赞
收藏

51CTO技术栈公众号