博客主页 😭
CloudFlare自动根据系统负载情况开关的五秒盾防御DDoS攻击脚本-实测有效
CloudFlare自动根据系统负载情况开关的五秒盾防御DDoS攻击脚本-实测有效

Author:

绒毛球

©

Wordage:

共计 3646 字

needs:

约 2 分钟

Popular:

329 ℃

Created:

:本文最后更新于2023年02月09日,已经过了224天没有更新,若内容或图片失效,请留言反馈
目 录

绒毛球是极力在推荐大家使用CloudFlare来对站点进行安全防护的,采用的是国内大部分主流DNS多线路解析功能实现的,将境外线路解析到CloudFlare上去,这样一来只要没有暴露服务器真实IP情况下,所有使用境外IP代理的恶意请求、CC攻击、 DDoS 攻击都可以被CloudFlare免费拦截防御,基本上可以阻挡大部分免费的、恶心人的攻击骚扰。

CloudFlare里防御 DDoS 攻击最有效的就是五秒盾功能了,所谓的五秒盾其实就是指CloudFlare的“Under Attack 模式”而已,登录你的CloudFlare账号进入具体域名,一般在最右边就可以看到开启开关了,如下图所示:

5秒盾开关位置.webp

当开启五秒盾(Under Attack 模式)后,所有访问到CloudFlare的IP节点上都会显示如下图所示的警示验证页面:

Cloudflare五秒盾开启效果.gif

意思是需要5秒时间来验证访问者是否真实的请求,而非机器发送的恶意攻击请求。简单就是这个意思,是不是感觉有点儿影响用户体验了,好在可以很好的缓解 DDoS 攻击造成的服务器运行压力和带宽占用,绒毛球实测还是非常有效果的,这就是绒毛球博客至今不怕各种 DDos/CC 攻击挑衅的主要原因之一了。

今天给大家分享一个开源的sh脚本 Cloudflare-Block
,可以实现在Linux服务器端根据系统负载情况自动开启CloudFlare的五秒盾进行被攻击后的防御。原理其实很简单,就是借助CloudFlare的API直接远程操作CloudFlare账号。

只需要复制下面的代码,保存为Cloudflare.sh文件再添加到crontab里定时执行脚本即可,相当的简单。

#!/bin/bash

# $1 = 1min, $2 = 5min, $3 = 15min,这里选择使用哪个负载值为阈值。
loadavg=$(awk '{printf "%f", $1}' < /proc/loadavg)

# Linux系统负载(load average)达到10即开启五秒盾,您可以根据情况来修改这个数值。
maxload=10

# 配置 Cloudflare 的API
# 您 CloudFlare 的Global API Key (https://dash.cloudflare.com/profile)
api_key=
# 您 CloudFlare 账号邮箱
email=
# 您 CloudFlare 账号的**区域 ID** (https://dash.cloudflare.com/_zone-id_/domain.com)
zone_id=
# 没有攻击时CloudFlare的默认安全级别
default_security_level=high
# 是否将调试消息写入脚本目录下的 debug.log 文件
debug=0

basedir=$(dirname "$0")

attacked_file=$basedir/attacked

[ "$debug" -eq 1 ] && exec > "${logfile:-$basedir/debug.log}"


# 您可以就地放置上述配置值,也可以将其放置在脚本目录中名为“config”的文件中。
config_file=$basedir/config
[ -e "$config_file" ] && source "$config_file"

api_set_mode() {
    local mode
    mode=$1
    curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$zone_id/settings/security_level" \
        -H "X-Auth-Email: $email" \
        -H "X-Auth-Key: $api_key" \
        -H "Content-Type: application/json" \
        --data "{\"value\":\"$mode\"}" \
    || echo "Error: failed to set security level to $mode"
}

# 如果不存在则创建文件“attacked”
if [ ! -e "$attacked_file" ]; then
    echo 0 > "$attacked_file"
fi

was_under_attack=$(cat "$attacked_file")
under_attack=$(echo "$loadavg > $maxload" | bc)

if [[ "$1" != [01] ]]; then
    echo "Incorrect usage! Please pass either 0 or 1 as an argument"
    exit 1
fi

if [ $debug -eq 1 ]; then
    echo "Mode: $1; was under attack: $was_under_attack; now under attack: $under_attack"
    echo "Load average: $loadavg"
fi

if [ "$1" -eq 0 ] && [ "$was_under_attack" -eq 0 ] && [ "$under_attack" -eq 1 ]; then
    # attack just started and we want to enable under-attack mode

    # Activate protection
    [ "$debug" -eq 1 ] && echo "Activating under-attack mode!"
    echo 1 > "$attacked_file"
    api_set_mode under_attack

elif [ "$1" -eq 1 ] && [ "$was_under_attack" -eq 1 ] && [ "$under_attack" -eq 0 ]; then
    # attack just finished (and up to 20 minutes passed since) 
    # and we want to disable under-attack mode

    # Disable Protection
    [ "$debug" -eq 1 ] && echo "Leaving under-attack mode!"
    echo 0 > "$attacked_file"
    api_set_mode "$default_security_level"

fi

exit 0

然后在crontab定时任务里添加这个脚本的执行定时计划即可:

*/1 * * * * /root/DDoS/Cloudflare.sh 0 # 如果未启用五秒盾保护,则每 1 分钟检查一次
*/20 * * * * /root/DDoS/Cloudflare.sh 1 # 每 20 分钟检查一次五秒盾保护是否已启用

绒毛球虽然没有使用本脚本,但实测有效的,至于为啥绒毛球不用,主要是绒毛球的需求是永远开着五秒盾(Under Attack 模式),绒毛球对境外的盎格鲁撒克逊人们极端讨厌,也不相信人家“白人至上”优越感爆棚的种群有功夫来看我的小博客,所以浏览体验根本就不在我的考虑范围内,直接无视。总之一句话:境外太脏了,境外请求几乎可以说没有几个好东西!

作者:
绒毛球
文章:
绒毛球・笔记本
地址:
https://www.rongmaoqiu.com/Course/255.html
更新:
2023 年 02 月 09 日 18 时
声明:
本文由博主原创,依据 CC BY-NC-SA 4.0 许可协议授权,转载请注明出处
文章二维码
CloudFlare自动根据系统负载情况开关的五秒盾防御DDoS攻击脚本-实测有效
 博主关闭了所有页面的评论
博客主页 绒毛球・笔记本 绒毛球・笔记本-专注于分享的个人博客 51统计 百度统计
萌ICP备20239898号 京ICP备14042203号 本站由又拍云提供CDN加速/云存储服务 本站已运行 242 天 4 小时 8 分 自豪地使用 Typecho 建站,并搭配 MyDiary 主题 Copyright © 2023 ~ 2023. 绒毛球・笔记本 All rights reserved.
打赏图
打赏博主
欢迎
搜 索
足 迹
分 类
  • 网游单机
  • 主题模板
  • 插件工具
  • 网络技术
  • 精美图集
  • 知识星球