最近博客一直被人恶意DDoS攻击,持续好几天了,每天来几次,阿里云被打是24小时黑洞,t腾讯云被打是2小时黑洞,之后自动恢复,所以为了应对 DDoS 攻击,于是写了个结合 Cloudflare API 自动切换域名 DNS 记录的 Python 代码,这里分享下主要代码内容。
一、API TOKEN 申请
使用 Cloudflare API,需要一个 API TOKEN,直接申请即可,申请地址:https://dash.cloudflare.com/profile/api-tokens
申请时,给予这个 API 令牌编辑 DNS 的权限,如下图:
使用 Cloudflare API 修改 DNS 记录主要分为两步:
获取 DNS 记录的 id;
更新此 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,并关闭代理。
四、后记
这种一直 DDoS 攻击别人服务器的人到底是什么心态,我寻思就是一个个人博客,也没有恶意攻击别人的博文,能得罪什么人呢?实在是搞不懂。