码迷,mamicode.com
首页 > 其他好文 > 详细

nginx限制IP恶意调用接口处理办法

时间:2018-03-09 19:04:38      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:nginx   安全   iptables   

今天一大早运营跑来投诉说:“公司昨晚发了20多万条注册短信息,我们没有这么多注册用户啊!”,我查询日志发现,一直有人在恶意调用我们公司的短信接口,造成一直发送注册信息,而且不断变化IP,初次遇到还是有点懵逼的!

调用注册短信接口日志内容:

121.204.87.168 - - [09/Mar/2018:17:34:13 +0800] "POST /xxx/短信接口 HTTP/1.1" 200 162 "http://xxx.com/xxx/短信接口" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" "-"- - 0.001 
222.91.163.130 - - [09/Mar/2018:17:34:13 +0800] "POST /xxx/短信接口 HTTP/1.1" 200 162 "http://xxx.com/xxx/短信接口" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" "-"- - 0.000 
124.72.40.148 - - [09/Mar/2018:17:34:13 +0800] "POST /xxx/短信接口 HTTP/1.1" 200 162 "http://xxx.com/xxx/短信接口" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" "-"- - 0.000 
112.14.87.203 - - [09/Mar/2018:17:34:13 +0800] "POST /xxx/短信接口 HTTP/1.1" 403 162 "http://xxx.com/xxx/短信接口" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" "-"- - 0.000 

我发现这些IP几乎都是每隔三四秒就调用一次,像这种接口一般注册时,一天最多也就调用三五次;

针对这些问题我想了几个方案,发现一般都是处理时间长,不太适合当前情况紧急处理,根据日志判断对方是直接调用我接口的,处理起来只能封IP,考虑到如果用iptables封IP的话,以后这个IP如果在防火墙不做处理,就会误伤很多正常使用的用户!

处理方案:
1、处理思路:用nginx的黑名单处理,通过shell脚本和cron,每隔五分钟就去统计一下,调用短信接口超过5次的IP,直接扔进黑名单配置文件;

2、处理步骤:
shell统计脚本blackip.sh:

#!/bin/bash
NGINX_DIR=/nginx
BLOCK_IP_FILE=/nginx/conf/vhost/blockip.conf
BLOCKED_IP=/nginx/logs/blocked-ip.txt
NGINX_CMD=/nginx/sbin/nginx
LOG_PATH=/nginx/logs/api.xxx.com_access.log

/bin/cp $BLOCK_IP_FILE $BLOCKED_IP &&
/usr/bin/tail -n 20000 ${LOG_PATH}|grep "xxx/短信接口" | awk ‘{print $1,$7,$9}‘|awk ‘{print $1}‘|sort|uniq -c|sort -rn | awk ‘{if($1>10)print "deny "$2";"}‘ > $BLOCKED_IP &&
/bin/grep -v -f $BLOCK_IP_FILE $BLOCKED_IP >>  $NGINX_CMD  &&
$($NGINX_CMD -s reload)

ps:脚本写的有点LOW。。。

3、计划任务

*/5 * * * * /bin/sh /scripts/blackip.sh >/dev/null 2>&1

4、在http或者server模块引入

include vhost/blacklist.conf ;

重新加载nginx生效!!

查看加入到黑名单配置文件的IP:

略略。。。
deny 117.136.90.104;
deny 223.104.31.205;
deny 117.150.148.213;
deny 36.60.168.148;
deny 183.40.141.112;
......
略略。。。

此时再去nginx的中查看调用接口的情况,超过限定条件被放入黑名单中的IP,在调用短信接口的呃时候返回403了,不在会实际发送短信:

60.180.30.117 - - [09/Mar/2018:17:57:15 +0800] "POST /xxx/短信接口 HTTP/1.1" 403 162 "http://xxx.com/xxx/短信接口" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" "-"- - 0.000 
60.181.109.10 - - [09/Mar/2018:17:57:15 +0800] "POST /xxx/短信接口 HTTP/1.1" 403 162 "http://xxx.com/xxx/短信接口" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" "-"- - 0.000 

目前这只能是做为紧急处理方法,更稳妥的办法还是在业务逻辑和安全上去完善!在实际处理的过程当中还是做了很多无用功的,运维路上处处是坑啊,希望这篇文章能够帮到你!

nginx限制IP恶意调用接口处理办法

标签:nginx   安全   iptables   

原文地址:http://blog.51cto.com/11019859/2084654

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!