最新Cloudflare自动拉黑恶意IP到防火墙和自动切换5秒盾脚本防CC攻击
Z站站长今天给大家分享一个来自柴郡猫的资源,也是来自别的网站,希望大家喜欢,下载地址就在文中。
Cloudflare自动拉黑恶意IP到防火墙和自动切换5秒盾脚本防CC攻击
一个朋友将自己的企业站放在XXX主机上,流量不大,但由于使用的是经常受到CC攻击,主要表现就是IO和CPU爆增,最后就是数据库挂掉导致网站无法访问。一开始启用了Cloudflare,但是攻击者疯狂地扫描,防御效果一般。
为了能够精确地识别恶意IP,在启用了Cloudflare CDN后需要在Nginx和Apache中启用Real IP模块,然后利用脚本分析网站日志,从日志中搜集异常IP,然后使用Cloudflare API批量将恶意IP添加到Cloudflare的防火墙当中。
当然,当网站遭遇非常强大的CC和DDoS攻击时,我们可以启用Cloudflare经典的5秒盾防攻击,如果把握不了攻击的频率的话,可以设置一个定时任务,当系统负载超过某一个值(一般来攻击会导致系统负载爆增),调用Cloudflare API启用5秒盾。
一、Cloudflare自动拉黑恶意IP
1.1 找出恶意IP
利用脚本分析在一分钟单个IP访问的频率,超过一定的频率(一般来正常的访问,一分钟内应该不超过60次,你可以设置为更小),即认定为恶意IP。脚本如下:
- #/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.txt,这里wzfou.com为了测试设置了2,你需要改成其它的数字
- for line in $ip
- do
- echo $line >> $logfile/black.txt
- echo $line
- # 这里还可以执行CF的API来提交数据到CF防火墙
- done
1.2 批量添加IP到防火墙
使用以下代码就可以将恶意IP批量添加到Cloudflare的防火墙了,记得替换为你的Cloudflare API。
- #!/bin/bash
- # Author: Zhys
- # Date : 2018
- # 填Cloudflare Email邮箱
- CFEMAIL=“freehao123@gmail.com”
- # 填Cloudflare API key
- CFAPIKEY=“xxxxxxxxxxxxxxxx”
- # 填Cloudflare Zones ID 域名对应的ID
- ZONESID=“xxxxxxxxxxxxxxxxxxxx”
- # /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
1.3 自动找出恶意IP并添加到防火墙
直接将上面两个脚本合并到一个脚本即可。
- #/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=“freehao123@gmail.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
上面的脚本我已经放在我的下载中心,可以提供给大家下载使用,代码如下:
wget https://down.cheshirex.com/shell/attack-ip.sh
chmod +x /qicmd/cfblockip.sh
./cfblockip.sh
wget https://down.cheshirex.com/shell/attack-ip.sh
chmod +x /qicmd/attack-ip.sh
./attack-ip.sh
wget https://down.cheshirex.com/shell/cf-block-attack-ip.sh
chmod +x /qicmd/cf-block-attack-ip.sh
./cf-block-attack-ip.sh
最后,设置一个定时任务,让脚本每过一分钟检测一次(请根据需要来调整,关于定时任务的使用参考:Linux Crontab命令定时任务基本语法)
* * * * * /bin/bash /root/cf-block-attack-ip.sh > /tmp/ou1t.log 2>&1
自动添加恶意IP到CloudFlare防火墙的效果如下:
二、Cloudflare自动切换5秒盾脚本
网站:
https://github.com/Machou/Cloudflare-Block
当你的服务器受到攻击时,系统负载就会爆增,利用脚本自动检测系统负载,当压力超过一定的值时就可以切换为” I’m Under Attack! “模式了。操作步骤如下:
- #下载
- 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 account
- DOMAIN 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! “模式,你以根据需要来调整。如下图:
完整的脚本代码如下:
- #!/bin/bash
- # $1 = 1min, $2 = 5min, $3 = 15min
- loadavg=$(cat /proc/loadavg|awk ‘{printf “%f”, $1}’)
- # load is 10, you can modify this if you want load more than 10
- maxload=10
- # Configuration API Cloudflare
- # You’re Global API Key (https://dash.cloudflare.com/profile)
- api_key=
- # Email of your account Cloudflare
- email=
- # Zone ID (https://dash.cloudflare.com/_zone-id_/domain.com)
- zone_id=
- # create file attacking if doesn’t exist
- if [ ! -e $attacking ]; then
- echo 0 > $attacking
- fi
- attacking=./attacking
- hasattack=$(cat $attacking)
- if [ $(echo “$loadavg > $maxload”|bc) -eq 1 ]; then
- if [[ $hasattack = 0 && $1 = 0 ]]; then
- # Active protection
- echo 1 > $attacking
- 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”:“under_attack”}’
- fi
- else
- if [[ $hasattack = 1 && $1 = 1 ]]; then
- # Disable Protection
- echo 0 > $attacking
- 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”:“high”}’
- fi
- fi
- exit 0
三、总结
Cloudflare是一个非常好用的防御DDos和CC攻击的工具,免费版本的Cloudflare结合API可以实现更加灵活的功能,对于普通的防御足够自己使用了。
Cloudflare防护也有一定的问题,那就是启用了Cloudflare后获取到用户的IP都是Cloudflare CDN节点的IP,我们还需要在服务器配置中做进一步的优化。
文章转载自:挖站否https://wzfou.com/cloudflare-cc/,部分内容参考自 9sep 版权所有。
大家觉得Z站站长分享得这个资源怎么样?赶紧评论一下吧!
本站为避免不必要的纷争,分享的所有资源中一切可能有版权风险的资源将全部转载自第三方网站或平台,站长只为大家提供相关资源的介绍和跳转引导。 因可能有疏忽大意,所以如有遗漏资源侵犯了您的合法权利,请联系站长删除。
【小程序源码网资源下载使用说明】:
本站所分享的一切QQ小程序源码,thinkphp整站源码,微信小程序源码,图文教程等资源仅供用户学习参考使用,任何人不得作其他用途,违者自行承担所有责任。
【小程序源码网毫无人看的介绍】:
本站又称Z站,原名贼娘网,开站于2018年,换过三任站长,目前站长是第四任站长,本站是一个主要分享免费开源小程序源码/网站源码/免费素材/教程资源的网站,主要小程序资源有用于学习的小程序源码,也有正版原创可商用的小程序源码,是一个公益博客型网站。
【小程序源码网原创源码版权申明】:
未经小程序源码网许可,任何人不得擅自使用本站原创首发源码进行商业行为(除本站VIP用户在期限内,版权无使用限制),否则将依法承担相应赔偿责任。
【小程序源码网转载文章版权申明】:
本站所转载的QQ小程序或微信小程序源码与其他资源仅供学习,任何人不得作其他用途,违者自行承担所有责任。
【小程序源码网站长最后的屁话】:
如有您认为本站有任何侵犯您合法权益的文章,或者您有什么疑问需求,欢迎联系站长QQ,站长24小时在线,备注公司名称和源码版权问题或者需要小程序定制开发等站长业务类型可急速处理,如果您只是交流小程序的一些开发问题或源码问题可以加入QQ群讨论,就不用加站长啦,对于白嫖党,QQ群才是处理问题的天堂,当然站长也欢迎大家骚扰~
小程序源码网 » 最新Cloudflare自动拉黑恶意IP到防火墙和自动切换5秒盾脚本防CC攻击