前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为 discuz 论坛智能开启 CC 对抗

为 discuz 论坛智能开启 CC 对抗

原创
作者头像
黄希彤
修改2017-08-07 15:30:15
1.1K0
修改2017-08-07 15:30:15
举报
文章被收录于专栏:黄希彤的专栏黄希彤的专栏

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

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

cat mon_load.sh

代码语言:txt
复制
#!/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

代码语言:txt
复制
*/1 * * * * /你的脚本路径/mon_load.sh > /dev/null 2>&1 &

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档