脚本编程

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

张戈博客很久以前分享过一个CC攻击的防御脚本,写得不怎么样,不过被51CTO意外转载了。博客从此走上了经常被人拿来练手的不归之路。 当然,还是有不少朋友在生产环境使用,并且会留言询问相关问题。根据这些问题的需求,我花了一些时间重新写了一个比较满意的轻量级CC攻击防御脚本,我给它取了一个比较形象的名字:CCKiller,译为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,所以仅提供在线安装,以保证脚本是最新的。 安装非常简单,执行如下命令就能进入配置步骤了: 2017-12-13 补充:Ubuntu 系统请参考joviqiao的版本=>传送门 2017-09-06 补充:CCKiller 代码早已提交到Github,有网友问到,就来补充说明下 =>传送门。 ②、工具配置 因为每个服务器的情况可能不一样,所以有一个自定义配置的过程。 执行上述安装命令后,将会进入自选配置部分,如图: 提示否使用脚本默认配置,如果选择是(y),那么显示默认配置,并询问是否继续: 默认配置如下: 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),则会要你输入参数来自定义配置: 如图,我将参数依次定义为每10秒进行检查,拉黑时长为300秒,发件人设置为博客邮箱,并发限制设置为60,回车后会弹出一个提示,让你检查,如果没问题你直接回车就会安装并启动: ③、服务控制 安装后,会将cckiller注册成系统服务,这时你就可以使用service来控制cckiller了。 使用标准的service定义,支持 start | stop | restart | status 四个参数。所以,你可以使用 service cckiller stop来停止cckiller,也可以使用service cckiller status来查看状态。  ④、集成命令 成功安装后,系统还会多出一个cckiller的命令,这个命令现有功能如下: cckiller -h可以调出帮助信息:...
阅读全文
操作系统

CVE-2015-0235:Linux glibc高危漏洞的检测及修复方法

这几天复习运维知识,也没怎么关注业界新闻,可等我一关注,又“捅娄子”了,Linux继上次CVE-2014-6271漏洞爆发以来,再次爆发一个严重漏洞:CVE-2015-0235-Linux glibc高危漏洞,正在使用Linux系统的个人或企业,看到消息请立即修复! 下面是我转载的检测和修复方法,我个人服务器Centos 6.5已成功修复: 一、漏洞概述 2015/01/28【CVE 2015-0235: GNU glibc gethostbyname 缓冲区溢出漏洞 】全面爆发,该漏洞的产生是Qualys公司在进行内部代码审核时,发现了一个在GNU C库(glibc)中存在的__nss_hostname_digits_dots函数导致的缓冲区溢出漏洞。这个bug可以通过gethostbyname *()函数来触发,本地和远程均可行。该漏洞(幽灵漏洞)造成了远程代码执行,攻击者可以利用此漏洞远程获取系统进程当前的权限。 幽灵漏洞是Linux glibc库上出现的一个严重的安全问题,他可以让攻击者在不了解系统的任何情况下远程获取操作系统的控制权限。目前他的CVE编号为CVE-2015-0235。 什么是glibc glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。glibc 囊括了几乎所有的 UNIX 通行的标准。 出现了什么漏洞 代码审计公司Qualys的研究人员在glibc库中的__nss_hostname_digits_dots()函数中发现了一个缓冲区溢出的漏洞,这个bug可以经过 gethostbyname*()函数被本地或者远程的触发。应用程序主要使用gethostbyname*()函数发起DNS请求,这个函数会将主机名称转换为ip地址。 更多的细节可以从下面的视频中看到(一堆鸟语,听不懂): XODgxMTg1NDY4 漏洞危害 这个漏洞造成了远程代码执行,攻击者可以利用此漏洞获取系统的完全控制权。 漏洞证明 在我们的测试中,我们编写了一个POC,当我们发送一封精心构造的电子邮件给服务器后,我们便可以获得远程Linux服务器的shell,这绕过了目前在32位和64位系统的所有保护(如ASLR,PIE和NX)。 我们能做什么? 给操作系统及时打补丁,我们(Qualys)已与Linux发行商紧密合作,会及时发布补丁。 为什么叫做GHOST? 因为他通过GetHOST函数触发。 哪些版本和操作系统受影响? 第一个受影响的版本是GNU C库的glibc-2.2,2000年11月10号发布。我们已找出多种可以减轻漏洞的方式。我们发现他在2013年5月21号(在glibc-2.17和glibc-2.18发布之间)已经修复。不幸的是他们不认为这是个安全漏洞。从而导致许多稳定版本和长期版本暴露在外,其中包括Debian 7 (wheezy),Red Hat Enterprise,Linux 6 & 7,CentOS 6 & 7,Ubuntu 12.04等。 以上内容摘自:360安全播报平台 二、检测方法 检测方法1【RedHat官方检测方法】: ghost_check.sh源码(张戈亲测:推荐使用这种方法来测试更加准确!): 检测方法2【简单的检测方法】: 检测方法3【二进制检测方法】: ghost.c源码: 三、修复方法 ①、在线修复方案 CentOS, Red Hat, Fedora等系列衍生版本(RHN建议): Debian, Ubuntu等系列衍生版本: ②、离线修复方案 I. Centos6.5离线补丁 先检查本地glibc包安装了哪些相关包 然后,到阿里源下载对应版本 进行后台断点下载补丁包 使用yum本地安装 或是rpm安装 II. Red Had系列衍生版本 使用方法:参考上文【Centos6.5离线补丁】的修补方法。 离线包下载地址: http://mirrors.aliyun.com/centos/7/updates/x86_64/Packages/glibc-2.17-55.el7_0.5.i686.rpm http://mirrors.aliyun.com/centos/7/updates/x86_64/Packages/glibc-2.17-55.el7_0.5.x86_64.rpm 四、修复检测 ①、ghost_check.sh脚本检测 ②、ghost.c脚本检测 注意:打好补丁后必须立即重启操作系统,否则会造成应用业务无法使用。 五、参考来源 redhat官方:https://access.redhat.com/articles/1332213 redhat官方补丁介绍: https://rhn.redhat.com/errata/RHSA-2015-0090.html https://rhn.redhat.com/errata/RHSA-2015-0092.html ubuntu官方补丁介绍: http://www.ubuntu.com/usn/usn-2485-1/
阅读全文
脚本编程

