为 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 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Cassandra运行多节点群集数据库

Apache Cassandra是一个高度可扩展的开源数据库系统,在多节点设置上实现了出色的性能。

842
来自专栏Web 开发

PushPlugin-为iOS的Hybird App提供APNS服务

APNS是iOS生态下面的推送机制。其原理是APP启动的时候,向苹果注册,并获得一个唯一token,然后不论app是否继续在运行,都可以通过调用苹果的APNS服...

890
来自专栏james大数据架构

如何开发自己的搜索帝国之Elasticsearch

搜索引擎是什么?   搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示...

2067
来自专栏云计算D1net

使用Docker时应该避免这10 件事…

容器可以解决很多问题,并且具有诸多优势,当你投身其中时便会发现其奥妙所在。 第一:容器是不可变的 - 操作系统,库版本,配置,文件夹和应用程序都包装在容器内。 ...

3357
来自专栏专注数据中心高性能网络技术研发

大量远程ssh连接请求--造成拒绝服务的问题

1.动机 最近跑实验需要大量(24个)并行进程连接到服务器上执行相同的命令来完成特定任务。 但是跑实验的时候会偶尔出现下面这种错误:   ssh_exchang...

3228
来自专栏我的博客

Nginx搭建负载均衡

Nginx负载均衡的分发方式有4种: 1.轮询,默认采取此方式,Nginx会按照请求时间的先后顺序进行轮询分发,若某台Web Server宕机,Nginx自动将...

3345
来自专栏JAVA同学会

JMeter分布式测试

一旦你确定系统无误,就可以设定远程测试了。这篇教程建议你在所有的系统上安装了jmeter。这种方式,jmeter将在主控制器工作,在多个子系统上执行测试。

1032
来自专栏AhDung

【手记】磕死移动硬盘的损坏分区

- 插上后在【我的电脑】里要好一会才出现该分区(这是win2k8r2,XP下直接不会出现)

1112
来自专栏我是攻城师

CDH-Hadoop2.6+ Apache Pig0.15安装记录

3375
来自专栏Java Edge

Spring Schedule + Redission构建分布式任务调度

所用源码已上传 https://github.com/Wasabi1234/mmall4.0 介绍 ? ? 官网 ? ? ? 集成 ? ? ? image.p...

3793

扫码关注云+社区