洛杉矶MC机房 高速低价18元起

尊云,给你尊贵体验!

使用CloudFlare+Fail2ban,实现入门级CC防御

提示:如果官网是英文页面,建议使用谷歌浏览器能同步翻译页面。点击下载【谷歌浏览器最新绿色便携版】
注意:部分文章发布时间较长,可能存在未知因素,购买时建议在本站搜索商家名称,先充分了解商家动态。
交流:唯一投稿QQ80059284、唯一投稿邮箱:[email protected]、网友交流QQ群号640669696。

Fail2ban的工作原理很简单:读取日志,使用正则表达式匹配IP地址,只要在规定时间内达到预先设置的访问次数,就会执行ban action。也可以设置在封禁一段时间之后,自动解除封禁。总之这是一款比较灵活的软件。

当我们没有使用CloudFlare的时候,通常会把匹配到的ip地址提交给本机的iptables,而使用了CloudFlare之后,我们就可以直接用api把IP地址提交给CloudFlare的防火墙。

下面简单说一下方法:

第一步,配置Nginx。Nginx在编译的时候一定要添加“–with-http_realip_module”模块,并且在http块或server块中引入“set_real_ip_from、real_ip_header”,这样才能把真实的访客IP传递进来。否则,日志里记录到的都是CloudFlare自己的IP。具体方法请看这篇文章:https://support.cloudflare.com/h … %80%85%E7%9A%84-IP-

第二步,安装fail2ban。方法看这里:https://github.com/fail2ban/fail2ban,不要用apt/yum这些包管理器安装,包管理器中的版本太旧了,不支持ipv6。

第三步,配置fail2ban。

在“/etc/fail2ban”文件夹中新建“jail.local”文件,根据需要修改文件内容:
[http-get-dos]
enabled = true
filter = http-get-dos
action = cloudflare-api
logpath = /home/wwwlogs/example.com.log #Nginx日志位置
maxretry = 60 #最大尝试次数
findtime = 60 #设置多长时间(秒)内超过 maxretry 限制次数即被封锁
bantime = 120 #非法 IP 被屏蔽时间(秒),-1 代表永远封锁

在“/etc/fail2ban/action.d”文件夹中新建“cloudflare-api.conf”文件,修改文件最后三行:
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = curl -s -X POST "https://api.cloudflare.com/client/v4/zones//firewall/access_rules/rules" \
-H "X-Auth-Email: " \
-H "X-Auth-Key: " \
-H "Content-Type: application/json" \
--data '{"mode":"block","configuration":{"target":"ip","value":""},"notes":"CC Attack"}'
actionunban = curl -s -X DELETE "https://api.cloudflare.com/client/v4/zones//firewall/access_rules/rules/$( \
curl -s -X GET "https://api.cloudflare.com/client/v4/zones//firewall/access_rules/rules?page=1&per_page=1&mode=block&configuration.target=ip&configuration.value=&match=all" \
-H "X-Auth-Email: " \
-H "X-Auth-Key: " \
-H "Content-Type: application/json" | awk -F "[,:}]" '{for(i=1;i<=NF;i++){if($i~/'id'\042/){print $(i+1);}}}' | tr -d '"' | sed -e 's/^[ \t]*//' | head -n 1)" \
-H "X-Auth-Email: " \
-H "X-Auth-Key: " \
-H "Content-Type: application/json"
[Init]
name = default

#上面的内容不需要修改,只需要改下面三行
cfuser = CloudFlare注册邮箱
cftoken = API KEY
cfzoneid = CloudFlare Overview页的Zone ID

在“/etc/fail2ban/filter.d”文件夹中新建“http-get-dos.conf”文件:
[Definition]
failregex = -.*- .*HTTP/[123].* .* .*$
ignoreregex =

全部设置完成后,运行“fail2ban-client reload”重新加载配置文件。

说说这套系统的几个缺点:
第一就是CloudFlare的IP防火墙有延迟,新IP添加进去,大概半分钟左右才会生效。因此我建议在Nginx中设置limit_req_zone,防火墙生效之前能起到临时的防护。
第二,单位时间内的访问量一定要设置合理,网站第一次打开通常会加载大量静态文件,如果设置不合理,很可能会屏蔽正常访客。这里还有一个方法,就是在“http-get-dos.conf”文件中修改正则表达式,只匹配引起高负载的动态文件,这就需要各位自己发挥了。
第三,现在存在许多用户共用一个IP的情况,这就是为什么我说大站不要使用这个方法。当然,小博客无所谓啦。

转自:https://www.hostloc.com/thread-540324-1-1.html

About 贝壳

【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。

 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

本文链接:贝壳主机网 » 使用CloudFlare+Fail2ban,实现入门级CC防御

分享到: 生成海报
香港/美国/国内高速VPS
切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活