宝塔面板自动拉黑恶意IP到Cloudflare防火墙

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。

宝塔面板免费版本足够用了,所以我们从来也不去折腾什么开新版本,当然了土豪可以购买专业版,但是对于屌丝来说,免费版真的是足够好用,如果我们动手能力稍微强一点,那么使用起来和专业版也是没有什么差别的,而且都是自己动手,这样对于提高自己的服务器水平还是很有帮助的。

关于 Cloudflare 也讲过不少了,不过今天还是要说的是它,如果我们的网站遭遇 CC 和 DDoS 攻击时,我们可以启用 Cloudflare 经典的 5 秒盾防攻击,如果把握不了攻击的频率的话,可以设置一个定时任务,当系统负载超过某一个值(一般来攻击会导致系统负载爆增),调用 Cloudflare API 启用 5 秒盾。

当然,如果我们是宝塔用户的话,那设置起来会更简单一点,但是当我们启用 Cloudflare CDN 时候,需要在 Nginx 中启用 Real IP 模块,然后利用脚本分析网站日志,从日志中搜集异常 IP,然后使用 Cloudflare API 批量将恶意 IP 添加到 Cloudflare 的防火墙当中。不过看这篇文章之前,我们需要了解下,如何启用 Real IP 模块。不过宝塔面板 6.9.0 默认是已经开启了 Real IP 模块,如图:

如果你的宝塔面板没有开启这个模块,可以按照上文就设置。这篇文章我们就说说如何利用 shell 脚本,自动拉黑恶意 IP 到 Cloudflare 防火墙,自动切换 5 秒盾防 CC 攻击。

一:定位恶意 IP

我们需要找到恶意 ip,可以利用脚本分析在一分钟单个 IP 访问的频率,超过一定的频率(一般来正常的访问,一分钟内应该不超过 60 次,你可以设置为更小),即认定为恶意 IP。宝塔面板的 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 脚本即可如图:

这个脚本,我们需要测试是否可用,我们设置的是每隔 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分钟之前(这里可以修改,这里为了测试设置了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,"notes":"CC Attatch"}'

done

# 删除 IPs 文件收拾干净

rm -rf /www/wwwlogs/black.txt

这里我们可以编辑在第二中编辑的计划任务的 Shell 脚本重新添加下即可。如果被猛烈的 CC 可以设置成每 1 分钟就执行一次,这里测试是设置成每 3 分钟执行一次脚本。自动添加恶意 IP 到 CloudFlare 防火墙的效果如下:

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

这个错误页面提示,该网站所有者已经禁止了你的 ip 地址,额,总的来说效果还不错。

五:总结

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

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要介绍“宝塔面板mysql无法启动问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“宝塔面板mys...
这篇文章主要介绍“Docker中如何安装宝塔”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Docker中如何安装宝塔”文...
最近发现在宝塔的日志下看到很多垃圾支柱来爬行,这些垃圾蜘蛛爬行的日志很干扰我对于日志数据的查阅,今天查询了下关于宝塔面板下nginx屏蔽垃圾蜘蛛禁止抓取不影响火车头发布的方法,分享给大家去做下学习。希望对你
最近网站更换了服务器,安装了宝塔面板,安装好以后发现安装管理网站还是非常的直观方便的,但是有一点让我折腾了好久,那就是网站设置伪静态固定连接后,总是出现404错...
最近一段时间网站经常出现链接数据库错误,当然原因很简单,卡着了。查看宝塔面板发现负载状态经常是100%,内存使用率也是100%,CPU也不用说了,所以在网上查找...
本站之前有发表过两篇文章来通过宝塔面板优化服务器性能,《如何降低宝塔面板内存和CPU使用率,降低运行负载》以及《宝塔面板通过设置虚拟内存降低内存使用率及负载状态...
复制移动剪切的目录中不能有中文,否则会出错
不管是本地主机还是虚拟主机安装面板都是不能直接用生成的外网ip打开, windows替换ip成127.0.0.1 Linux替换ip成localhost 就可以访问了。
一键清除绑定限制 rm -f /www/server/panel/data/bind.pl
教你使用宝塔计划任务启动laravel调度器
宝塔面板是目前广受用户喜爱的服务器控制面板之一,很多用户的网站都是基于宝塔面板搭建,今天简单介绍下宝塔面板是如何安装WordPress的,方便新手用户快速部署。一、安装宝塔插件大部分使用宝塔面板的用户可能还不知
阿里云的ecs服务器(linux)安装宝塔
华为云服务器搭建宝塔Linux控制面板
新手使用阿里云esc服务器安装宝塔linux面板建站图文教程
购买完阿里云服务器后使用宝塔linux的搭建
【小白必看保姆级搭建个人网站】使用阿里云服务器与宝塔Linux快速建站
忘记宝塔密码,可以通过以下命令重置密码 cd /www/server/panel &amp;&amp; python tools.py panel testpasswd 如果提示多次登录失败,暂时禁止
阿里云服务器部署Django项目(Linux服务器、宝塔、纯新手)1.前言
宝塔快速部署Django项目1、宝塔快速部署Django项目1、软件商店搜索python,安装`python项目管理器`2、python项目管理器>项目管理>添加项目3、映射域名4、更改网站项目地址5、完成2、常见问题与解决方法1、宝塔快速部署Django项目1、软件商店搜索python,安装python
Python的语法十分简洁,简洁到只需要一行代码,即可输出意想不到的效果。一行代码到底有什么独特的魅力,下面一起来感受一下吧!1、画一个爱心作为一个Python程序员,自从接触Python就有种爱不释手的感觉,逐渐地被它的简洁高效的代码所吸引,所有我想用一行Python代码来画出一个心形向Python