ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux之SSH爆破告警

2021-03-21 23:02:44  阅读:265  来源: 互联网

标签:+% lastb print awk SSH linux date 告警 now


1.加告警的目的

       在云服务器供应商处购买的linux,在部署应用后,肯定会做一些基本的防护措施,如centOS的firewall-cmd防火墙,Ubuntu的iptables或ufw防火墙规则。除了这些基础措施还可以在云控制台的安全组做安全防护,像AliCloud还会有ECS安全评估和危险告警。但如果自己借助域名解析再使用宽带将自己的电脑做成服务器时,肯定没有云供应商那样的告警,这时候就需要自己写一些脚本了。我尝试过通过ctime每小时扫描全盘判断一小时内变动的文件,并将其>>重定向写入一个文件中,再发送到自己的邮箱,知识点(crontab,EOF,mailx邮箱代理配置,shell脚本编写)。也设置过ssh登录的时候通知自己,展示登陆者ip及所登录的账户,(在这里,如果是被黑进来,如未加密但是在公网开放的redis,是无法拿到登陆者的ip的,只能知道他是root还是其他有登录权限的用户,好多软件都有漏洞,建议不要以root用户启动,一旦被拿到shell,可能会留后门~/.ssh/authorization,然后文件加锁chattr,定时任务crontab等),正常ssh连接是会有ip+用户名信息的,当然这个只是鸡肋,真的进来了也做不了啥。所以告警也只是一个预防措施,并不是一个解决措施。

2.告警脚本的编写

       现在写的一个脚本是关于ssh爆破告警的,也许很多人已经了解有lastb这个命令,可以查看ssh登录失败的记录(所尝试的用户如root, 发起者ip, 登录时间段 等)。

它的查询结果:【尝试账号  连接方式  发起者ip  礼拜几  月份  天  开始时间  结束时间   停留时间】我大概是这么理解的。

现在做脚本的条件是根据4567列来进行筛选,因为同样是3.21号,不同年的那一天不一定是周日(Sunday),所以前边三个条件写为:

[root@maple logs]# echo `date | awk '{print $1}'`
Sun
[root@maple logs]# echo `date +%d`                                  
21
[root@maple logs]# echo `date +%H:%M`                               
01:19
[root@maple logs]# echo `date +%b`                
Mar

# 以上为示例,第一步命令整合为
lastb | awk -vWeek=`date | awk '{print $1}'` '($4==Week){print $0}' | awk -vMonth=`date +%b` '($5==Month){print $0}' | awk -vDay=`date +%d` '($6==Day){print $0}'

(如果真的筛选到前几年3.21同样也是周日的,我也没做处理,这种需要自己每年清一下就好,就没有前年的数据干扰了,而且不是什么重要数据,是可以清除的)

现在再根据开始时间来筛选,筛选俩小时内的

# 拼接如下条件
awk -vDate=`date -d'now-5 minutes' +%H:%M` -vDate2=`date -d'now-0 minutes' +%H:%M` '($7>Date && $7<Date2){print $0}'

# 整合为(最终命令)当前时间减去120分钟,那一刻之后的记录
lastb | awk -vWeek=`date | awk '{print $1}'` '($4==Week){print $0}' | awk -vMonth=`date +%b` '($5==Month){print $0}' | awk -vDay=`date +%d` '($6==Day){print $0}' | awk -vDate=`date -d'now-120 minutes' +%H:%M` -vDate2=`date -d'now-0 minutes' +%H:%M` '($7>Date && $7<Date2){print $0}'

最终整个脚本为,由于俩小时太远了,直接筛选五分钟内的

#!/bin/bash
# chmod u+rwx,g+rx,o+rx lastb_alarm
count=$(lastb | awk -vWeek=`date | awk '{print $1}'` '($4==Week){print $0}' | awk -vMonth=`date +%b` '($5==Month){print $0}' | awk -vDay=`date +%d` '($6==Day){print $0}' | awk -vDate=`date -d'now-5 minutes' +%H:%M` -vDate2=`date -d'now-0 minutes' +%H:%M` '($7>Date && $7<Date2){print $0}' | wc -l)
# if count > 60
if [ $count -gt 60 ]; then
  filetime=`date +%Y%m%d_%H%M%S`
  touch /tmp/lastb_$filetime.log
  echo "[近五分钟内ip登录次数排行]" >> /tmp/lastb_$filetime.log
  lastb | awk -vWeek=`date | awk '{print $1}'` '($4==Week){print $0}' | awk -vMonth=`date +%b` '($5==Month){print $0}' | awk -vDay=`date +%d` '($6==Day){print $0}' | awk -vDate=`date -d'now-5 minutes' +%H:%M` -vDate2=`date -d'now-0 minutes' +%H:%M` '($7>Date && $7<Date2){print $0}' | awk '{ print $3}' | sort | uniq -c | sort -n >> /tmp/lastb_$filetime.log
  echo "[近五分钟内ip登录失败详细信息]"
  lastb | awk -vWeek=`date | awk '{print $1}'` '($4==Week){print $0}' | awk -vMonth=`date +%b` '($5==Month){print $0}' | awk -vDay=`date +%d` '($6==Day){print $0}' | awk -vDate=`date -d'now-5 minutes' +%H:%M` -vDate2=`date -d'now-0 minutes' +%H:%M` '($7>Date && $7<Date2){print $0}' >> /tmp/lastb_$filetime.log
  echo "服务器近五分钟内疑遭ssh爆破,请登录查看!" | mail -s "Lastb Alarm" -a /tmp/lastb_$filetime.log xxx_your_mail@address.com
  sleep 3
  rm -f /tmp/lastb_$filetime.log
fi
# exit current script
exit;

定时俩分钟执行一次

# crontab -e
*/5 * * * * sh /path/mylastb.sh

3.测试

我把if [ $count -gt 60 ]; then,改60成3,然后故意输错三次密码。

文件内容

 

标签:+%,lastb,print,awk,SSH,linux,date,告警,now
来源: https://blog.csdn.net/mc17677175934/article/details/115057342

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有