之前在处理使用阿里云cdn网站的时候,我们可以通过nginx的$http_x_forwarded_for参数获取用户的真实IP。然后结合nginx配置对有攻击行为的IP做限制,例如返回403。具体方法可以参考这篇文章《Nginx网站使用CDN获取攻击用户真实IP和fail2ban自动禁止的方法》。这种方法可以减少业务压力,但本质上IP没有被禁止。接下来博主使用阿里云提供的api和脚本,从源头上禁止那些IP的访问。
第一步:安装python的sdk
pip install aliyun-python-sdk-cdn
sdk安装的具体网址:https://develop.aliyun.com/tools/sdk?#/python
第二步:申请key
从阿里云帐号控制菜单中选择accesskeys,按照提示创建。
第三步:运行脚本
我的脚本类似如下,获取IP的命令可以根据自己需求修改。
#!/usr/bin/env python
from aliyunsdkcore import client
from aliyunsdkcdn.request.v20141111 import SetIpBlackListConfigRequest
import json
import sys
import os
cdn_access_id=''
cdn_access_key_secret=''
def main():
#get blackip
files=[
'/home/wwwlogs/blog.nbhao.org_error.log',
]
blackips=[]
for file in files:
cmd="source /etc/profile;awk '{print $NF}' %s |awk '{a[$0]++}END{for(i in a){if(a[i] > 10){print i}}}'" % file
result=os.popen(cmd,'r').readlines()
result = map(lambda s: s.strip(), result)
blackips=blackips+result
blackips = list(set(blackips))
str_ips=""
for ip in blackips:
if str_ips=="":
str_ips=ip
else:
str_ips=str_ips+","+ip
#aliyun cdn action
clt = client.AcsClient(cdn_access_id,cdn_access_key_secret)
request=SetIpBlackListConfigRequest.SetIpBlackListConfigRequest()
request.set_accept_format('json')
request.add_query_param('DomainName','vps.nbhao.org')
request.add_query_param('BlockIps',str_ips)
try:
result=clt.do_action(request)
r_dict=json.loads(result)
print r_dict
except:
print("Do ip black list error.")
sys.exit()
while True:
import time
main()
time.sleep(600)
脚本我是从网站错误nginx日志中读取疑似攻击的IP的,然后每隔10分钟分析一次。
参考网址:
http://blog.nbqykj.cn/?p=2594.html
正文完
微信搜一搜“奇悦电脑科技”或扫描二维码关注我们
