脚本编程

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

Jager · 9月28日 · 2015年 · · · 37493次已读

张戈博客很久以前分享过一个CC攻击的防御脚本,写得不怎么样,不过被51CTO意外转载了。博客从此走上了经常被人拿来练手的不归之路。

当然,还是有不少朋友在生产环境使用,并且会留言询问相关问题。根据这些问题的需求,我花了一些时间重新写了一个比较满意的轻量级CC攻击防御脚本,我给它取了一个比较形象的名字:CCKiller,译为CC终结者。

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

一、功能申明

分享之前我必须先申明一下,众所周知,DDoS攻击指的是分布式拒绝服务。而CC攻击只是DDoS攻击的一种,本文所阐述的CC攻击,指的是单个IP达到我们设定好的阈值并发请求,而非海量IP的低并发攻击!对于个人低配服务器,除了使用CDN来防护,至少我是没有想到如何抵挡海量IP攻击的!因为每个IP都模拟正常的用户浏览器请求,并不会触发防御阈值,同时来1000个,甚至上万个,个人低配服务器的带宽在第一时间就会被占满,就无法继续提供服务了。

当然,用脚本也是无法防御DDoS大流量攻击的,因为所有机房的防御带宽是有限的,当攻击的流量超过了机房的防御带宽,要么机房把你的服务器IP拉黑洞,要么就一起死。因此,如果你的服务器正遭受大流量攻击,比如几十G上百G,一般机房或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,所以仅提供在线安装,以保证脚本是最新的。

安装非常简单,执行如下命令就能进入配置步骤了:

curl -ko install.sh --connect-timeout 300 --retry 5 --retry-delay 3 https://zhang.ge/wp-content/uploads/files/cckiller/install.sh?ver=1.0.8 && sh install.sh -i

2017-12-13 补充:Ubuntu 系统请参考joviqiao的版本=>传送门

2017-09-06 补充:CCKiller 代码早已提交到Github,有网友问到,就来补充说明下 =>传送门

②、工具配置

因为每个服务器的情况可能不一样,所以有一个自定义配置的过程。

执行上述安装命令后,将会进入自选配置部分,如图:CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放

提示否使用脚本默认配置,如果选择是(y),那么显示默认配置,并询问是否继续:CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放

默认配置如下:

The Time interval : 20 s       #每20s检查一次系统请求情况

The Forbidden Time: 600 s  #拉黑时长设为10分钟

Adminstrator Email: [email protected]   #邮件对象设置为[email protected](即关闭邮件发送)

Connections Allow: 100      #单个IP并发限制为100

如果不符合你的需求,你可以使用 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的命令,这个命令现有功能如下:

cckiller -h可以调出帮助信息:

CCkiller version 1.0.0 Author: Jager <[email protected]>
Copyright ©2015 zhang.ge. All rights reserved. 
Usage: cckiller [OPTIONS] [N]
N : number of tcp/udp   connections (default 100)
OPTIONS:
-h | --help: Show       this help screen
-k | --kill: Block the offending ip making more than N connections
-s | --show: Show The TOP "N" Connections of System Current

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

-k 是拉黑功能,需要在后面带上你想拉黑的并发数,比如 cckiller -k 100 就会拉黑当前请求数大于100的IP一段时间(和拉黑时长一致)

-s 是显示并发排名,也需要在后面带上数字,比如 cckiller -s 10 就能显示当前并发数排行前10名的IP。

⑤、文件结构

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

cckiller/
├── cckiller       #主程序
├── log/           #日志目录(ver 1.0.1新增特性)
├── ck.conf        #配置文件
├── ignore.ip.list #白名单
└── install.sh     #安装和卸载脚本

0 directories, 5 files

很简单也比较规范的的结构,当然,后续功能如果越来越多,此结构可能会有所更新,这是后话。

如果你熟悉vim的话,只要编辑ck.conf就可以定义工具参数了:

