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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

最近学习到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,如需转载请自行联系原作者
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
3月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
|
3月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
|
6月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
276 60
|
3月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
5月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
607 1
|
6月前
|
应用服务中间件 网络安全 数据安全/隐私保护
网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
348 14
|
7月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
191 17
|
7月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
427 3
|
9月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。