第一个shell脚本-监测恶意登录远程服务器

简介:

最近学习到linux系统日志和计划任务,下班回家的地铁上有了灵感,尝试编写了自己的第一个脚本,监测如果有恶意登录服务器的话,发邮件通知管理员。暂时还没学习到如何发邮件给管理员,目前只是命令行的提醒和日志记录;脚本的内容也比较简单,都是学习过的基本知识,活学活用。


1、首先编写一个脚本:

定义一个变量LT,变量的值为lastb命令列出的行数(即无效登录的次数,如有恶意登录的话行数会变多);

执行一个if判断语句,如果定义的值大于15次的话,判断为恶意登录,通知管理员。

脚本内容如下:

1
2
3
4
5
6
7
8
9
10
[root@localhost ~] # cat lt.sh 
#! /bin/bash
 
#定义变量LT,记录无效登录的次数;
LT=`lastb | wc  -l | cut  -d  ' '  -f 1`
if  [ $LT -gt  "15"  ]
         #判断无效登录的次数如果大于15的话,执行下面的操作;
         then  echo  "somebody try to login please check log"
         #打印有人尝试登录系统请检查日志
fi

spacer.gif

2、编写一个计划任务

每隔一分钟自动执行上面的脚本

1
2
[root@localhost ~] # crontab -l
* /1  * * * *  /bin/sh  /root/lt .sh


3、查看效果

超过15次登录在当前命令行模式会提示,有一封新邮件在/var/spool/mail/root下;

1
2
[root@localhost ~]
You have new mail  in  /var/spool/mail/root


查看新邮件,会发现脚本里面的内容,证明有人在尝试登录主机;

1
2
[root@localhost ~] # tail -2 /var/spool/mail/root 
somebody try to login please check log


执行lastb命令查看发现很多登录失败的记录

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~] # lastb |head
user1     ssh :notty    192.168.22.1     Tue Apr 21 22:04 - 22:04  (00:00)    
user1     ssh :notty    192.168.22.1     Tue Apr 21 22:04 - 22:04  (00:00)    
user1     ssh :notty    192.168.22.1     Tue Apr 21 22:03 - 22:03  (00:00)    
user1     ssh :notty    192.168.22.1     Tue Apr 21 22:03 - 22:03  (00:00)    
user1     ssh :notty    192.168.22.1     Tue Apr 21 22:03 - 22:03  (00:00)    
user1     ssh :notty    192.168.22.1     Tue Apr 21 22:03 - 22:03  (00:00)    
user1     ssh :notty    192.168.22.1     Tue Apr 21 22:03 - 22:03  (00:00)    
user1     ssh :notty    192.168.22.1     Tue Apr 21 21:29 - 21:29  (00:00)    
user1     ssh :notty    192.168.22.1     Tue Apr 21 21:29 - 21:29  (00:00)    
user1     ssh :notty    192.168.22.1     Tue Apr 21 21:29 - 21:29  (00:00)


查看/var/log/secure 日志也会发现有多次登录失败的记录

1
2
3
4
5
6
7
8
9
10
11
Apr 21 22:03:35 localhost unix_chkpwd[1501]: password check failed  for  user (user1) 
Apr 21 22:03:35 localhost sshd[1499]: pam_unix(sshd:auth): authentication failure;  logname = uid=0 euid=0  tty = ssh  ruser= rhost=192.168.22.1  user=user1
Apr 21 22:03:36 localhost sshd[1499]: Failed password  for  user1 from 192.168.22.1 port 50591 ssh2
Apr 21 22:03:39 localhost unix_chkpwd[1502]: password check failed  for  user (user1)
Apr 21 22:03:41 localhost sshd[1499]: Failed password  for  user1 from 192.168.22.1 port 50591 ssh2
Apr 21 22:03:44 localhost unix_chkpwd[1503]: password check failed  for  user (user1)
Apr 21 22:03:46 localhost sshd[1499]: Failed password  for  user1 from 192.168.22.1 port 50591 ssh2
Apr 21 22:03:49 localhost unix_chkpwd[1504]: password check failed  for  user (user1)
Apr 21 22:03:51 localhost sshd[1499]: Failed password  for  user1 from 192.168.22.1 port 50591 ssh2
Apr 21 22:03:52 localhost sshd[1499]: Failed password  for  user1 from 192.168.22.1 port 50591 ssh2
Apr 21 22:03:54 localhost sshd[1500]: Received disconnect from 192.168.22.1: 0:


根据访问日志的来源IP,我们可以对来源设置iptables规则,禁止访问服务器的22端口,或者封闭ip地址;


暂时只有这么多,小小的骄傲一下,给自己增加点自信心,相信之后的学习中会更加深入了解linux;

和大家分享一下,共勉之。






本文转自 模范生 51CTO博客,原文链接:http://blog.51cto.com/mofansheng/1636847,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
28 3
|
7天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
28 0
|
7天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句
|
8天前
|
JSON 运维 监控
训练shell常用脚本练习(三)
【4月更文挑战第14天】shell代码训练(三)
29 1
|
12天前
|
存储 弹性计算 Shell
ecs服务器shell常用脚本练习(十)
【4月更文挑战第11天】shell代码训练(十)
143 0
|
12天前
|
弹性计算 Shell Go
ecs服务器shell常用脚本练习(九)
【4月更文挑战第10天】shell代码训练(八)
138 0
|
30天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
1月前
|
存储 弹性计算 数据可视化
要将ECS中的文件直接传输到阿里云网盘与相册(
【2月更文挑战第31天】要将ECS中的文件直接传输到阿里云网盘与相册(
419 4
|
1月前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
19天前
|
弹性计算
阿里云ECS使用体验
在申请高校学生免费体验阿里云ECS云服务器后的一些使用体验和感受。