1. 程式人生 > >nginx限制IP惡意調用接口處理辦法

nginx限制IP惡意調用接口處理辦法

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惡意調用接口處理辦法