为 discuz 论坛智能开启 CC 对抗

discuz 论坛的 config_global.php 文件中有一个$_config['security']['attackevasive'] 配置,打开的时候可以对抗部分CC攻击,主要对抗策略是: 0不启用 1 cookie刷新限制 2代理服务器访问限制 4页面二次请求 8验证问答 。

但是在没有收到攻击的时候如果默认开启这个对抗策略,一方面用户体验会受损,另一方面ucenter和discuz的通讯会被阻断,很多管理操作都通知不到discuz。那有没有办法只在收到攻击的时候开启这个策略,在攻击结束的时候关闭掉这个策略呢?我们可以写这样一个脚本:

cat mon_load.sh

#!/bin/bash
#配置文件路径
config_path="在这里填写你自己的discuz路径/config/config_global.php"
#日志文件路径
log_path="在这里填写你自己的日志路径/anti_CC.log"
if [ ! -f $log_path ]; then touch $log_path; fi
#配置项匹配模式
patten="\$_config\['security'\]\['attackevasive'\]\s*=\s*'"
#检查当前对抗是否打开,并记录到$mon_stat变量中
if grep -q $patten"0'\s*;" $config_path; then mon_stat="stop";else mon_stat="start"; fi

#如果1分钟负载大于1立刻开启,否则如果5分钟负载回落到1以下则停止
action=`uptime | awk '{print ($(NF-2)>1?"start":$(NF-1)<1?"stop":"keep")}'`

if [ $action = "start" -a "$mon_stat" = "stop" ] ; then
	#1分钟负载过高,打开对抗
	sed -i "s/\($patten\)[0-9|]\+'\s*;/\14';/" $config_path
	date +%F\ %H:%M:%S\ start >> $log_path
elif [ $action = "stop" -a "$mon_stat" = "start" ] ; then
	#5分钟平均负载回落,关闭对抗
	sed -i "s/\($patten\)[0-9|]\+'\s*;/\10';/" $config_path
	date +%F\ %H:%M:%S\ stop >> $log_path
fi

这样在系统负载过高的时候就可以自动打开对抗策略,在系统负载降低的时候又可以及时关闭对抗策略降低影响了。最后可以把上面的脚本加入到crontab中定时运行监测:

crontab -e

*/1 * * * * /你的脚本路径/mon_load.sh > /dev/null 2>&1 &

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏源码之家

Linux VPS下载百度网盘资源的方法

4852
来自专栏张善友的专栏

memcached的最新状态

memcached 是由 Danga Interactive 开发并使用 BSD 许可的一种通用的分布式内存缓存系统。最新的稳定版本是memcached 1.4...

1769
来自专栏机器之心

教程 | 如何用Docker成为更高效的数据科学家?

3227
来自专栏代码小睿

让视频压制更简单

  一直待在一个美剧字幕组做后期压制工作,也经常被问到“要怎么压制?”这种即使用一二十句话都无法说清的问题。

490
来自专栏运维一切

nginx temp缓存导致的诡异问题描述 原

站点结构是nginx+fpm 所有的配置检查都没有问题 但是站点去下载文件的时候只能传递一点点数据,剩余的文件无法加载,无法读取,无法下载,这种问题多么的诡异 ...

592
来自专栏北京马哥教育

git用网盘做版本仓库,实现异地同步[待验证]

git在不用github这种远程仓库时,如何实现异地同步呢? 下班前提交代码,回家后同步代码继续开发并提交,第二天来公司继续…… 这里做个实验:用网盘的目录同步...

2774
来自专栏张戈的专栏

解决WordPress多说评论无法同步(个例)

这个问题其实已经解决很久了,但是一直忘了来记录下,前几天还帮 MOREOPEN 解决了相同的问题,感觉虽然是个案,但可能还是有朋友会遇到类似的问题。所以,就简单...

2874
来自专栏前端儿

Websocket 概述

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。

1344
来自专栏张善友的专栏

.NET 应用架构电子书中文版

《.NET 微服务:容器化 .NET 应用架构指南》 本书主要介绍了基于容器和微服务的应用架构和设计原则,以及基于 .NET Core 和 Docker 容器的...

3976
来自专栏java思维导图

99%的人都理解错了HTTP中GET与POST的区别

1 GET与POST GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。 最直观的区别就是GET把参数包含在URL...

3465

扫码关注云+社区