nginx限制IP惡意調用接口處理辦法
阿新 • • 發佈:2018-03-09
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惡意調用接口處理辦法