Linux系统防CC攻击自动拉黑IP增强版Shell脚本

最新更新:张戈博客已推出功能更强大的轻量级CC攻击防御脚本工具CCKiller==>传送门 前天没事写了一个防CC攻击的Shell脚本,没想到这么快就要用上了,原因是因为360网站卫士的缓存黑名单突然无法过滤后台,导致WordPress无法登录!虽然,可以通过修改本地hosts文件来解决这个问题,但是还是想暂时取消CDN加速和防护来测试下服务器的性能优化及安全防护。 前天写的Shell脚本是加入到crontab计划任务执行的,每5分钟执行一次,今天实际测试了下,可还是可以用的,但是感觉5分钟时间有点过长,无法做到严密防护。于是稍微改进了下代码,现在简单的分享下! 一、Shell代码 二、执行脚本 将以上代码保存为deny_blackip.sh之后,进入到脚本文件所在目录,然后使用如下命令后台执行脚本(后面的50表示并发数,可自行调整): 执行后会出现如下信息: 表示如果脚本产生输出信息,将会写入到nohup.out文件,可以看到当前目录已经生成了一个空的nohup.out: 好了,现在你执行执行ps aux 应该可以找到如下进程: 一切顺利!每10s将检查一次服务器请求,如果某个IP超过50个并发,立即拉黑,并发一封邮件给你! 三、效果测试 测试很简单,先使用nohup启动脚本,然后在另一台Linux或Windows安装webbench,然后模拟50+并发去抓取该服务器的某个页面,20s之内可见到效果,下面是我的测试截图: ①、模拟CC攻击的服务器截图: ②、被CC攻击的服务器截图: ③、攻击IP被拉黑后的报警邮件: 测试时,模拟55个并发攻击了20s,立马就被拉黑了,效果很明显! 四、附加说明 ①、脚本发邮件需要安装sendmail,若未安装请执行yum -y install sendmail安装并启动即可; ②、若要停止后台运行的脚本,只要使用ps aux命令找到该脚本的pid线程号,然后执行kill -9 pid号即可结束; ③、关于脚本的单IP并发限制,我实际测试同时打开博客多个页面并持续刷新,顶多也就产生十来个并发,所以单IP超过50个并发就已经有很大的问题了!当然,文章的阈值设为50也只是建议值,你可以根据需求自行调整(如果网站静态文件未托管到CDN,那么一个页面可能存在10多个并发); ④、写这个脚本,主要是为了弥补用crontab执行时间间隔最低只能是1分钟的不足,可以让CC防护更严密,甚至每隔1S执行一次!虽说脚本不怎么占用资源,不过还是建议10s执行一次为佳,不用太过极端是吧? ⑤、对于白名单过滤,只要将白名单IP保存到脚本同一目录下的white_ip.txt文件中即可,若发现攻击IP在白名单中,脚本不会直接拉黑,而是发一封邮件给你,让你自己判断这个白名单攻击你是为毛?如果白名单需要支持IP段,请参考我前天写的脚本即可。 就啰嗦这么多,主要还是自己用,然后分享出来给有需要的人一些参考,个人vps服务器虽说很少有人攻击,但是基本的安装防护还是必须要做的!希望本文对你有所帮助!
阅读全文
脚本编程

VPS/Linux系统防CC攻击带白名单过滤功能的Shell脚本

