扫描二维码关注官方公众号

58 评论

0 收藏

分享

[图文教程] 宝塔BT面板PHP防CC

 

马上注册,结交更多好友,享用更多功能,让你轻松玩转无忧吧。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
宝塔BT面板php防CC

950689707.png

什么是CC攻击

肯定有很多小伙伴还不知道什么是CC攻击下面小编来给大家粗略的介绍下

攻击者借助代理服务器生成指向受害主机的“合法”请求,实现DDOS和伪装就叫:CC(Challe ngeCollapsar)。
大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页 面的速度会比较慢,访问的人越多,论坛的页面越多,数据库压力就越大,被访问的频率也越高,占用的系统资源也就相当可观。

一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是博客论坛等PHP程序就不一样了,Nginx、Apache需要运行PHP程序对.php文件进行解析。再由php到数据库中读取相关展示内容以及判断是否有读帖子的权限,显示出来——这里至少访问了2次数据库,如果数据库的数据容量有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU和IO资源?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。

CC就是充分利用了这个特点,模拟多个用户(多少 线程/代理IP 就是多少用户)不停的进行访问(访问那些需要大量读数据操作,就是需要大量的时间)

这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。
比如Apache Bench(ab)

如何确定你是否受到了CC攻击
1.网站访问缓慢,报503错误(nginx拒绝连接),502错误(php挂了)
2.服务器爆满 CPU 100%;
3.打不开宝塔或ssh无法连接

出现以上情况,基本上可以确诊是被CC攻击了。

宝塔BT环境优化原理

现在有很多使用宝塔免费Web防火墙来防御CC的,虽然我还没研究过它是啥原理,但是讲真它的用处真的不大,起码我自己实测用多IP压力测试时效果是不理想的。
下面将以Nginx反代PHP为例阐述本问的实现原理
1.Nnginx优化:Nginx没有过多的优化,一般Nginx都死被php拖死的。简称:扶不起来
2.宝塔中Nginx的过滤器测试效果并不理想,如果机器配置高且代理IP不多,也是可以开启“防CC攻击模块”并设置为频率100,周期60。也可以在一定程度上防止一些恶意访问(比如小学生找不到代理,就几个代理),如果打算满足一下小学生的获胜欲,请直接关掉它。
3.PHP优化:服务器宕机基本都是PHP进程太多导致的了。Nginx是个传菜的,PHP才是真正花时间吃饭的。

767532824.png

1.如图:简单理解,最少15个人在厂里,最多50个人同时干活,如果有35个人以上没干活就开除掉。
2.根据CPU核数设定起始进程数和最小空闲,这样可以发挥正常状态的最大优势,加快处理速度 设置为15*核数 ,即1核15进程,双核30进程。
3.根据内存设置最大进程,防止出现内存爆炸,导致fpm挂起或者MySQL等其他服务挂了。设置为1G*(40-50),即1G内存40-50,2G内存80-100。
4.设置上面两项可以更有效地使用服务器。
5.如上设置并不能防止CC攻击,可以尝试下面提到的方案。
优化方案

本方案采用redis+验证码+策略防CC
采用redis高性能数据库,合理的访问策略验证并在超大攻击时开启验证码访问,让网站远离CC
1.安装redis,在宝塔软件管理找到,安装;
2.安装php redis扩展,你用哪个php就安装哪个php的扩展,别装错了;
3.在网站入口,如Wordpress的index.php 头部加入如下代码:
4.如有后台请注意,不仅index.php需要添加,在例如admin的相关登录文件中也要添加,防止CC攻击者利用后台登陆页面进行攻击

