首页 / LINUX / linux之SSH爆破告警
linux之SSH爆破告警
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux之SSH爆破告警,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4075字,纯文字阅读大概需要6分钟。
内容图文
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,然后故意输错三次密码。
文件内容
内容总结
以上是互联网集市为您收集整理的linux之SSH爆破告警全部内容,希望文章能够帮你解决linux之SSH爆破告警所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。