最新更新:张戈博客已推出功能更强大的轻量级CC攻击防御脚本工具CCKiller==>传送门 根据我个人VPS需求,并参考了余洪春前辈的《自动甄别黑白名单的iptables安全脚本》,编写如下Shell代码。 脚本名称:自动拉黑CC攻击者IP的Shell脚本 功能说明:通过netstat -an命令统计出当前请求并发大于100的IP,然后将不在白名单的IP自动加入DROP规则 使用说明: ①、在Linux系统下将以下代码保存为shell脚本,比如:deny_ip.sh,并执行chmod+x deny_ip.sh加执行权限 ②、如果有要排除的白名单IP,需要将这些IP加入到脚本同目录的white_ip.txt当中,一行一个 ③、最后使用crontab -e 将脚本加入到系统计划任务当中,每五分钟执行一次即可(最后的数值表示最大并发数): 注意事项: ①、该脚本对于使用了百度云加速或360网站卫士的网站无效,因为IP都已经变成了CDN节点了,请勿使用此脚本 ②、若不需要支持一个段为白名单,可自行修改24~27行的代码,更加准确的对应到每个IP ③、若发现和白名单同一个段IP出现在高并发列表,将不会直接拉黑,而是写入到recheck_ip.txt,如果有监控信息机制,可以在这个地方加入监控报警,告知管理员这个可疑的IP ④、脚本都有详细注解,就不罗嗦了,本身也没多做测试,有兴趣的可以看看。
阅读全文
业界新闻

再次扩散:Linux系统bash漏洞CVE-2014-6271仍未被彻底修复,红帽再发补丁

昨天发文扩散这次Linux严重漏洞的检测和修复方法。 今天上午,RedHat官网再发新补丁: 详见:https://rhn.redhat.com/errata/RHSA-2014-1306.html 所以,手持服务器的童鞋,赶紧修复吧! 修复方法: 需再次升级Bash。 ①、CentOS:  ②、Ubuntu:  ③、RPM在线安装: Ps:其他系统请自行网络查找升级方法,这里就不赘述了。 测试方法 执行如下命令: 未升级之前,结果如下:   成功升级之后: 还好没急着给公司所有服务器升级bash,否则要一夜回到“解放前”了。手头上有VPS的朋友,抓紧时间去修复吧!在线安装rpm包的时候,切记看清楚版本哦!运维群里就有一个家伙装错了包,导致无法登陆了! 好了,就说这么多,请看到本文的朋友紧急扩散,避免造成没必要的损失!
阅读全文
业界新闻

紧急扩散:Linux系统bash严重安全漏洞CVE-2014-6271的检测及修复方法

今天白天,重量网络在群里提醒我,说Linux出现了严重的bash漏洞,一直在忙也没怎么关注,晚上空闲看了下,发现确实非常严重,必须紧急扩散出去,防止服务器被黑客入群,造成严重的后果! 9月25日消息,继“心脏流血”漏洞之后,安全研究专家又发现了一个危险级别为“毁灭级”(catastrophic)的漏洞,开源软件公司Red Hat在一份报告中称,在Linux系统中广泛使用的Bash软件漏洞有可能让黑客利用攻击一切连入互联网的设备。 该漏洞编号为CVE-2014-6271,主要存在于bash 1.14 - 4.3版本中,受影响的linux系统包括:Red Hat企业Linux (versions 4 ~7) 、Fedora distribution、CentOS (versions 5 ~7)、Ubuntu 10.04 LTS,12.04 LTS和14.04 LTS、Debian等。  受影响的软件及系统:GNU Bash <= 4.3。 GNU Bash 4.3及之前版本在处理某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行shell命令。 漏洞可以直接在Bash支持的Web CGI环境下远程执行任意命令!一些路由器、堡垒机、VPN等网络设备也可能会受到影响.当cgi程序里需要创建子进程,且环境变量可控时,攻击者可以通过useragent,querystring等http特性构造恶意攻击代码进行远程攻击,可能直接导致服务器被恶意控制,从而导致数据存在泄露的风险。 美国国土安全部下属的美国电脑紧急响应团队(以下简称“US-CERT”)发出警告称,这一漏洞可能影响基于Unix的操作系统,包括Linux和Mac OS X。 漏洞详情页面:http://seclists.org/oss-sec/2014/q3/650 漏洞级别:非常严重 RedHat官方提供漏洞详情: A flaw was found in the way Bash evaluated certain specially crafted environment variables. An attacker could use this flaw to override or bypass environment restrictions to execute shell commands. Certain services and applications allow remote unauthenticated attackers to provide environment variables, allowing them to exploit this issue. RedHat官方提供的检测方式: 登录终端,运行如下命令: 如果返回以下内容:表示存在次漏洞,则请尽快升级。 目前官方已经提供了升级包请执行如下命令进行升级处理: 升级后,再一次执行前面的命令进行检测,若出现如下信息,则表示已修复: 而Ubuntu 用户则可以通过如下命令升级bash: 其他Linux发行版,没有在线安装功能的,请使用以下脚本编译安装bash漏洞补丁: 漏洞是否修复成功的检测方法与前文一样。另外,有人提到升级后是否需要重启服务器?其实是不需要的,只要通过漏洞检测即可。当然,你要不放心,重启下也是可以的。。。 此次漏洞很严重,请看到此消息的朋友互相宣传扩散,谨防此漏洞带来任何损失。 最新补充:已更新最新的漏洞情况及修复检测方法,请移步==>
阅读全文