龙之介大人

如何简单的防止网站被CC攻击
前言CC攻击(Challenge Collapsar)CC攻击的本名叫做HTTP-flood,是一种专门针对于We...
扫描右侧二维码阅读全文
27
2019/01

如何简单的防止网站被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. 以上抗不下来就硬抗吧!
最后修改:2019 年 02 月 19 日 01 : 06 PM

2 条评论

  1. ohmyga

    羡慕会被CC的,像我这种日0IP的连被CC的份都没有╮(╯▽╰)╭

    1. 崔先森
      @ohmyga

      就是cc看起来好牛逼,日访都没超过三位数

发表评论