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 &
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。