本工具转自https://zhangge.net/5066.html
一、功能申明
分享之前我必须先申明一下,众所周知,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://zhangge.net/wp-content/uploads/files/cckiller/install.
|
默认配置如下:
The Time interval : 20 s #每20s检查一次系统请求情况
The Forbidden Time: 600 s #拉黑时长设为10分钟
Adminstrator Email: root@localhost #邮件对象设置为root@localhost(即关闭邮件发送)
Connections Allow: 100 #单个IP并发限制为100
如果不符合你的需求,你可以使用 ctrl + c 组合键终止脚本,或者先继续安装,因为工具设计了配置修改的功能,所以无需着急。
③、服务控制
安装后,会将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 <ge@zhang.ge>
|
|
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设定并发限制
|
|
<span class="hljs-attr" style=&am
|