短信发送接口被恶意访问的网络攻击事件(三)定位恶意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
总结
首发于我的个人博客,地址在这里
最近工作也比较忙,本来不打算写这篇文章的,前一篇文章发布后看到有朋友留言了,因此在下班后抽出一段时间完成了这篇文章,文中并没有特别难的知识点,希望有所收获。
短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本的更多相关文章
- 短信发送接口被恶意访问的网络攻击事件(四)完结篇--搭建WAF清理战场
前言 短信发送接口被恶意访问的网络攻击事件(一)紧张的遭遇战险胜 短信发送接口被恶意访问的网络攻击事件(二)肉搏战-阻止恶意请求 短信发送接口被恶意访问的网络攻击事件(三)定位恶意IP的日志分析脚本 ...
- thinkphp 5.0整合阿里大于验证码短信发送接口,含完整模型验证实例DEMO
为大家分享一个阿里大于短信发送接口: 首先创建一个发送模型(Send.php): <?php namespace app\index\model; use think\Validate; cla ...
- 短信发送接口demo
public class SendValidCode { // 短信发送的接口网关 private static String sendUrl = "******************** ...
- 给安卓端调用的短信发送接口demo
package com.js.ai.modules.pointwall.action; import java.io.IOException; import java.util.HashMap; im ...
- python 简单爬虫获取气象数据发送气象定时报-预报预警信息及时推送及阿里云短信群发接口
!/usr/bin/python #encoding=utf-8 #Author:Ruiy #//////////////////////////////////////////////////// ...
- destoon 短信发送函数及短信接口修改
// $DT在common.inc.php中定义, $CACHE = cache_read('module.php'); $DT = $CACHE['dt']; 从缓存里读取网站配置信息. //$d ...
- C# 编写短信发送Window服务
我们做项目过程中,一般都会有发送短信的需求.最常见的就是户注册或者登录时发送短信验证码.不同类型的短信发送,我们都可以放到到一张短信表中,然后通过一个定时的作业去执行短信发送.而定时作业的执行,我们就 ...
- Abp 添加阿里云短信发送
ABP中有短信发送接口ISmsSender public interface ISmsSender { Task<string> SendAsync(string number, stri ...
- ABP框架中短信发送处理,包括阿里云短信和普通短信商的短信发送集成
在一般的系统中,往往也有短信模块的需求,如动态密码的登录,系统密码的找回,以及为了获取用户手机号码的短信确认等等,在ABP框架中,本身提供了对邮件.短信的基础支持,那么只需要根据自己的情况实现对应的接 ...
随机推荐
- poj2155二维树状数组
Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an ...
- 跨域资源共享CORS详解
简介 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请 ...
- trait技术详解,这次包你学得会
trait的使用技巧trait是php5.4以后新增加的一个功能,可以将多个类中,共用的一些属性和方法提取出来做来公共trait类,就像是装配汽车的配件,如果你的类中要用到这些配件,就直接用use导入 ...
- 基于路由器物理接口的vlan间路由
广播域之间来往的数据包都是路由器中继的,所以vlan间的通信业需要路由器提供中继服务,这称作vlan间路由,可以用路由器或三层交换机实现. 配置R1: r1(config)#inter fa0/0r1 ...
- vim - manual -个人笔记
##vim配置 ###normal > 输入命令:w 写入保存 > > 粘贴 :p(向下粘贴) P(大写向上粘贴) > > 复制 :yy 复制一行 > > 删 ...
- 用 Vue 全家桶二次开发 V2EX 社区
一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...
- Git版本控制,rsync同步文件,完成线上部署
之前项目开发完成,测试阶段,借着此时,由于公司暂时用两台aliyun ecs 做业务层,所以每次都需要同步线上文件,进而想着搞一搞服务器端(小公司,新项目,先小搞一把),搭建一套小的版本控制上线的 ...
- Java Garbage Collectors
Generational Collectors (分代收集器) GC algos optimised based on two hypotheses / observations: Most obje ...
- /usr/bin/python^M: 解释器错误: 没有那个文件或目录
遇见问题 因为linux在虚拟机中,所以就在本地敲python代码,敲完后再拿到虚拟机去执行,再输入./filename.py时,就遇到这样的一个问题: bash: ./filename.py: /u ...
- 打不开磁盘“I:\xxx.vmdk”或它所依赖的某个快照磁盘
参考:http://zyp88.blog.51cto.com/1481591/1566504 "打不开磁盘"I:\XXX.vmdk"或它所依赖的某个快照磁盘 " ...