Python 使用 Cloudflare API 自动修改 DNS 记录教程

最近老王博客(laowangblog.com)一直被人 DDoS 攻击,持续好几天了,每天来几次,腾讯云被打是 2 小时黑洞,之后自动恢复,所以为了应对 DDoS 攻击,老王昨天花了 2 小时写了个结合 Cloudflare API 自动切换域名 DNS 记录的 Python 代码,这里分享下主要代码内容。

一、API TOKEN 申请

使用 Cloudflare API,需要一个 API TOKEN,直接申请即可,申请地址:https://dash.cloudflare.com/profile/api-tokens

申请时,给予这个 API 令牌编辑 DNS 的权限,如下图:

Cloudflare API 令牌

另外还需要一个 Cloudflare Zone ID,这个是每个域名单独的,在域名概述页面可以看到:

Cloudflare ZONE ID

二、获取并更新 DNS 记录

使用 Cloudflare API 修改 DNS 记录主要分为两步:

  1. 获取 DNS 记录的 id;
  2. 更新此 DNS 记录。

这里需要注意,传过去的授权不是 API 令牌,而是 Bearer + API 令牌。

1、获取 DNS 记录的 id

def get_record_id(dns_name, zone_id, token):
    resp = requests.get(
        'https://api.cloudflare.com/client/v4/zones/{}/dns_records'.format(zone_id),
        headers={
            'Authorization': 'Bearer ' + token,
            'Content-Type': 'application/json'
        })
    if not json.loads(resp.text)['success']:
        return None
    domains = json.loads(resp.text)['result']
    for domain in domains:
        if dns_name == domain['name']:
            return domain['id']
    return None

2、更新此 DNS 记录

def update_dns_record(dns_name, zone_id, token, dns_id, ip, proxied=False):
    resp = requests.put(
        'https://api.cloudflare.com/client/v4/zones/{}/dns_records/{}'.format(
            zone_id, dns_id),
        json={
            'type': 'A',
            'name': dns_name,
            'content': ip,
            'proxied': proxied
        },
        headers={
            'Authorization': 'Bearer ' + token,
            'Content-Type': 'application/json'
        })
    if not json.loads(resp.text)['success']:
        return False
    return True

3、调用方法

dns_name 就是 DNS 记录,例如 www.laowangblog.com,ip 就是修改的 ip 地址,proxied 是是否开启代理。

dns_id = get_record_id(dns_name, zone_id, token)
result = update_dns_record(dns_name, zone_id, token, dns_id, ip, proxied)

三、结合 crontab 自动更新 DNS

代码写好了,但是没必要手动更新 DNS,毕竟你也不知道什么时候需要更新,所以我们这里结合 crontab 实现自动更新 DNS。

简而言之就是将 python 代码写好后,设置 crontab 定时任务,每一分钟检查一次目标 ip,如果 ip 没有响应(被 DDoS 攻击了),则切换到 CF,并开启代理,如果 ip 恢复响应了(腾讯云被 DDoS 攻击后 2 小时恢复正常),则切换到腾讯云 ip,并关闭代理。

这里我们需要的知识包括:

  1. 设置 crontab:《Linux 利用 crontab 实现定时任务格式与用法简介
  2. 自动备份网站数据:《基于 LNMP 一键脚本 的 WordPress 网站一键备份脚本分享》、《借助rsync实现VPS之间数据的远程同步,备份VPS数据

效果展示:

今天凌晨 12 点 39 分腾讯云服务器被攻击导致 IP 封堵了,2 点 39 恢复正常:

DDoS 记录

脚本是 12 点 40 分开始换 DNS 记录,2 点 39 分恢复后切换到正常 IP。log 英语语法问题请忽略,最近实在太忙了,结果昨天还要抽空 2 小时写个脚本。

自动换 DNS 记录

四、后记

这种一直 DDoS 攻击别人服务器的人到底是什么心态,我寻思老王博客就是一个个人博客,也没有恶意攻击别人的博文,能得罪什么人呢?实在是搞不懂。这个人前天夜里 2 点多发起攻击,一天攻击了好几次,昨天夜里 12 点多发起攻击,都不用睡觉的吗?

和气生财,这种恶意攻击真的很没有意思,如果是网络上的博文侵犯我们的权益或声誉了,我们可以直接留言联系博主说明情况,真的很没必要做这种有损阴德的事。

赞(0)
关注我们
未经允许不得转载:老王博客 » Python 使用 Cloudflare API 自动修改 DNS 记录教程

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址