##### Paths of the script and other files
PROGDIR="/usr/local/cckiller"
PROG="/usr/local/cckiller/cckiller"
LOGDIR="/usr/local/cckiller/log"
IGNORE_IP_LIST="/usr/local/cckiller/ignore.ip.list"
IPT="/sbin/iptables"
DKName=CCkiller
DKVer=1.0.5
##### SLEEP_TIME设定检查频率,单位为秒
SLEEP_TIME=10
##### NO_OF_CONNECTIONS设定并发限制
NO_OF_CONNECTIONS=60
##### EMAIL_TO设定邮件的发送对象(请改为自己的邮箱地址)
EMAIL_TO="[email protected]" 
##### BAN_PERIOD设定拉黑时长,单位为秒
BAN_PERIOD=300
##### 设置忽略端口,比如 21,2121,8000 (默认不忽略)
IGNORE_PORT=

##### 定义日志级别 INFO,DEBUG,WARNING,OFF (默认 INFO)
LOG_LEVEL=INFO

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

⑥、白名单

工具安装时会默认将系统所有IP都加入白名单,避免自己把自己给拉黑的尴尬。如果你还有其他要加白的IP,可以将IP加入到cckiller安装目录下的ignore.ip.list文件中,每行一个。

Ps:目前白名单还不支持IP段,敬请期待后续更新。

⑦、卸载工具

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

#直接执行./install.sh 将会显示如下帮助信息
###################################################################
#  CCkiller version 1.0.5 Author: Jager <[email protected]>          #
#  For more information please visit https://zhang.ge/5066.html #
#-----------------------------------------------------------------#
#  Copyright @2015 zhang.ge. All rights reserved.              #
###################################################################

Usage: configure.sh [OPTIONS]

OPTIONS:
-h | --help : Show help of CCkiller
-u | --update : update Check for CCkiller [not available now]
-c | --config : Edit The configure of CCkiller again
-i | --install : install CCkiller version 1.0.0 to This System
-U | --uninstall : Uninstall cckiller from This System

其中:

-u 参数用来升级工具,不过目前由于没时间还没写,所以不可用(Ver 1.0.2已支持在线更新)

-i  参数用来安装工具,如果已安装则会提示并终止

-c 参数用来配置工具,方便安装后随时修改工具配置

-U 参数用来卸载工具,注意是大写哦!

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

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

四、攻防测试

成功安装并启用CCKiller之后,我们可以使用压力测试工具来测试拉黑和释放效果,比如webbench 或 ab等。

假如CCKiller设定的并发限制为100,检查间隔为10s,使用webbench如下测试:

webbench -c 101 -t 60 http://www.yourwebsite.com/

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

iptables -nvL

多刷几下,就可以看到webbench所在服务器IP已经在DROP规则中了。

确定已被拉黑之后,你等个10分钟再来看防火墙,可以发现webbench所在服务器IP已经消失了,成功释放!

Ps:如果邮件发送功能无误,那么应该也收到了工具发来的告警邮件,比如有一个饱受CC攻击煎熬的站长给我发来的反馈:CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放

五、更多说明

①、配置并发限制

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

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

情况B: 如果没有做动静分离,那么一个页面产生的并发可能就比较多了,每个css、js、图片都会产生一次请求。所以,在这种情况下就需要稍微计算一下你网站单个页面产生的并发请求,比如一个单页面会产生30个请求,那么你也需要考虑用户可能会连续拖拽多个页面的情况,假设我允许用户可以同时刷新10页面,那么并发限制就可以设置为300了,依此类推。

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

当然,不管哪种情况,并发限制都可以比预估设置高那么一些,这个自行斟酌吧!

②、不足与完善

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

功能计划:

A. 在线升级功能

这个不用多说,现有的工具已经预留了,后面可能会加入版本判断和更新的功能。

B. 加入其他安全防护设置

目前工具其实是赶鸭子上架一样,直接就检查,也没有对系统环境做一些初始化的设置。比如网站通用的iptables设置、sync洪水攻击防御等。后续会在安装的时候会作为一个可选功能。

C. 集成傻瓜式的防火墙控制功能

并不是每个站长都会熟练操作iptables,所以可能考虑给cckiller这个命令集成一个ban和unban ip的功能,比如禁止一个ip,执行 cckiller -D $ip 即可,降低 iptables 的使用门槛。

