当前位置: 首页 > news >正文

Shell屏蔽每小时SSH暴力破解超过N次的ip,再也不用担心云服务器被暴力破解了

要理解这段脚本首先要先熟练的掌握awk的知识

在正式实践前需要理清楚几个知识点:

lastb命令:这条命令用于查看一定时间内登陆失败的记录,即使用ssh登陆但是密码输错的记录

如果你用的是云服务器,你会发现登陆失败的记录很多很多,有些就是想暴力破解你的服务器。

iptables 命令是 Linux 中重要的访问控制手段,可以屏蔽你想屏蔽的ip

Chain INPUT控制了能访问你服务器的所有ip,因为我已经执行过脚本,所以有5个ip已经DROP掉了

屏蔽每小时SSH暴力破解超过10次的ip:

原理:获取当前时间,以小时为最后单位,与lastb中登陆失败的时间匹配,就能匹配出当前小个小时中所有访问失败的ip

然后使用awk命令进行ip统计,统计出每小时暴力破解超过N次的ip,用for循环查询每一个ip,并与iptables中的ip去比较,如果这个ip没有被限制,就限制它;如果已经限制了,就输出一个提示符继续下一个。

#!/bin/bash
DATE=$(date +"%a %b %e %H")
# %星期 %月 %天 %时 其中,星期、月都是英文简写显示;用于匹配lastb
# %e:单数字时显示7;而%d显示07
ABNORMAL_IP=$(lastb |grep "$DATE" |awk '{a[$3]++}END{for(i in a)if(a[i]>10)print i}')
# lastb:上次登录失败的记录
# grep "$DATE":匹配当前分钟内的ssh失败记录
# {for(i in a)if(a[i]>10)print i}:小括号表示判断条件
for IP in $ABNORMAL_IP; do
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
    #iptables -v查看规则列表时显示详细(--verbose)的信息
    #-n number使用数字形式显示输出结果,如显示主机的ip地址而不是主机名
    #-L list列出指定链中所有规则进行查看
    #grep -c统计个数
        iptables -I INPUT -s $IP -j DROP
        #-I insert在指定链中插入一条新规则,为指明插入位置
        #-s source 指定源
        #-j jump 指定动作
        echo -e "\033[32someone trying\033[0m"
    else echo -e "\033[31mno one trying\033[0m"
    fi
done
echo "屏蔽完成"

执行这段代码后会屏蔽掉尝试暴力破解的ip,通过iptables -vnL可以查看被屏蔽的IP,但是这样似乎还不够自动化。为了更好地防止被暴力破解,使用crontab设置定时器,每小时屏蔽一批IP,对于crontab的用法,可以看我之前的博客:使用shell脚本进行每月定时备份数据

 

 

相关文章:

  • ios 跳转的运用 push和modal
  • 如何优雅的将Thymeleaf集成到SpringBoot
  • 开发基于SpringBoot和BootStrap的全栈论坛网站(一):准备阶段
  • 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能...
  • 开发基于SpringBoot和BootStrap的全栈论坛网站(二):后端人员如何快速使用BootStrap
  • java虚拟机(三)java的垃圾回收机制详解
  • 查看ORACLE的实际执行计划
  • 开发基于SpringBoot和BootStrap的全栈论坛网站(三):登陆注册以及cookies的功能完成
  • 开发基于SpringBoot和BootStrap的全栈论坛网站(四):完成问题发布功能
  • OSChina 周日乱弹 ——冯小牛 我要治愈你!
  • 开发基于SpringBoot和BootStrap的全栈论坛网站(五):完成首页展示以及分页功能
  • 冒泡排序法与二分查找法
  • github回退版本时本地代码被覆盖(已解决)
  • CentOS 6.5系统上安装SVN服务器端的方法及目录访问权限配置(转总结)
  • 开发基于SpringBoot和BootStrap的全栈论坛网站(六):完成个人中心、问题详情和问题编辑
  • 【译】JS基础算法脚本:字符串结尾
  • Android单元测试 - 几个重要问题
  • Android框架之Volley
  • ERLANG 网工修炼笔记 ---- UDP
  • HTTP请求重发
  • Koa2 之文件上传下载
  • leetcode386. Lexicographical Numbers
  • ReactNative开发常用的三方模块
  • SQL 难点解决:记录的引用
  • use Google search engine
  • webpack项目中使用grunt监听文件变动自动打包编译
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 阿里研究院入选中国企业智库系统影响力榜
  • 聊一聊前端的监控
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 我建了一个叫Hello World的项目
  • 新书推荐|Windows黑客编程技术详解
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #define、const、typedef的差别
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (多级缓存)缓存同步
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (全注解开发)学习Spring-MVC的第三天
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (原創) 物件導向與老子思想 (OO)
  • (转)linux下的时间函数使用
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .chm格式文件如何阅读
  • .Net Remoting常用部署结构
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @Data注解的作用
  • [ 常用工具篇 ] POC-bomber 漏洞检测工具安装及使用详解
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [20180129]bash显示path环境变量.txt
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [Angular 基础] - 数据绑定(databinding)
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法