宝塔面板免费版本足够用了,所以大鸟从来也不去折腾什么开新版本,当然了土豪可以购买专业版,但是对于大鸟这等屌丝来说,免费版真的是足够好用,如果我们动手能力稍微强一点,那么使用起来和专业版也是没有什么差别的,而且都是自己动手,这样对于提高自己的服务器水平还是很有帮助的。
关于Cloudflare大鸟也讲过不少了,不过今天还是要说的是它,如果我们的网站遭遇CC和DDoS攻击时,我们可以启用Cloudflare经典的5秒盾防攻击,如果把握不了攻击的频率的话,可以设置一个定时任务,当系统负载超过某一个值(一般来攻击会导致系统负载爆增),调用CloudflareAPI启用5秒盾。
当然,如果我们是宝塔用户的话,那设置起来会更简单一点,但是当我们启用CloudflareCDN时候,需要在Nginx中启用RealIP模块,然后利用脚本分析网站日志,从日志中搜集异常IP,然后使用CloudflareAPI批量将恶意IP添加到Cloudflare的防火墙当中。不过看这篇文章之前,我们需要了解下,如何启用RealIP模块。
推荐文章:宝塔面板编译ngx_http_realip_module-用户启用CloudflareCDN后获取真实IP地址
不过宝塔面板6.9.0默认是已经开启了RealIP模块,
如果你的宝塔面板没有开启这个模块,可以按照上文就设置。
这篇文章我们就说说如何利用shell脚本,自动拉黑恶意IP到Cloudflare防火墙,自动切换5秒盾防CC攻击。
我们需要找到恶意ip,可以利用脚本分析在一分钟单个IP访问的频率,超过一定的频率(一般来正常的访问,一分钟内应该不超过60次,你可以设置为更小),即认定为恶意IP。宝塔面板的shell脚本如下:
#日志文件,如不是宝塔面板可以根据需要改成你自己的路径
#开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)
start_time=date+"%Y-%m-%d%H:%M:%S"-d'-1minutes'
stop_time=`date+"%Y-%m-%d%H:%M:%S"`
cur_date="`date+%Y-%m-%d`"
#过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径
tac$logfile/www.daniao.org.log|awk-vst="$start_time"-vet="$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,你需要改成其它的数字
echo$line>>$logfile/black.txt
#这里还可以执行CF的API来提交数据到CF防火墙
关于宝塔面板的计划任务如何设置,大鸟就不多说了,我们看看如何把上面的ip定位的脚本放在计划任务中。点击计划任务选择Shell脚本即可
这个脚本,我们需要测试是否可用,大鸟设置的是每隔3分钟执行一次,所以我们可以自己手动不停刷新自己的网站或者自己的测试站点即可。我们看看最终的效果,
几乎无时无刻没有扫描的,所以还是很有必要做一个防御的。
使用以下代码就可以将恶意IP批量添加到Cloudflare的防火墙了,记得替换为你的CloudflareAPI。
CFEMAIL="daniao@gmail.com"
CFAPIKEY="xxxxxxxxxxxxxxxx"
#填CloudflareZonesID域名对应的ID
ZONESID="xxxxxxxxxxxxxxxxxxxx"
#/www/wwwlogs/black.txt存放恶意攻击的IP列表
IPADDR=$(</www/wwwlogs/black.txt)
#循环提交IPs到Cloudflare防火墙黑名单
#模式(mode)有block,challenge,whitelist,js_challenge
forIPADDRin${IPADDR[@]};do
curl-s-XPOST"https://api.cloudflare.com/client/v4/zones/$ZONESID/firewall/access_rules/rules"\

-H"X-Auth-Key:$CFAPIKEY"\
-H"Content-Type:application/json"\
rm-rf/data/wwwlogs/black.txt
这样有点麻烦,我们可以合并。
我们用宝塔面板当然是越省事越好,我们可以把定位ip和封锁ip到CF防火墙合并在一起。
#日志文件,你需要改成你自己的路径
#开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)
start_time=date+"%Y-%m-%d%H:%M:%S"-d'-1minutes'
stop_time=`date+"%Y-%m-%d%H:%M:%S"`
cur_date="`date+%Y-%m-%d`"
#过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径
tac$logfile/www.daniao.org.log|awk-vst="$start_time"-vet="$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,你需要改成其它的数字
echo$line>>$logfile/black.txt
#这里还可以执行CF的API来提交数据到CF防火墙
CFAPIKEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#填CloudflareZonesID域名对应的ID
ZONESID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#/www/wwwlogs/black.txt存放恶意攻击的IP列表
IPADDR=$(</www/wwwlogs/black.txt)
#循环提交IPs到Cloudflare防火墙黑名单
#模式(mode)有block,challenge,whitelist,js_challenge
forIPADDRin${IPADDR[@]};do
curl-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"\
rm-rf/www/wwwlogs/black.txt
这里我们可以编辑在第二中编辑的计划任务的Shell脚本重新添加下即可。如果被猛烈的CC可以设置成每1分钟就执行一次,大鸟这里测试是设置成每3分钟执行一次脚本。
自动添加恶意IP到CloudFlare防火墙的效果如下:
这样我们就实现了CC攻击临时救急的半自动流量清洗的功能。
这个错误页面提示,该网站所有者已经禁止了你的ip地址,额,总的来说效果还不错。
如果这时候真有恶意攻击了,我们可以手动开启5秒盾脚本防CC攻击,这样就实现了一个遭受攻击从来实现流量清洗的功能。Cloudflare真的是一个非常好用的防御DDos和CC攻击的工具,免费版本的Cloudflare结合API可以实现更加灵活的功能,对于普通的防御足够自己使用了。
当然了,宝塔面板结合Cloudflare使用起来也更方便和更简单。如果你对Cloudflare的设在不是太熟悉,可以看看大鸟之前的文章。平时我们的域名虽然不用Cloudflare的解析服务,但是不妨在解析放在上面,如果遇到问题可以快速的切换过去。
CloudflareCloudFlare使用方法-DNS解析,SSL证书,防DDoS(5秒盾)攻击和免费CDN加速
本文来源:免费资源--宝塔面板6Xshell脚本(宝塔面板安装脚本)
本文地址:https://www.idcbaba.com/mianfei/649.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。