Pagoda面板的免费版本就足够了,所以小编从不扔新版本。 当然,本土暴君可以买专业版,但对于小编织丝,免费版如果我们的动手能力稍微强一点就足够了,所以使用它和专业版之间没有区别 ,它都是自制的,这对提高服务器级别非常有帮助。 有很多关于Cloudflare小编的讨论,但今天它仍然是关于它的。 如果我们的网站遭遇CC和DDoS攻击,我们可以启用Cloudflare的经典5秒盾牌攻击,如果你无法掌握攻击的频率。 如果要设置定时任务,当系统负载超过某个值时(通常攻击会导致系统负载突发),请调用Cloudflare API启用5秒屏蔽。 当然,如果我们是Pagoda用户,设置起来会更简单,但是当我们启用Cloudflare CDN时,我们需要在Nginx中启用Real IP模块,然后使用脚本分析网站日志,收集 来自日志的异常IP,然后使用Cloudflare API批量添加恶意IP到Cloudflare的防火墙。 但在阅读本文之前,我们需要了解如何启用Real IP模块。 但是,Pagoda面板6.9.0默认为Real IP模块,如图所示:

如果您的Pagoda面板没有打开此模块,您可以按照上述设置进行操作。 在本文中,我们将讨论如何使用shell脚本自动将恶意IP拉到Cloudflare防火墙并自动切换5秒屏蔽以防止CC攻击。 一:定位恶意IP我们需要查找恶意IP,你可以使用脚本在一分钟内分析单个IP访问的频率,超过一定的频率(一般到正常访问,一分钟不超过60次, 你可以设置为更小),这被认为是恶意IP。 Pagoda面板的shell脚本如下:
#/bin/bash#日志文件,如不是宝塔面板可以根据需要改成你自己的路径
logfile=/www/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/www.daniao.org.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,这里大鸟为了测试设置了2,你需要改成其它的数字
for line in $ip
do
echo $line >> $logfile/black.txt
echo $line
# 这里还可以执行CF的API来提交数据到CF防火墙
done
二:计划任务
关于宝塔面板的计划任务如何设置,得兼网小编就不多说了,我们看看如何把上面的ip定位的脚本放在计划任务中。点击计划任务选择Shell脚本即可如图:

2.1测试脚本
这个脚本,我们需要测试是否可用,小编设置的是每隔3分钟执行一次,所以我们可以自己手动不停刷新自己的网站或者自己的测试站点即可。我们看看最终的效果,如图:

几乎无时无刻没有扫描的,所以还是很有必要做一个防御的。
三:添加IP到CF防火墙
使用以下代码就可以将恶意IP批量添加到Cloudflare的防火墙了,记得替换为你的Cloudflare API。
#!/bin/bash
# Author: Zhys
# Date : 2018
# 填Cloudflare Email邮箱
CFEMAIL=”daniao@gmail.com”
# 填Cloudflare API key
CFAPIKEY=”xxxxxxxxxxxxxxxx”
# 填Cloudflare Zones ID 域名对应的ID
ZONESID=”xxxxxxxxxxxxxxxxxxxx”
# /www/wwwlogs/black.txt存放恶意攻击的IP列表
# IP一行一个。
IPADDR=$(</www/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
这样有点麻烦,我们可以合并。
三:自动找出恶意IP并添加到防火墙
我们用宝塔面板当然是越省事越好,我们可以把定位ip和封锁ip到CF防火墙合并在一起。
#/bin/bash
#日志文件,你需要改成你自己的路径
logfile=/www/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/www.daniao.org.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,这里大鸟为了测试设置了2,你需要改成其它的数字
for line in $ip
do
echo $line >> $logfile/black.txt
echo $line
# 这里还可以执行CF的API来提交数据到CF防火墙
done
# 填Cloudflare Email邮箱
CFEMAIL=”xxx@xxx.com”
# 填Cloudflare API key
CFAPIKEY=”xxxxxxxxxxxxxxxxxxxxxxxxxxxxx”
# 填Cloudflare Zones ID 域名对应的ID
ZONESID=”xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”
# /www/wwwlogs/black.txt存放恶意攻击的IP列表
# IP一行一个。
IPADDR=$(</www/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 /www/wwwlogs/black.txt
这里我们可以编辑在第二中编辑的计划任务的Shell脚本重新添加下即可。如果被猛烈的CC可以设置成每1分钟就执行一次,软盟网小编这里测试是设置成每3分钟执行一次脚本。
自动添加恶意IP到CloudFlare防火墙的效果如下:

这样我们就实现了CC攻击临时救急的半自动流量清洗的功能。
屏蔽IP成功的效果图如下:

屏蔽IP
四:总结
如果这时候真有恶意攻击了,我们可以手动开启5秒盾脚本防CC攻击,这样就实现了一个遭受攻击从来实现流量清洗的功能。Cloudflare真的是一个非常好用的防御DDos和CC攻击的工具,免费版本的Cloudflare结合API可以实现更加灵活的功能,对于普通的防御足够自己使用了。
当然了,宝塔面板结合Cloudflare使用起来也更方便和更简单。如果你对Cloudflare的设在不是太熟悉,可以看看小编之前的文章。平时我们的域名虽然不用Cloudflare的解析服务,但是不妨在解析放在上面,如果遇到问题可以快速的切换过去。
http://xzh.i3geek.com