如何提升防御 CC 攻击的能力 什么是 CC 攻击? CC 攻击是 D | |
如何提升防御 CC 攻击的能力 什么是 CC 攻击? CC 攻击是 DDoS 攻击的一种类型,使用代理服务器向受害服务器发送大量貌似合法的请求(通常使用 HTTP GET)。CC(Challenge Collapsar,挑战黑洞)根据其工具命名,攻击者创造性地使用代理机制,利用众多广泛可用的免费代理服务器发动 DDoS 攻击。许多免费代理服务器支持匿名模式,这使追踪变得非常困难。 虽然用 limit_req_module 可以在一定程度上的防止 CC 攻击,但是有误杀概率;国内宽带用户的 IP 地址已经大量内网化,几百人共享一个 IP 的可能性是很大的。 做基于 IP 的频率限制,误杀的概率确实非常大。在国内,一个小区、一个公司经常会遇到共用 IP 的情况,而移动网络共用基站的设备更是容易出现相同的公网 IP。 墨菲定律第一条就是:任何事物都没有表面看起来那么简单。何况这个看起来一点都不简单,怎么可能只用 IP 频率限制这一种手段呢?对于 CC 攻击,其防御必须采用多种方法,而这些方法本质上也是在提高服务器的并发能力。 1. 服务器垂直扩展和水平扩容 资金允许的情况下,这是最简单的一种方法,本质上讲,这个方法并不是针对 CC 攻击的,而是提升服务本身处理并发的能力,但确实提升了对 CC 攻击的承载能力。 垂直扩展:是指增加每台服务器的硬件能力,如升级 CPU,增加内存,升级 SSD 固态硬盘等。 水平扩容:是指通过增加提供服务的服务器来提升承载力。 上述扩展和扩容可以在服务的各个层级进行,包括:应用服务器、数据库服务器、缓存服务器等等。 2. 数据缓存(内存级别,不要用文件) 对于服务中具备高度共性,多用户可重用,或单用户多次可重用的数据,一旦从数据库中检索出,或通过计算得出后,最好将其放在缓存中,后续请求均可直接从缓存中取得数据,减轻数据库的检索压力和应用服务器的计算压力,并且能够快速返回结果并释放进程,从而也能缓解服务器的内存压力。 需要注意的是,缓存不要使用文件形式,可以使用 redis、memcached 等基于内存的 no sql 缓存服务,并且与应用服务器分离,单独部署在局域网内。局域网内的网络 IO 肯定比起磁盘 IO 要高。当然,为了不使局域网带宽成为瓶颈,千兆网络也是有必要的。 3. 页面静态化 与数据缓存一样,页面数据本质上也属于数据,常见的手段是生成静态化的 html 页面文件,利用客户端浏览器的缓存功能或者服务端的缓存服务,以及 CDN 节点的缓冲服务,均可以降低服务器端的数据检索和计算压力,快速相应结果并释放连接进程。 4. 用户级别的调用频率限制 不管服务是有登陆态还是没登陆态,基于 session 等方式都可以为客户端分配唯一的识别 ID(后称作 SID),服务端可以将 SID 存到缓存中。当客户端请求服务时,如果没有带 SID(cookie 中或请求参数中等),则由服务端快速分配一个并返回。可以的话,本次请求可以不返回数据,或者将分配 SID 独立出业务服务。当客户端请求时带了合法 SID(即 SID 能在服务端缓存中匹配到),便可以依据 SID 对客户端进行频率限制。而对于 SID 非法的请求,则直接拒绝服务。 相比根据 IP 进行的频率限制,根据 SID 的频率限制更加精准可控,最大程度的避免误杀的情况。 5. IP 限制 最后,IP 限制依然可以结合上述规则一起使用,但是可以将其前置到外层的防火墙或负载均衡器上去做,并且可以调大限制的阈值(结合历史统计数量,预测一个极端的访问量阈值,在服务器可承受的范围内,尽量避免误伤),防止恶意访问穿透到应用服务器上,造成应用服务器压力。 TG:@slinhaotian QQ:10369392 微信:slinhaotian | |
相关链接: (无) 面向省市区: 全国 面向市区县: 全部 最后更新: 2022-08-23 10:59:19 | 发 布 者: 浩浩 联系电话: (无) 电子邮箱: (无) 浏览次数: 77 |