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

  • A+
所属分类:软件资源

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

功能申明

分享之前我必须先申明一下,众所周知,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 的命令,这个命令现有功能如下:

我蹩脚的英文也能凑合解释一下功能了吧~
-k 是拉黑功能,需要在后面带上你想拉黑的并发数,比如 cckiller -k 100 就会拉黑当前请求数大于100的IP一段时间(和拉黑时长一致)
-s 是显示并发排名,也需要在后面带上数字,比如 cckiller -s 10 就能显示当前并发数排行前10名的IP。
⑤ 文件结构
如上图所示,脚本安装目录为 / usr/local/cckiller,其结构如下:

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

如果不熟悉也没关系。你还可以执行 ./install.sh -c 进行工具初始化,重新设定所有参数,过程和首次安装时一致,这里就不赘述了。
⑥ 白名单
工具安装时会默认将系统所有 IP 都加入白名单,避免自己把自己给拉黑的尴尬。如果你还有其他要加白的 IP,可以将 IP 加入到 cckiller 安装目录下的 ignore.ip.list 文件中,每行一个。
Ps:目前白名单还不支持 IP 段,敬请期待后续更新。
⑦ 卸载工具
有心的朋友可能注意到了 install.sh 是可以带参数的。我写代码的时候已经设计了几个常用的安装卸载功能,具体如下:
#直接执行./install.sh 将会显示如下帮助信息

其中:

-u 参数用来升级工具,不过目前由于没时间还没写,所以不可用(Ver 1.0.2已支持在线更新)
-i 参数用来安装工具,如果已安装则会提示并终止
-c 参数用来配置工具,方便安装后随时修改工具配置
-U 参数用来卸载工具,注意是大写哦!
因此,我们可以使用 ./install.sh -U 卸载 CCKiller
攻防测试

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

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

① 配置并发限制
CCKiller 配置最大连接数限制时,建议根据单个网页产生的并发数来判断。
情况A:
你网站做了动静分离,那么静态的请求就到另一个域名了(假设静态资源托管在另一台服务器或是CDN),单个IP请求一个页面可能就只会产生若干并发(假设5个),我们假设某个用户很猛,他喜欢快速拖拽打开你网站的多个网页,比如同时打开10个,那么正常用户的正常最大并发你也可以基本确定了吧?即并发限制:10x5=50。如果有人同时刷新你几十个页面,要说没恶意你也不相信吧?

情况B:
如果没有做动静分离,那么一个页面产生的并发可能就比较多了,每个css、js、图片都会产生一次请求。所以,在这种情况下就需要稍微计算一下你网站单个页面产生的并发请求,比如一个单页面会产生30个请求,那么你也需要考虑用户可能会连续拖拽多个页面的情况,假设我允许用户可以同时刷新10页面,那么并发限制就可以设置为300了,依此类推。
容错:
从 A 和 B 来看,CCKiller 其实是有一个盲点的,那就是如果用户 IP 是某个公司的统一出口,也就是代理上网 IP,那么工具就容易误杀无辜了。所以,除了 A 和 B,你还得考虑你网站的受众人群类型。比如,我就一个个人博客,同一时刻被一个公司的多名同时多窗口拖拽访问,这种情况也不多吧?如果可能存在这种受众人群,那么这个并发限制可以设置大一些,避免错杀无辜。当然,拉黑也就 10 分钟而已,也不至于 “一失足成千古恨”。。。
当然,不管哪种情况,并发限制都可以比预估设置高那么一些,这个自行斟酌吧!
② 不足与完善
CCKiller 是我最近利用闲暇时间,匆忙之作,难免会有各种问题。也没时间进行测试和完善。不过目前还是有数位站长在使用,暂未反馈异常。当然,我分享的是在线安装方式,也是为后续的更新提供方便。不过对比我以前写的防御脚本,CCKiller 算是有了长足的进步了,很简单的安装,更强大的功能!

weinxin
关注微信
关注网络安全,黑客技术,黑客教程,黑客文章,黑客博客,web安全,网站漏洞,网络安全,网络安全技术,网络安全知识,网络安全
Desperate Struggle

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: