CloudFlare的DDOS防护能力是自带的,配置防火墙Firewall等,可达到防御DDOS和抵御CC的功能。 1、恶意IP启用验证码 进入CloudFlare后台,选择顶部的Firewall,按下图所示,选择。 两条合起来的意思是当IP的威胁值达到2分以上,并且不属于已知的爬虫,将使用验证码拦截访问。 2、自动屏蔽恶意IP 下面的脚本,是找出攻击者的IP,利用脚本分析日志中在一分钟某个IP访问的频率,超过一定的频率(一般来正常的访问,一分钟内应该不超过60次,你可以设置为更小),即认定为恶意IP。同时,把恶意IP上传到CloudFlare,并屏蔽。 CloudFlare账号、API等设为自己的。 以下脚本文件下载:https://khz.lanzouw.com/iFgCl0bq1fsh #/bin/bash
#日志文件,你需要改成你自己的路径
logfile=/data/wwwlogs/
last_minutes=1
#开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)
start_time= date +"%Y-%m-%d %H:%M:%S" -d '-1 minutes'
echo $start_time
#结束时间现在
stop_time=`date +"%Y-%m-%d %H:%M:%S"`
echo $stop_time
cur_date="`date +%Y-%m-%d`"
echo $cur_date
#过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径
tac $logfile/sky.ucblog.net_nginx.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($2,RSTART+14,21);if(t>=st && t<=et) {print $0}}' | awk '{print $1}' | sort | uniq -c | sort -nr > $logfile/log_ip_top10
ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`
ip=`cat $logfile/log_ip_top10 | awk '{if($1>2)print $2}'`
# 单位时间[1分钟]内单ip访问次数超过2次的ip记录入black.log,这里为了测试设置2,你需要改成其它的数字
for line in $ip
do
echo $line >> $logfile/black.txt
echo $line
# 这里还可以执行CF的API来提交数据到CF防火墙
done
# 填Cloudflare Email邮箱
CFEMAIL="admin@bmvps.com"
# 填Cloudflare API key
CFAPIKEY="xxxxxxxxxxxxxxxxxxxxxxxx"
# 填Cloudflare Zones ID 域名对应的ID
ZONESID="xxxxxxxxxxxxxxxxxxxxxxxxxxx"
# /data/wwwlogs/black.txt存放恶意攻击的IP列表
# IP一行一个。
IPADDR=$(</data/wwwlogs/black.txt)
# 循环提交 IPs 到 Cloudflare 防火墙黑名单
# 模式(mode)有 block, challenge, whitelist, js_challenge
for IPADDR in ${IPADDR[@]}; do
echo $IPADDR
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$ZONESID/firewall/access_rules/rules" \
-H "X-Auth-Email: $CFEMAIL" \
-H "X-Auth-Key: $CFAPIKEY" \
-H "Content-Type: application/json" \
--data '{"mode":"block","configuration":{"target":"ip","value":"'$IPADDR'"},"notes":"CC Attatch"}'
done
# 删除 IPs 文件收拾干净
rm -rf /data/wwwlogs/black.txt
把这个文件存为sh文件,并定时执行,如存为cf.sh,设置权限 chmod +x cf.sh 定时任务:* * * * * /bin/bash /root/CF.sh > /tmp/ou1t.log 2>&1
3、自动开启5秒盾 脚本已开源:https://github.com/Machou/Cloudflare-Block cd /root && git clone https://github.com/Machou/Cloudflare-Block.git DDoS 定时任务 crontab -e
*/1 * * * * /root/DDoS/Cloudflare.sh 0 # check every 1 minute if protection is not enabled
*/20 * * * * /root/DDoS/Cloudflare.sh 1 # check every 20 minutes if protection is enabled
API_KEY: https://dash.cloudflare.com/profile
MAIL_ACCOUNT: 你的Cloudflare注册Email
DOMAIN: https://dash.cloudflare.com/_zone-id_/domain.com(domain.com为你的邮箱)
|