1. 首页
  2. 运维开发
  3. Python

使用阿里云CDN后禁止疑似攻击IP的办法

之前在处理使用阿里云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,按照提示创建。

QQ截图20171122171706

第三步:运行脚本

我的脚本类似如下,获取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分钟分析一次。

参考网址:

Nginx网站使用CDN获取攻击用户真实IP和fail2ban自动禁止的方法

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code