[PHP] 纯文本查看 复制代码
#CC攻击停止后会尽快解除验证码,回到正常状态
#防CC配置
$IPmax = 30; #开启验证码条件 值>=php最大进程数,适当设置更大会降低验证码触发条件,但会增大502错误几率(php挂起)
$IPfor = 60; #周期 这个值基本不用动
$IPban = 60; #扔入黑名单 60秒内访问超过60次即拉黑IP
$banTime = 3600*24; #黑名单时长 扔小黑屋时长,这种代理IP放一天感觉都少了 = =!
$ip = ip();
#连接本地的 Redis 服务
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
#拦截黑名单
if($redis->exists($ip.'ban')){
    exit('您被关进了小黑屋,么么哒!如有疑问,请联系站长');
}
#扔黑名单检测
if($redis->get($ip.'ok') >= $IPban){
    $redis->setex($ip.'ban', $banTime, '1');
}
if($redis->exists($ip.'ok')){
    $redis->incrby($ip.'ok',1); #记录IP 自增1
}else{
    $redis->setex($ip.'ok',$IPfor,1);
}
#按需开启防CC 小黑屋IP不会触发该条件,所以当一段时间以后就会解除验证码。除非攻击者换一批代理继续攻击。如此往复
if(count($redis->keys("*ok")) > $IPmax){
    #验证
    if($_COOKIE['key'] == ''){
        if($_GET['cc']){
            $key = md5($ip.$_GET['cc']);
            setcookie("key",$key);
        }
    }
    #拦截代码
    if($_COOKIE['key'] && $_COOKIE['cc'] && $_COOKIE['key'] == md5($ip.$_COOKIE['cc'])){
        #通过
    }else{
        if($_GET['cc']){
            $key = md5($ip.$_GET['cc']);
            setcookie("key",$key);
        }else{
            $cc = rand(1000,9999);
            setcookie("cc",$cc);
            #这里只是简单的构造了一下验证码,有能力可以自己更改的更安全和完美。
            echo '<!DOCTYPE html>
            <html>
            <body>
            <form action="">请输入:'.$cc.' :<input type="text" name="cc" value=""><input type="submit" value="继续访问"></form> 
            <p>访问异常,请输入验证码。</p>
            </body>
            </html>';
        }
        exit();
    }
}
function ip() {
    if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
        $ip = getenv('HTTP_CLIENT_IP');
    } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
        $ip = getenv('REMOTE_ADDR');
    } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    $res =  preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
    return $res;
}

整个教程就完啦~,赶快找个CC软件C自己一波试下吧~



捷云鲸技术社区(bbs.jieyunjing.com)免责声明:
使用本社区服务即视为同意本声明全部条款。
1. 本社区所有技术、工具及内容仅限**学习研究**使用,旨在提升安全技术水平,严禁用于非法、商业及其他不良用途,违规后果由使用者自行承担。
2. 社区内容及资源来源于网络,仅代表发布者个人观点,与本社区无关,相关法律责任由发布者自负。
3. 资源版权归原作者所有,用户下载后须在**24小时内删除**,版权争议与本社区无关。
4. 禁止任何破坏社区正常运营的行为,违规将视情节处理,社区保留追责权利。
5. 本社区坚决支持正版,如涉及侵权,请通过站长邮箱或QQ联系删除。
6. 本社区对本声明拥有最终解释权,可适时修改并公示生效。
站长邮箱:jieyunjingvip@qq.com
站长QQ:4040068
捷云鲸社区bbs.jieyunjing.com
回复

举报 使用道具

全部回复 (58)
查看全部
沙发!沙发!
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

学习了,谢谢分享、、、
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

感谢分享
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

谢谢楼主
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

帮你顶下哈
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

帮你顶下哈
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

6666666
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

不错不错,楼主您辛苦了。。。
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

66666666666666666
捷云鲸社区bbs.jieyunjing.com

举报 回复 使用道具

admin 实名认证
管理员
主题 1380
回复 75
粉丝 1

灌水之王 突出贡献 优秀版主 荣誉管理 论坛元老 沙发王 源码大师 在线王 终身成就 机器王 知识库 土豪 活跃会员 最佳新人 热心会员