专栏首页梦在深巷如何简单的防止网站被CC攻击

如何简单的防止网站被CC攻击

前言

CC攻击(Challenge Collapsar)CC攻击的本名叫做HTTP-flood,是一种专门针对于Web的应用层flood攻击,攻击者操纵网络上的肉鸡,对目标Web服务器进行海量http request攻击,造成对方服务器资源耗尽,一直到宕机崩溃。

本站情况

  • 今天晚上本站遭受到大量的CC攻击,峰值在3GB左右;持续了十几二十分钟!
  • 但是本站用了CDN,抗下了大量的数据请求;但是回源的数据达到17Mbps
  • 但是本站还是安全的抗下了这次CC的全部流量,并且服务器无任何波动.
  • 那么我们就谈谈本站是如何防御这场CC

攻击流量图

  • 攻击时常有十几分钟,CDN全部扛下来了但是部分流量回源到服务器!
  • 攻击源在广东,分析部分日志得出是一共2台服务器进行发包.
  • 防御过程如下

设置CDN防御CC

1.设置每秒QPS数量

2.带宽封顶配置

  • 由于CDN抗下大部分流量导致回源访问的链接不多日志少!

设置Nginx防御CC

  1. 设置worker_processes 8根据自己的机器设置多个进程!
  2. 设置worker_connections 5120根据自己的机器设置每个进程处理的连接数
  3. 使用ngx_http_limit_conn_module模块使用方法:官方文档
  4. 使用ngx_http_limit_req_module模块使用方法:官方文档
  5. 使用ngx_http_referer_module模块使用方法:官方文档
  6. 还有很多模块可以进行防止CC,不一一举例使用!

ngx_http_limit_conn_module模块的使用

  • 这个模块主要是限制连接数.
http {
    limit_conn_zone $ binary_remote_addr zone = addr:10m;
    server {
        location /admin/ {
             limit_conn addr 1;//设置只能一个IP连接
            }
        }
    }

  • 具体设置根据你的需求,我的设置比较严谨!详细设置访问nginx官网查看官方文档!

ngx_http_limit_req_module模块的使用

  • 这个模块主要是设置每秒的请求数.
    http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=80r/s;
    server {
        location ~* /handsome/usr/\.(js|jpg|json) {
             limit_req zone=one burst=5 nodelay;//设置超过的请求丢弃
            }
        }
    }
配置文件的部分讲解

$binary_remote_addr 远程地址. zone=one:10m 为one分配10m内存,用来储存连接. rate=80r/s 限制频率每秒80个请求. burst=5 允许超过频率设置的请求书不能超过5个,超过的就丢弃. nodelay 设置超过的请求不延时处理.

  • 详细解释参考nginx官方文档!
ngx_http_referer_module模块的使用
  • referer模块是防止referer头字段中没有请求来源则丢弃该请求
    location ~* /handsome/usr/\.(js|jpg|png|css) 
    {
        valid_referers none blocked *.i7dom.cn server_names ~\.badu\. ~\.google\.;
        if ($invalid_referer)
        {
            return 403;
        }
    }
  • 防止不是从主站或者百度,google的链接则之家返回404;

防止数据库耗尽资源

  • 本站之所以能再二十多万的链接中存活下来是用了nosql;
  • 在CC发起到结束可以正常访问,无任何延迟;
  • 如果资源允许的情况下可以用redis或者memcache

本站采用了redis防止读库导致资源耗尽!

攻击前后的使用率

  • 以上是服务器的使用率,波动不大!

攻击前后CDN的情况

攻击源分析

  • 我下载了CDN的日子分析分析得到结果如下!

第一波CC攻击持续6分钟

第二波CC工具持续二十分钟,流量虽然低但是触发了我设置的阈值后全部返回404页面 而后我分析出攻击的主页没有在redis设置缓存,虽然CDN全部扛下了流量但是一部分回源到主机上;但是波动不大,第一次回源触发了nginx设置的阈值全部丢弃该IP的所有数据包. 紧接着CDN线路负载挂了,腾讯云关闭了我域名的线路进行被动防御! 至此,防御结束;服务器波动可以忽略!CDN流量卒,插件在读redis的缓存时负载过高出现debug信息!

得出结论

  1. 减少静态资源的读取
  2. 限制CDN的流量阈值
  3. 限制CDN的IP访问阈值
  4. 减少回源次数,减少服务端的读库数量;使用缓存进行防御CC!
  5. 单IP访问数量超过200QPS时可以写策略进行跳转到其他网站;比如阿里,腾讯,或者政府网站,尽量不要跳转到zf网站不要搞事情!
  6. 情况允许的情况下可以接入某盾,某宝进行防御;但是价钱嘛!略高
  7. 以上抗不下来就硬抗吧!

版权属于:龙之介大人 本文链接:https://i7dom.cn/98/2019/27/cdn-cc-1.html 本站所有原创文章采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 您可以自由的转载和修改,但请务必注明文章来源和作者署名并说明文章非原创且不可用于商业目的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 腾讯云CDN报564错误码解决方案

    小柒吃地瓜
  • SELinux的基本使用

    从进入了 CentOS 5.x 之后的 CentOS 版本中 (当然包括 CentOS 7),SELinux 已经是个非常完备的核心模块了!尤其 CentOS ...

    小柒吃地瓜
  • LVS内核原理与LVS十种调度算法

    LVS,全称Linux Virtual Server,是国人章文嵩发起的一个开源项目。 在社区具有很大的热度,是一个基于四层、具有强大性能的反向代理服务器。 早...

    小柒吃地瓜
  • Nginx在CDN加速之后,获取用户真实IP做并发访问限制的方法

    老七Linux
  • android实现微信朋友圈发布动态功能

    本文实例为大家分享了android仿微信朋友圈发布动态功能的具体代码,供大家参考,具体内容如下

    砸漏
  • linux网络编程之TCP/IP基础(一):TCP/IP协议栈与数据报封装

    一、ISO/OSI参考模型 OSI(open system interconnection)开放系统互联模型是由ISO(International Organi...

    s1mba
  • 宋宝华:一个简单的python脚本看透Linux程序对库的依赖

    在下今天写了一个小小的python程序,可以在完全不看源代码的情况下,分析a如果调用b.so的时候,会引用b.so的哪些函数,它的用法如下:

    Linux阅码场
  • iOS网络编程之一——iOS网络框架简介 原

            通过网络,一款应用才能够内容丰富,才能够完成用户操作与后台数据的交互。网络编程是移动应用或游戏开发开发中不可缺少的技术。iOS原生的网络框架也十...

    珲少
  • TCP/IP协议

    TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使...

    用户2909867
  • 10篇精选报告(最新):大起大落,保持冷静!

    最近在全球股市波动的情况下,想必大家的心情是不稳定的,越是这样,我们越要有一个良好的心态,下面是公众号最近看到的几篇比较有意思的报告,分享给各位读者,希望你冷静...

    量化投资与机器学习微信公众号

扫码关注云+社区

领取腾讯云代金券