另外,值得说明是,CCKiller只适合裸奔的网站,而不适合使用CDN的网站,因为使用CDN之后,请求过来的IP都是CDN节点,你总不能把CDN节点也拉黑了吧?(Ps:其实也可以用,你把并发限制稍微设置高一些就好了,就算拉黑CDN节点也就拉黑10分钟而已,不至于影响过大

针对这个问题,后续我会找时间研究下直接从Nginx日志里面取得真实来源IP来拒绝访问。目前已经有了阶段性的进展了,敬请期待!

附录:更新记录


2015-09-23 Ver 1.0.1:

  • 支持白名单为IP段,格式为IP段通用格式,比如 192.168.1.0/24;
  • 新增拉黑改为判断 iptables 是否已存在操作IP的判断方式;
  • 增加日志记录功能,每天一个日志文件,位于安装目录下的log文件内;
  • 集成手动拉黑IP和解封IP功能,使用cckiller -b IP 拉黑,使用 cckiller -u IP 解封。

2015-11-29 Ver 1.0.2:

  • 新增在线更新功能,执行 ./install.sh -u 即可检测是否有新版本:CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放

如果发现有新版本则显示更新内容,并提示是否执行更新。选择之后将会更新到新版本,需要重新配置,但是IP或端口白名单会保持不变。

  • 新增端口白名单功能

应网友需求,新增了这个端口白名单功能。在配置CCKiller的最后一项会提示输入端口白名单:CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放

如果需要排除某些端口,请如图最后一行所示,输入端口并已逗号分隔,比如 21,2121,8000

本次更新为非必须功能,在用的朋友可以按需更新,当然新增了在线更新这个功能,也强力推荐更新一下,方便后续检测CCKiller是否是最新版本。

更新难免存在不可意料的纰漏,使用中存在任何问题请留言告知,谢谢!

2016-06-20 Ver 1.0.3:

  • 增加“永久”拉黑时长

有网友反馈,需要设置更长的拉黑时间。原先的机制来看,如果设置拉黑时间过长,那么可能会产生很多后台释放黑名单脚本,占用系统资源。

因此,1.0.3版本加入永久拉黑设置。只要在安装的时候,设置拉黑时长为0,则CCKiller不会再产生后台释放脚本,也不会释放已拉黑的IP了:CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放

但是,考虑到灵活性问题,并没有在新版中加入 service iptables save 的保存命令,所以当你重启系统或者重启iptables,这些拉黑的IP都将得到释放。当然,如果你真的想永久拉黑,请手动执行 service iptables save 即可。

  • 注册开机启动

新版本已将CCKiller服务注册到了开机启动服务列表,重启系统不用在担心未启动CCKiller了。

  • 兼容 Centos 7

目前博客运行在Centos 7 系统,所以将CCKiller也做了一下兼容,其实就是在Centos 7上安装了iptables。并且修复了Centos7系统对已拉黑IP的判断问题。

Ps:以上功能如果你觉得有用,可以执行 install.sh -u 进行在线更新,记得是小写u哦。

2016-10-09 Ver 1.0.4:

  • BUG修复

根据网友反馈,发现攻防测试中一个IP不能被拉黑,经过分析发现命中了白名单。而实际上白名单中并没有IP段,只因IP同属于一个网段。因此,在是否属于IP段的判断中,加入对斜杠的筛选,也就是说只判断白名单中存在斜杠(/)的条目,简单粗暴!

2017-05-20 Ver 1.07 (中间漏记了2个小版本,也不记得修复了啥)

  • 日志级别、开关

根据网友建议,新增日志控制开关,参数为LOG_LEVEL,支持 INFO、DEBUG和OFF 3个参数,其中INFO表示仅记录拉黑和释放IP,DEBUG记录全部日志,包括拉黑、释放的报错信息,OFF表示关闭日志。

如果需要使用该功能,可以执行 ./install.sh -u 在线更新或直接重新安装。

2019-07-11 Ver 1.0.8

  • 支持IPv6检查;
  • 优化在线安装脚本,减少下载失败几率;
  • 基于/proc/net检查,替换netstat,避免在高并发时netstat导致CPU高负载的问题,感谢Late Winter留言指出,统计代码来自DDoS-Defender-v2.1.0。
279 条回应
  1. qz 2018-2-23 · 13:39

    你好,请问能只监控指定端口的访问吗?例如只监控80端口,3306端口,22端口,因为我服务器上也运行了爬虫,结果把别人服务器给ban了。爬不动了

  2. 诗人博客 2018-2-27 · 9:50

    还不错,订一下,
    ps:评论框的动画效果可以去了,整个网页都抖动,不太友好。
    另,能加个友链吗?

    • Jager 2018-2-27 · 10:37

      评论工具条上是有一个关闭震动按钮的,同一个浏览器关闭一次即可。

  3. qu 2018-3-3 · 16:18

    安装的时候提示./usr/local/cckiller/cckiller: 37: /usr/local/cckiller/cckiller: Syntax error: Bad for loop variable
    怎么办?

  4. feiji 2018-3-3 · 16:19

    IP并发50会否屏蔽掉搜索引擎蜘蛛呢!!!!!!!!!!!

  5. SaFly.ORG 2018-3-18 · 10:34

    赞一个!
    想问一下对IPv6支持怎么样~

  6. 丷相生相克 2018-3-20 · 19:19

    这个帖子真心有用哈哈哈

  7. 啊啊啊 2018-3-25 · 11:37

    安装后,cc是不怕了,但有个进程占用我95以上cpu。卸载了才恢复正常,这是啥情况

    • Jager 2018-3-25 · 11:44

      什么进程呢?

      • 啊啊啊 2018-3-25 · 14:10

        Top看是个Python。具体我也不知道啥 小白。 卸载了就没有了 centos7系统

        • Jager 2018-3-25 · 17:41

          这个是shell脚本,并不涉及python,估计是其他原因

  8. CE安全网 2018-4-30 · 12:52

    感谢Jager大哥的工具,受益匪浅。
    另外想申请个友情链接,本站已经添加。
    友联通过与否都请通知下。谢谢拉~

  9. 狂放 2018-5-1 · 0:35

    Nginx是可以通过’XFF之类的字段取得ip的,但是不用中间件你也屏蔽不了啊

  10. 小熊 2018-5-3 · 18:21

    service cckiller start 提示没有这个服务的,需要安装这个
    yum install which -y

  11. 减压玩具网 2018-5-4 · 16:37

    感谢博主的分享,现在已经成我建站必装的工具了 :mrgreen:

  12. 农业微信群孵化 2018-5-9 · 14:50

    签到成功!签到时间:下午2:40:06,每日签到,生活更精彩哦~
    我就想说说你们这些站长是不是什么都会啊!唉 自叹不如,你这个防攻击脚本非常好,对于我们这些不会的很有帮助,谢谢了,找时间我参照着部署下。我的网站是热农网热农网,农业微信群孵化 站长有时间的话给我指导下,没丁点流量 运行快半年了

  13. 哩啦啦 2018-5-15 · 16:11

    前端有反向代理,有没有方法取到真实ip呢?

  14. 杨小杰 2018-6-10 · 8:09

    Jager大哥,请问这个工具能识别真实ip吗?我看服务器识别的ip很多都是cdn节点ip,要是要节点ip拉黑了那不就完蛋了

    • Jager 2018-7-1 · 19:53

      基于4层TCP和iptables实现,无法识别真实IP,并且iptables无法间接拉黑真实IP,只能拉黑直接访问IP(CDN节点IP)

  15. W 2018-6-15 · 21:04

    请问一下 安装的时候卡住了,是哪里出问题?

    • Jager 2018-7-1 · 19:54

      重新安装试下

  16. W 2018-6-15 · 21:22

    请问一下安装失败是哪里出了问题?

  17. Liues 2018-7-27 · 18:13

    在使安装了宝塔的情况下,能使用吗?

  18. 哩啦啦 2018-7-28 · 15:31

    发件人ROOT能否更改呢,多个服务器无法分辨

  19. CCkiller卸载 2018-12-3 · 16:33

    张哥,卸载不掉。在 centos_7_04_64里面有兼容性的问题,卸载之后卸载不掉。期待收到你的回复谢谢。

    • Jager 2019-1-20 · 13:50

      卸载不了是什么表现?

  20. 雅丶涵 2018-12-13 · 7:47

    http_cf_connecting_ip
    如果使用cfcdn的,可以用这个取得真实ip
    还可以利用api在cdn上直接封禁,而不是本机抵抗
    建议更新加入CF功能

    • Jager 2019-1-1 · 16:50

      嗯,如果是有用CDN,CDN一般都应该有自己的一套防护机制,不需要用这个脚本。

  21. 明天 2018-12-21 · 21:56

    这个脚本目前似乎与宝塔面板互相突出了。宝塔版本为6.84,Ngnix1.14.2,php7.3,centos7.6,安装此脚本后,测试是可以防御,但是重启Centos后,发现网站访问不了,且排除自己IP拉黑的情况,可以ping通,也可以SSH登入。不知道其他朋友有没有反馈此问题。

    • Jager 2019-1-1 · 16:44

      可以登进去看下iptables规则是什么情况:iptables -nvL

  22. Akun 2019-1-21 · 13:55

    请问有防止海量IP低频攻击的办法吗?

    • Jager 2019-1-21 · 13:59

      这个就比较困难了,一般需要将所有IP记录下来,做分析、字典库。很多大型防御系统,比如腾讯的大禹才会做这类识别系统。

      • Akun 2019-1-21 · 14:54

        你好,我最近遭受一个海量IP攻击,IP地址前两段是固定的,后两段都是变化的,手动拉黑也拉不完全,请问有什么办法整体拉黑或者防御吗?比如220.110.xxx.xxx 的所有IP地址能不能用一个IP地址段就能完全表示?

        • Jager 2019-1-21 · 15:45

          可以啊,封锁整个IP段,只要你不怕误封了同网段的正常IP,我看了下这个应该是日本的段,你执行:

          iptables -I INPUT -s 220.110.0.0/10 -j DROP

          即可生效,如果需要保存这个规则,则执行 service iptables save

  23. 教书先生 2019-1-27 · 22:20

    脚本失效,请更新下

    • Jager 2019-1-27 · 22:35

      👿 只是域名换了而已,已更新。

  24. 明月清风 2019-2-3 · 11:47

    感谢博主的无私奉献。

  25. hi 2019-2-15 · 18:11

    如果从4层取IP的话是只能取得remote_addr,不能获取代理的IP地址,假如网站前面放了CDN,就需要获取XFF中的IP地址了,不知道能不能改进一下

    • Jager 2019-2-16 · 19:43

      关键是这个脚本是通过iptables封堵的,只能支持直接来源IP,也就是和网站服务器接触最近的那个IP,搞不了。如果用了CDN则只能用nginx获取真实IP然后来封堵。

  26. 尚寂新 2019-2-25 · 12:16

    话说这个可以跟宝塔一起跑吗

  27. buxia 2019-3-1 · 18:20

    如果加了cdn的话,会拦截cdn节点ip吗?

  28. 博客之家 2019-3-12 · 13:25

    现在对攻击只有无奈+无言……

  29. Lhaihai 2019-4-30 · 17:17

    你好,安装install脚本在Centos7运行成功,但是在Debian 9 系统安装失败
    报错信息:
    ./install.sh: 316: ./install.sh: Syntax error: “(” unexpected

    • Jager 2019-5-2 · 15:11

      目前只支持centos,如果你熟悉debian可以去github fork一份修改即可。

  30. 优启梦 2019-5-10 · 9:52

    大佬,能不能改成判断UA的,检测大量重复UA直接拉黑这个UA的IP。毕竟攻击的话,ua重复很多

  31. Late Winter 2019-7-10 · 15:25

    编写核心连接分析代码,不再依赖netstat命令;由于高并发连接下使用netstat处理连接数,使CPU占用率高达100%,严重影响系统性能;直接对/proc/net下的连接记录文件进行分析,使高并发连接状态下比netstat速度提高5倍以上,CPU占用率不超过10%。

    推荐参考下ddos-defender-v2.1.0这个工具。

    • Jager 2019-7-11 · 7:56

      多谢指点,这算是已知问题,挺久之前就有人提出来过,然后当时建议我用ss命令来替代,不过一直忙得没空去修改,而且这个工具其实也比较鸡肋,所以没投入精力。已经更新替换了netstat,代码函数照搬了DDoS-Defender的core_nestats。

  32. 370569218 2019-7-11 · 20:36

    最新版1.08 无法安装
    /etc/init.d/cckiller: line 1: syntax error near unexpected token `<'
    /etc/init.d/cckiller: line 1: `Page not found | 张戈博客’

    • Jager 2019-7-12 · 10:20

      修复了。。。

      • 370569218 2019-7-12 · 10:26

        还是一样的错误提示呀/etc/init.d/cckiller: line 1: syntax error near unexpected token `<'
        /etc/init.d/cckiller: line 1: `<html lang="zh_CN" class
        并且/etc/init.d/cckiller 文件写入的都是博客的html代码

        • Jager 2019-7-12 · 12:13

          先执行卸载,然后重新执行在线安装命令,后面的版本号改一下,比如1.0.9

  33. 维生素 2019-7-18 · 18:45

    遇到个问题,centos 5 ssl版本较低无法链接htpps是否能 开放一个http的安装地址

  34. kuvi 2019-7-24 · 14:49

    感谢博主的幸苦付出。刚刚安装上,谢谢

  35. ppprawn 2019-8-14 · 18:58

    请问一下,目前最新版的,控制的是不是一段时间内的总请求数,而不是并发数了?

    • Jager 2019-9-25 · 19:57

      最新版本:基于/proc/net检查,替换netstat,避免在高并发时netstat导致CPU高负载的问题,感谢Late Winter留言指出,统计代码来自DDoS-Defender-v2.1.0。
      应该是一段时间内的总请求数,这样才降低了统计数据的负载占用。。。

  36. 潴佛 2019-9-5 · 23:52

    运行service cckiller start
    显示:Failed to start cckiller.service: Unit cckiller.service not found.
    系统阿里云:ubuntu_18_04_64_20G_alibase_20190624.vhd
    另外小白不懂,为什么运行了cckiller -k 100 提示
    1 119.254.108.***
    1 139.198.6.***
    1 27.155.234.***
    1 115.208.176.***
    1 119.126.106.***
    请问以上是被封禁了么?但好像没效果。大神有QQ吗?有偿请教指导,谢谢您

    • Jager 2019-9-25 · 19:51

      说明当前没有超过100连接的IP,所以-k 100 并没有禁封效果。
      乌班图系统请参考文章中的提示。

  37. 教书先生 2019-9-7 · 14:53

    配置文件位于/usr/local/cckiller/ck.conf 如果我直接在服务器上编辑修改,他会生效吗,还是要我重启服务器才能生效呢

  38. 微wx笑 2019-9-18 · 18:13

    评论时的昵称、邮箱、网址建议的input标签名称:author,email,url,我是参考阮一峰老师的,很多网站都是用这个,大家都用一样的,这样用户体验会好一点。
    抖动效果很伤眼。

    • Jager 2019-9-25 · 19:45

      现在主题用的应该是wordpress默认的,没去修改过。

  39. 微wx笑 2019-9-19 · 9:15

    文章目录过长的时候只能显示一部分,比如这篇,有意这样设计的吗?

  40. 啦啦啦 2019-9-28 · 1:35

    大佬,谢谢你开发的工具,很好用,老版本就是遇到大量IP访问,就会导致系统资源用尽。对了,最新版1.08的怎么安装不了? 输入安装命令,有好多零,和倒计时。

    • Jager 2019-9-30 · 16:44

      可以发一份截图的邮件我看看?

  41. 月氏 2019-10-5 · 10:40

    大佬的脚本写的真的很好 ,但是我用起来有点问题…..
    1.安装的时候我习惯性的 去新建一个 与软件同名的 文件夹 , cckiller 然后安装就报 cckiller is already installed, Please used -U uninstall first ,后来仔细看脚本 , 才发现有个判断 文件夹的 语句…..
    2.对CDN的支持是不是不那么友好 , 要是封CDN节点的 话 ,会不会出现误封的情况….
    3.不知道为啥对我的博客 不起作用
    我使用的是压力测试的工具 -c 100 -n 1000 , 连续测试了好几遍
    网站是用的 CDN , 转 Nginx 再转 docker , 然后无效果…
    另一个web应用 没有使用CDN ,也没有使用 docker 是有效果的….

    • Jager 2019-10-6 · 10:44

      1、脚本会自己创建文件夹,无需再创建一层;
      2、基于TCP直连检测,所以不支持CDN,一定要在CDN的环境下做防御,推荐使用云锁,或者参考我之前的文章:https://zhang.ge/5096.htmlhttps://zhang.ge/4879.html