短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本

作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载。

前言

承接前文《短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求》,文中有讲到一个定位非法IP的shell脚本,现在就来公布一下吧,并没有什么技术难度,只是当时花了些时间去写这个东西,类似于紧急修复线上bug一样的赶这个小脚本,虽然现在看来挺简单的,但是在当时紧张的情景中,赶这个小脚本儿的过程确实是很有趣的。

前一篇文章发布后,有朋友留言问了一下脚本的事,于是整理了一下。

需求分析

目标:

通过日志定位并记录攻击者的IP,然后封掉此IP的所有请求

借助工具:

  • shell脚本
  • 日志文件
  • iptables防火墙

具体步骤:

  • 第一步,首先是获取请求了被攻击URL的所有请求中的IP,因为被攻击的URL只有一个,这里的做法是通过grep命令查找请求了此URL的日志行,查找的值为api地址的名称字段,比如此URL的地址为'/message/send/',而send字段只存在于此URL中,因此在日志文件中查找包含'send'字段的行即可。
  • 第二步是从所有的行中提取出IP列,统计出所有出现的IP和此IP请求接口URL的次数,存入ip.txt文件。
  • 接着第三步是通过对ip.txt文件的分析,定位出所有的不正常的IP,分析的比较简陋,做法是请求超过5次的都视为非法IP,其实5次已经算多的了,应该再小一点,但是其实在分析文件ip.txt文件过程中,发现正常的IP访问次数基本为一次、两次,而非法IP则为百次或千次,因此阈值设置为5或者3并没有大的影响,重点是找出访问量较大的一些IP。
  • 最后一步,得到这些IP值之后,将其加入到iptables的过滤策略中并重启iptables即可。

脚本代码

一开始的脚本,能够根据需求统计和记录出访问过多的IP地址了:

#! /bin/bash

#author:13
#date:2017-06
#desc:找出攻击者IP

cat /opt/sms-service/logs/access_log.log | awk '{print $1}'|sort|uniq -c|awk '{print $2"="$1;}' > /opt/sms-service/logs/ip.txt

DEFINE="5"

for i in `cat  /opt/sms-service/logs/ip.txt`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt $DEFINE ];then
grep $IP /opt/sms-service/logs/black.txt > /dev/null
      if [ $? -gt 0 ];then
        echo "iptables -I INPUT -s $IP -j DROP" >> /opt/sms-service/logs/black.txt
      fi
    fi
done

后面又对脚本做了一些小改动,改进点有:

  • 对文件路径进行参数命名,使得代码不是特别臃肿;
  • 增加一条判断条件,判断IP是否已经存在于iptables配置文件中,剔除已经统计和记录过的IP。
#! /bin/bash

#author:13
#date:2017-06
#desc:找出攻击者IP

LOGFILE="/opt/sms-service/logs/access_log.log"
IPTXT="/opt/sms-service/logs/ip.txt"
BLACKTXT="/opt/sms-service/logs/black.txt"
IPTABLES="/opt/iptables/run.sh"
DEFINE="5"

cat $LOGFILE|awk '{print $1}'|sort|uniq -c|awk '{print $2"="$1;}' > $IPTXT

for i in `cat  $IPTXT`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt $DEFINE ];then
grep $IP $BLACKTXT > /dev/null
      if [ $? -gt 0 ];then
        grep $IP $IPTABLES > /dev/null
        if [ $? -gt 0 ];then
        echo "iptables -I INPUT -s $IP -j DROP" >> $BLACKTXT
        fi
      fi
    fi
done

总结

首发于我的个人博客,地址在这里

最近工作也比较忙,本来不打算写这篇文章的,前一篇文章发布后看到有朋友留言了,因此在下班后抽出一段时间完成了这篇文章,文中并没有特别难的知识点,希望有所收获。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

Oracle AWR特性描述

AWR是Automatic Workload Repository的简称,中文叫着自动工作量资料档案库。既然是仓库,又是保存负载数据,所以保存的是数据库性能相关...

811
来自专栏重庆的技术分享区

服务网格(Service Mesh)及其工具选项概述

原文地址:https://dzone.com/articles/an-overview-of-the-service-mesh-and-its-tooling-...

2183
来自专栏企鹅号快讯

可编程逻辑控制器PLC

PLC代表可编程逻辑控制器。它们基本上用于控制工业中的自动化系统。它们是最先进和最简单的控制系统之一,现在正在大规模地取代硬连线逻辑继电器。 ? 在详细介绍PL...

2437
来自专栏腾讯移动品质中心TMQ的专栏

GT3.1简化您的App性能测试(2)——原理讲解,溯本求源

GT3.1的版本更新,带来了全面的维度分析。那么这些功能是如何实现的呢?本章GT君将详细的从CUP维度、内存维度、流量维度、流畅度维度为大家讲解这些功能的作用和...

5746
来自专栏Python小白进阶之旅

Python盗号原理-代码实现截屏键盘记录远程发送-不要做坏事-木马外挂学习使用

这年头盗号的从出不穷,不是脱裤就是社工钓鱼。今天呢我们就以前面的几篇技术文章做铺垫,来讲一下python盗号的原理(学习用途,请勿用于违法犯罪),知己知彼方能百...

6628
来自专栏FreeBuf

一则邮件攻击样本分析分享

通过邮件投递病毒文件是网络攻击常用的一种方式,因此防御邮件攻击是每个安全团队都需要重点考虑的内容。中兴通讯每天都会收到数万封外部邮件,为了及时检测每封邮件是否含...

1172
来自专栏运维一切

ceph osd full故障 原

资料(传送门)[http://bbs.ceph.org.cn/question/363]

1552
来自专栏杨海春的专栏

常用机器性能评估工具

软件系统跑在机器上,处理能力受硬件制约,所以,单机处理能力会有上限。评估机器处理能力的上限,检查程序的瓶颈在哪,有助于程序性能分析。主要的几大硬件:CPU、内存...

6570
来自专栏FreeBuf

VirusTotal Graph增加新特性,查看各文件的相关性将更加容易

就在前几天,VirusTotal发布了一个名叫Graph的新功能,该功能允许用户以可视化的方式查看自己所提交文件之间的相关性。在这款工具的帮助下,用户可以轻松地...

2556
来自专栏匠心独运的博客

分布式定时任务Elastic-Job框架在SpringBoot工程中的应用实践(一)

摘要:如何构建具备作业分片和弹性扩缩容的定时任务系统是每个大型业务系统在设计时需要考虑的重要问题? 对于构建一般的业务系统来说,使用Quartz或者Sprin...

5792

扫码关注云+社区

领取腾讯云代金券