头像

司马鹤轩

所谓公平!!!

《CCKiller:Linux 轻量级 CC 攻击防御工具,秒级检查、自动拉黑和释放》

 1年前  •   杂谈  •     •   126  •   0

转载自张戈博客

功能申明

  • 分享之前我必须先申明一下,众所周知,DDoS攻击指的是分布式拒绝服务。而CC攻击只是DDoS攻击的一种,本文所阐述的CC攻击,指的是每个IP都以高并发请求攻击,而非分布式海量IP的低并发DDoS攻击!
  • 对于个人低配服务器,除了使用CDN来防护,至少我是没有想到如何抵挡海量IP攻击的!因为每个IP都用正常的UA来请求,而且每个IP的低并发请求和正常用户请求一样,并不会触发防御阈值,同时来1000个,甚至上万个,个人低配服务器的带宽在第一时间就会被占满,无法继续提供服务!
  • 所以,如果你的网站正受到海量IP的低并发DDoS攻击,那么本文分享的CCKiller就无能为力了。赶紧去开启CDN来拓展带宽吧!

功能介绍

  • 通过以上申明,也就大致给CCKiller一个定位:CCKiller是用于个人低配服务器的轻量级CC攻击防御,可以抵挡单个IP产生的高并发攻击。
  • 目前设计的功能特性如下:
    ① 秒级检查

很多人写的防御脚本都是使用了Linux系统的计划任务crontab来定时检查的。而crontab的最细颗粒是1分钟,也就是说脚本最快也只能1分钟检查一次。对于一些强迫症来说就会很不爽。
所以,我还是按照以前分享的思路,利用while循环实现秒级检查,实现更细的颗粒。当然,CCKiller更是被我写成了系统服务,更加灵活稳定。
②拉黑时长
CCKiller可以设置拉黑时长,默认为10分钟。当发现有恶意请求时,会自动拉黑目标IP,并在拉黑时长结束后自动释放,这个功能算是对我之前写的脚本的一个大的改进。
③ 并发阈值
CCKiller 可以设定单个IP的最高请求数,如果某个IP同时请求数超过了设定的阈值,就会被暂时拉黑一段时间。
④ 邮件发送
这个功能没啥好说的,意义并不大。而且发送成功率和服务器的环境也有很大关系。
⑤ 并发显示
安装后,直接运行cckiller会列出当前系统的请求排行,可以清晰的看到当前请求IP和并发数。使用-s参数还可以继续定制需求,比如 cckiller -s 10 就能显示当前并发数排行前10名的IP。
⑥ 手动拉黑
支持手动拉黑,执行后会立即检查,将并发请求超过n的IP拉黑一段时间,比如 cckiller -k 100 就会将目前超过100个请求的IP拉黑一段时间,如果没有则不会执行任何拉黑操作。

工具安装

① 在线安装

  • 由于我可能经常会更新一些功能,或修复一些BUG,所以仅提供在线安装,以保证脚本是最新的。
    安装非常简单,执行如下命令就能进入配置步骤了:

② 工具配置

  • 因为每个服务器的情况可能不一样,所以有一个自定义配置的过程。
  • 执行上述安装命令后,将会进入自选配置部分,如图:CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放
  • 提示否使用脚本默认配置,如果选择是(y),那么显示默认配置,并询问是否继续:CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放
  • 默认配置如下:

  • 如果不符合你的需求,你可以使用 ctrl + c 组合键终止脚本,或者先继续安装,因为工具设计了配置修改的功能,所以无需着急。
    如果不使用默认配置(n),则会要你输入参数来自定义配置:CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放

如图,我将参数依次定义为每10秒进行检查,拉黑时长为300秒,发件人设置为博客邮箱,并发限制设置为60,回车后会弹出一个提示,让你检查,如果没问题你直接回车就会安装并启动:CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放

③服务控制

  • 安装后,会将cckiller注册成系统服务,这时你就可以使用service来控制cckiller了。
    使用标准的service定义,支持 start | stop | restart | status 四个参数。所以,你可以使用

service cckiller stop来停止cckiller,也可以使用service cckiller status来查看状态。

④集成命令

  • 成功安装后,系统还会多出一个cckiller的命令,这个命令现有功能如下:
  1. -h可以调出帮助信息:

  • 我蹩脚的英文也能凑合解释一下功能了吧~

⑤ 文件结构

  • 如上图所示,脚本安装目录为/usr/local/cckiller,其结构如下:

  • 很简单也比较规范的的结构,当然,后续功能如果越来越多,此结构可能会有所更新,这是后话。
    如果你熟悉vim的话,只要编辑ck.conf就可以定义工具参数了:

  • 如果不熟悉也没关系。你还可以执行 ./install.sh -c 进行工具初始化,重新设定所有参数,过程和首次安装时一致,这里就不赘述了。

⑥ 白名单

  • 工具安装时会默认将系统所有IP都加入白名单,避免自己把自己给拉黑的尴尬。如果你还有其他要加白的IP,可以将IP加入到cckiller安装目录下的ignore.ip.list文件中,每行一个。
  • Ps:目前白名单还不支持IP段,敬请期待后续更新。

⑦ 卸载工具

  • 有心的朋友可能注意到了install.sh是可以带参数的。我写代码的时候已经设计了几个常用的安装卸载功能,具体如下:

  • 因此,我们可以使用 ./install.sh -U 卸载CCKiller

攻防测试

  • 成功安装并启用CCKiller之后,我们可以使用压力测试工具来测试拉黑和释放效果,比如webbench 或 ab等。
  • 假如CCKiller设定的并发限制为100,检查间隔为10s,使用webbench如下测试:

  • 启动测试后,你可以立即去服务器上查看防火墙:

  • 多刷几下,就可以看到webbench所在服务器IP已经在DROP规则中了。
  • 确定已被拉黑之后,你等个10分钟再来看防火墙,可以发现webbench所在服务器IP已经消失了,成功释放!
  • Ps:如果邮件发送功能无误,那么应该也收到了工具发来的告警邮件。

更多说明

① 配置并发限制

  • CCKiller配置最大连接数限制时,建议根据单个网页产生的并发数来判断。

  • 容错:
    从A和B来看,CCKiller其实是有一个盲点的,那就是如果用户IP是某个公司的统一出口,也就是代理上网IP,那么工具就容易误杀无辜了。所以,除了A和B,你还得考虑你网站的受众人群类型。比如,我就一个个人博客,同一时刻被一个公司的多名同时多窗口拖拽访问,这种情况也不多吧?如果可能存在这种受众人群,那么这个并发限制可以设置大一些,避免错杀无辜。当然,拉黑也就10分钟而已,也不至于“一失足成千古恨”。。。
  • 当然,不管哪种情况,并发限制都可以比预估设置高那么一些,这个自行斟酌吧!

② 不足与完善

  • CCKiller是我最近利用闲暇时间,匆忙之作,难免会有各种问题。也没时间进行测试和完善。不过目前还是有数位站长在使用,暂未反馈异常。当然,我分享的是在线安装方式,也是为后续的更新提供方便。不过对比我以前写的防御脚本,CCKiller算是有了长足的进步了,很简单的安装,更强大的功能!

版权声明

上一篇:
下一篇:

 评论


 已有0条评论

    还没有任何评论,你来说两句吧!