真實(shí)案例:
查看nginx日志,發(fā)現(xiàn)別有用心的人惡意調(diào)用API接口刷短信:
30966487 115.213.229.38 "-" [05/Jun/2018:14:37:29 +0800] 0.003 xxxxxx.com "POST /xxx/sendCheckCode HTTP/1.1" 401 200 46 xx.xx.xx.xx:0000 0.003 200 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" "https://xxxxxx/sendCheckCode"30963985 60.181.111.140 "-" [05/Jun/2018:14:37:29 +0800] 0.004 xxxxxx.com "POST /xxx/sendCheckCode HTTP/1.1" 401 200 46 xx.xx.xx.xx:0000 0.004 200 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" "https://xxxxxx/sendCheckCode"30959954 220.190.18.25 "-" [05/Jun/2018:14:37:29 +0800] 0.003 xxxxxx.com "POST /xxx/sendCheckCode HTTP/1.1" 401 200 46 xx.xx.xx.xx:0000 0.003 200 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" https://xxxxxx/sendCheckCode
思考了幾種方案,最終考慮使用ip黑名單的方式:
處理方法:
一、nginx黑名單方式:
1、過濾日志訪問API接口的IP,統(tǒng)計(jì)每10分鐘調(diào)用超過100次的IP,直接丟進(jìn)nginx的訪問黑名單
2、具體步驟:
編寫shell腳本:
vim /shell/nginx_cutaccesslog.sh#!/bin/bashlog_path=/xxx/nginx/logsdate=`date -d "10 min ago" +%Y%m%d-%H:%M:%S`nginxpid=`cat ${log_path}/nginx.pid`cd ${log_path}#過濾access.log中正常訪問API接口并在10分鐘(下面是日志切割,再做個(gè)定時(shí)任務(wù)每10分鐘執(zhí)行一次,就可以實(shí)現(xiàn)了)內(nèi)訪問量最高的30個(gè)IP,取值如果此IP訪問量大于100次,則把此IP放入黑名單cat access.log | grep sendCheckCode | grep -v 403 | awk '{print $2}'|sort|uniq -c | sort -k1 -n | tail -30 | awk '{if($1>100) print "deny "$2";"}' > ../conf/denyip.conf#日志切割,做定時(shí)任務(wù),每10分鐘執(zhí)行一次mv ${log_path}/access.log ${log_path}/accesslog.bak/access_${date}.log../sbin/nginx -s reload
可自己定義時(shí)間間隔和訪問量,也可取消篩選訪問量最高的30個(gè),直接取值每10分鐘訪問接口超過100次的
其中:"grep -v 403
" 是把已經(jīng)禁止訪問的IP給過濾掉,只篩選正常訪問的
3、修改nginx.conf
在http模塊加入:
include denyip.conf;
重新加載nginx生效。
4、添加計(jì)劃任務(wù):
*/10 * * * * /bin/bash /shell/nginx_cutaccesslog.sh > /dev/null 2>&1
5、驗(yàn)證:
[root@xxx logs]# ll accesslog.bak/-rw-r--r-- 1 root root 2663901 Jun 5 15:10 access_20180605-15:00:01.log-rw-r--r-- 1 root root 13696947 Jun 5 15:20 access_20180605-15:10:01.log-rw-r--r-- 1 root root 13265509 Jun 5 15:30 access_20180605-15:20:01.log-rw-r--r-- 1 root root 13846297 Jun 5 15:40 access_20180605-15:30:01.log[root@xxx logs]# cat ../conf/denyip.conf ……………………deny 112.12.137.28;deny 183.167.237.229;deny 111.41.43.58;deny 115.217.117.159;deny 219.133.100.133;deny 171.221.254.115;deny 60.184.131.6;……………………
新聞熱點(diǎn)
疑難解答
圖片精選