前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何简单的防止网站被CC攻击

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

作者头像
小柒吃地瓜
发布2020-04-21 16:00:25
2.5K0
发布2020-04-21 16:00:25
举报
文章被收录于专栏:梦在深巷

前言

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模块的使用
  • 这个模块主要是限制连接数.
代码语言:javascript
复制
http {
    limit_conn_zone $ binary_remote_addr zone = addr:10m;
    server {
        location /admin/ {
             limit_conn addr 1;//设置只能一个IP连接
            }
        }
    }

  • 具体设置根据你的需求,我的设置比较严谨!详细设置访问nginx官网查看官方文档!
ngx_http_limit_req_module模块的使用
  • 这个模块主要是设置每秒的请求数.
代码语言:javascript
复制
    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头字段中没有请求来源则丢弃该请求
代码语言:javascript
复制
    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://cloud.tencent.com/developer/article/1618131

本站所有原创文章采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 您可以自由的转载和修改,但请务必注明文章来源和作者署名并说明文章非原创且不可用于商业目的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019 年 01 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 本站情况
  • 攻击流量图
  • 设置CDN防御CC
  • 设置Nginx防御CC
    • ngx_http_limit_conn_module模块的使用
      • ngx_http_limit_req_module模块的使用
        • 配置文件的部分讲解
        • ngx_http_referer_module模块的使用
    • 防止数据库耗尽资源
    • 攻击前后的使用率
    • 攻击前后CDN的情况
    • 攻击源分析
    • 得出结论
    相关产品与服务
    内容分发网络 CDN
    内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档