利用shell脚本实现封禁扫描频率过高的ip

利用shell脚本实现封禁扫描频率过高的ip

前言

对于网络安全的学习而言,日志分析技巧是非常重要的,日志分析做好了,就方便对于后续的排查修复和溯源有非常大的帮助,本文就以分析apache服务器的日志来编写一个简单的检测封禁脚本,可能编写代码比较简单,主要是提供一个编写思路,方便大家如何编写此类工具。

编写思路

在这里插入图片描述

通过查看apache中的日志我们可以发现日志具体由访问的IP地址、访问时间、访问的请求数据包、登录浏览器的操作系统组成,我们可以选取相关关键属性进行筛选日志进行判断。

所以我们可以设置一个时间段,用一个文件统计这个时间段内访问量最大的ip,从大到小排序,再创建一个文件来筛选这个时间段内访问量超过多少频率的ip,最后再进行一个封禁。

这就是整个脚本编写的大致思路,具体实现步骤如下。

实验步骤

我们通过tac access.log | awk '{print $4}'命令可以筛选出最新时间日志时间。
在这里插入图片描述
通过tac access_log | awk '{print $1}' | sort |uniq -c | sort -nr | head -n 10命令可以选出访问量最大的前十个ip

  • sort:对打印的字符进行排序
  • unqi -c:去除重复的数据并进行统计
  • sort -nr:按照整个数字来排序
  • head -n 10:打印出前十行

在这里插入图片描述
了解这些就可以进行一个脚本的编写
在目录下创建一个deny_ip.sh的脚本文件
在这里插入图片描述
定义一个系统时间跟日志时间进行比对

使用chmod +x deny_ip.sh命令给脚本添加执行权限
测试结果如下
在这里插入图片描述
发现跟apache日志格式时间不一样,脚本显示月份格式为数字,apache显示月份格式为英文,这里有两种解决方法。
注意:在这里定义的时间格式必须和日志的时间格式一样,要不然运行脚本时无法比对。

解决方法1:将月份显示格式数字修改为英文字母

通过date --help命令查看date命令的帮助文档可以发现
在这里插入图片描述
date命令中的%b参数可以实现我们想要的效果,所以将脚本中的%M替换为%b,进行测试
在这里插入图片描述
结果成功修改
注意:若你使用的kali版本为中文版,使用%b参数修改后月份会显示为中文的7月,若还想用此方法比对必须将kali版本转换为英文版,或者使用解决方法2。

解决方法2:将月份显示格式英文字母修改为数字

这种方法比较麻烦需要进入apache的配置文件中修改。
在kali中,自带一个apache2,主配置文件为/etc/apache2/apache2.conf
文件较长,在末行模式下输入 :set nu 显示行号,方便编辑。
在这里插入图片描述
根据查阅apache配置文档可知%t变量有一个可选项来自定义时间格式。
%…t: 以公共日志时间格式表示的时间(或称为标准英文格式)
%…{format}t: 以指定格式format表示的时间

修改后如下
在这里插入图片描述
对apache服务重启并测试
在这里插入图片描述
发现新访问的时间格式已经修改为我们自定义的格式
更多apache配置文件变量的详细参数可以查看链接: apache日志格式定义及示例说明

继续将脚本内容补全
在这里插入图片描述

进行测试,运行脚本后进入apache网页尝试多次刷新
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发现已经无法进入网站

输入iptables -L 命令进行查看
在这里插入图片描述
已经成功把可疑ip进行拦截放入策略

指定任务计划
使用crontab -e命令
若弹出
提示你选择编辑器,你可以根据个人喜好选择(我选择的是vim)

如果需要重新选择其他的编辑器,可以输入
select-editor

进入编辑器后添加每分钟执行deny_ip.sh文件

*/1  *    *    *    * sh /var/log/deny_ip.sh

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

点击测试后,发现正常封禁,成功执行
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值