Cloudflare 防火墙自动屏蔽 IP 到和自动 5 秒盾脚本防 CC 攻击
![]() | ![]() | ![]() | ![]() |
| 【性价之王】 | 【线路之王】 | 【价格之王】 | 【配置之王】 |
| 【免费之王】 | 【香港首推】 | 【梯子之王】 | 【独服之王】 |

Cloudflare 很多朋友都在使用,如果你的网站服务器架设在国外,那 Cloudflare 是一个非常好的加速工具,一可以为你的网站进行加速,二可以给你的网站提供防护,如果你的站经启用了 Cloudflare,遇到 CC 攻击者比较疯狂的扫描的话,Cloudflare 还需要设置一下,才能够精确的判断出攻击者的 IP,然后可以利用脚本分析网站日本,从日志中把攻击 IP 分析出来,再使用 Cloudflare API 将攻击者的 IP 自动的添加到 Cloudflare 防火墙里,当然在遇到大规模的攻击时,可以设置一个定时任务,检测到系统负载非常高时,自动调用 Cloudflare 的 5 秒盾进行防护,下面就给大家分享一下配置教程。
自动屏蔽 IP首先我们要能找出攻击者的 IP,利用脚本分析日志中在一分钟某个 IP 访问的频率,超过一定的频率(一般来正常的访问,一分钟内应该不超过 60 次,你可以设置为更小),即认定为恶意 IP。脚本如下:
| 1234567891011121314151617181920212223 | #/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_timecur_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_top10ip_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.txt,这里 wzfou.com 为了测试设置了 2,你需要改成其它的数字for line in $ipdoecho $line >> $logfile/black.txtecho $line# 这里还可以执行 CF 的 API 来提交数据到 CF 防火墙done |
批量增加到防火墙
| 123456789101112131415161718192021222324 | #!/bin/bash# Author: XOO# Date : 2019# 填 Cloudflare Email 邮箱CFEMAIL="admin@771633.com"# 填 Cloudflare API keyCFAPIKEY="xxxxxxxxxxxxxxxx"# 填 Cloudflare Zones ID 域名对应的 IDZONESID="xxxxxxxxxxxxxxxxxxxx"# /data/wwwlogs/black.txt 存放恶意攻击的 IP 列表# IP 一行一个。IPADDR=$(</data/wwwlogs/black.txt)# 循环提交 IPs 到 Cloudflare 防火墙黑名单# 模式(mode)有 block, challenge, whitelist, js_challengefor IPADDR in ${IPADDR[@]}; doecho $IPADDRcurl-s-XPOST"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 |
把以上两个脚本合到一起如下:
| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | #/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_timecur_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_top10ip_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 $ipdoecho $line >> $logfile/black.txtecho $line# 这里还可以执行 CF 的 API 来提交数据到 CF 防火墙done# 填 Cloudflare Email 邮箱CFEMAIL="admin@771633.com"# 填 Cloudflare API keyCFAPIKEY="xxxxxxxxxxxxxxxxxxxxxxxx"# 填 Cloudflare Zones ID 域名对应的 IDZONESID="xxxxxxxxxxxxxxxxxxxxxxxxxxx"# /data/wwwlogs/black.txt 存放恶意攻击的 IP 列表# IP 一行一个。IPADDR=$(</data/wwwlogs/black.txt)# 循环提交 IPs 到 Cloudflare 防火墙黑名单# 模式(mode)有 block, challenge, whitelist, js_challengefor IPADDR in ${IPADDR[@]}; doecho $IPADDRcurl-s-XPOST"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 文件,直接传到你的服务器里执行就可以,如:
| 12 | chmod +x /root/CF.sh./CF.sh |
最后使用定时任务进行执行就可以,宝塔可以在面板里直接设置,如果用 Crontab 可以用以下命令
| 1 | * * * * * /bin/bash /root/CF.sh > /tmp/ou1t.log 2>&1 |
代码地址:https://github.com/Machou/Cloudflare-Block
当你的服务器受到攻击时,系统负载就会爆增,利用脚本自动检测系统负载,当压力超过一定的值时就可以切换为” I’m Under Attack! “模式了。操作步骤如下:
| 12345678910 | #下载cd /root && git clone https://github.com/Machou/Cloudflare-Block.git DDoS#打开 Cloudflare.sh,修改配置API_KEY You're Global API Key (https://dash.cloudflare.com/profile)MAIL_ACCOUNT Email of your Cloudflare accountDOMAIN Zone ID (https://dash.cloudflare.com/_zone-id_/domain.com)#设置定时任务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 |
脚本默认的是检测系统负载为 10,启动” I’m Under Attack! “模式,你以根据需要来调整。如下图:
完整代码如下:
| 12345678910111213141516171819202122232425262728293031323334353637383940 | #!/bin/bash# $1 = 1min, $2 = 5min, $3 = 15minloadavg=$(cat /proc/loadavg|awk '{printf "%f", $1}')# load is 10, you can modify this if you want load more than 10maxload=10# Configuration API Cloudflare# You're Global API Key (https://dash.cloudflare.com/profile)api_key=# Email of your account Cloudflareemail=# Zone ID (https://dash.cloudflare.com/_zone-id_/domain.com)zone_id=# create file attacking if doesn't existif [ ! -e $attacking ]; then echo 0 > $attackingfiattacking=./attackinghasattack=$(cat $attacking)if [ $(echo "$loadavg > $maxload"|bc) -eq 1 ]; then if [[ $hasattack = 0 && $1 = 0 ]]; then # Active protection echo 1 > $attacking curl-s-XPATCH"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":"under_attack"}' fi else if [[ $hasattack = 1 && $1 = 1 ]]; then # Disable Protection echo 0 > $attacking curl-s-XPATCH"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":"high"}' fifiexit 0 |
Cloudflare 是一个非常好的工具,很多功能都可以灵活的进行设置,对于一个小站长,这些防护已经足够了,更多的功能有待于开发。
猜你可能想看的VPS
- [11.11]HostKvm 促销套餐年付 6 折 全场 8 折 充$5全球[VPS测评]
- mysqldump: Got error: 1044: ***when 全球[VPS测评]
- 便宜 VPS $15 年 1G 内存 10G SSD 2T 流量 1Gb全球[VPS测评]
- hostkvm - 大带宽香港 VPS 2 核 2G 内存仅 68 元 香港VPS[主机]
- 景文互联→日本服务器月付 900 元起 软银+CN2 线路 快速上架日本VPS[主机]
- 海星云主机→全场限量 75 折 KVM VPS 月付 41 元起全球[VPS测评]
- 阿里云 - 轻量应用服务器香港新加坡多机房可选 最低 24 元 月香港VPS[主机]
- DMIT→洛杉矶 CN2 GIA 线路 1GB 10GB 1TB 年付 全球[VPS测评]
- WPS Office 2019 去掉广告的办法全球[VPS测评]
- 疯狂猜成语 图猜成语一个咻字和一只鹤是什么意思?全球[VPS测评]
- 优惠 Onevps→限时 75 折优惠 日本 新加坡机房不限流量 IP 日本VPS[主机]
- ftpit→精致型商家 $1.49 月 KVM 256M 内存 1 核 全球[VPS测评]
- [11.11]RAKsmart→无限流量服务器月付 46 美元起 VPS全球[VPS测评]
- Ceraus洛杉矶cera云服务器新用户五五折促销,三网强制cn2gia全球[VPS测评]
- CloudSilk新上香港cmi vps,500Mbps大带宽,三网cm香港VPS[主机]
- 不要再相信这4个错误的Google 搜索引擎SEO优化观念全球[VPS测评]
- Cloudity-葡萄牙VPS 8.9欧月付 2G内存15G SSD 2全球[VPS测评]
- GigsGigsCloud新加坡大陆优化VPS上架全球[VPS测评]
- 补货! 联通用户首选 -搬瓦工日本软银限量版 → $65.38美金年付日本VPS[主机]
- tudcloud,香港沙田大带宽vps特惠7折,CN2+BGP直连,10香港VPS[主机]
- 天生云:香港CN2VPS/2核/4G/100G硬盘/4Mbps不限流量,香港VPS[主机]
- VPS到底有什么用?全球[VPS测评]
- 彗星云:香港特价vps1核/1G/无限流量/月付仅9元,年付仅75元;国香港VPS[主机]
- 轻云互联,香港VPS月付22元 美国VPS月付19元美国VPS[主机]
- 青云互联:年终特惠香港弹性云服务器15元/月起,可自定义配置,可选winWINDOWS
- 为什么大家都选择香港服务器建站香港VPS[主机]
- 向日葵-漏洞科普:海外云服务器三种漏洞修复方法快收藏起来!全球[VPS测评]
- 2022年最新的15个美容院抖音文案,美容院文案怎么写全球[VPS测评]
- 情画数据:香港沙田CN2云服务器,2核/2G/5M带宽,年付200元香港VPS[主机]
- 阳帝云:新年快乐666个现金优惠券,香港CN2 GIA、美国CN2高防V美国VPS[主机]
转载请注明原文地址:http://140.238.13.167:12355/read-217936.html











