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

今天一大早运营跑来投诉说:“公司昨晚发了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 

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

转载于:https://blog.51cto.com/11019859/2084654

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值