注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

老和山小和尚

敬天爱人

 
 
 

日志

 
 
 
 

针对DDOS 应用层攻击的一种对策  

2011-10-24 17:00:54|  分类: Nginx |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
年底了,私服之间DDOS攻击也频繁起来,网易博客作为有些私服的发布平台,频频遭遇攻击,难道他们也有年底业绩考核?

去年我也写过关于应用层的DDOS攻击的一篇文章,那时也没有什么好想法,就是尽量降低DDOS攻击的资源消耗。其实针对HTTP层的攻击,也是有一些比较通用的方法的。

特点
我们碰到的HTTP层DDOS攻击有几个特点:
1. 攻击的IP很分散,应该是调用了大量主机,不停的发送请求。如果IP很集中的话就好好办了,可以通过封禁IP的方法解决。
2. 攻击的频率跟普通人类似。如果频率很高,可以用Nginx的limit_req模块来限制。
3. 攻击者不是真实人类。

原理
此类攻击有点像垃圾邮件,那些攻击主机基本的上都是被劫持的‘肉鸡’,接受遥控者的指令来向目标发送HTTP请求包。所以,破解的一个办法就是因为对方不是真实人类,那么就可以使用著名的图灵测试,来判断对方到底是不是人类。

下面是我的做法:
1. 当攻击开始时,对所有请求返回一个CAPTCHA页面,真实的用户会输入验证码,然后返回。如果通过验证,就给用户返回一个安全cookie,下次拥有这个cookie的用户就可以直接访问页面。
2. cookie要精心构造,首先需要包含一个超时时间,比如一天,这个cookie会失效,cookie值至少需要由几个字段生成:用户的IP,用户的超时时间,一个私有的密钥,防止cookie不被篡改和重复利用。

优化
对于许多网站来说,用户的体验性很重要,所以让那些普通用户输入验证码是件很烦的事情。可以设定一个阈值,当用户的并发连接数或者访问频率超过一定次数的时候,或者服务器负载到达一定程度时,才将用户转向验证码页面。

一个优秀的DDOS攻击者,会寻找目标服务器资源消耗最大的页面来攻击,这样攻击的效果是最好的,比如某些动态资源加载最多的页面。而我的方法其实就是将对应用服务器的资源消耗转嫁到验证码服务器上。如果验证码本身消耗的资源很大,那就有点得不偿失了。

我想到的一个方法是,将验证码图片事先都以静态资源的形式存在服务器上,另外验证码图片与验证码的匹配对都存在memcache里面,一般来说,你有几十万个验证码应该就能对付过去了。对于一般的大公司来说,验证码服务器可以作为基础安全服务来使用,所有的应用在遭受攻击的时候都可以使用。就像Google的reCAPTCHA服务,世界上所有的人都可以使用,可以用来防止垃圾评论或者垃圾邮件。

一个实现
我用nginx模块+Google的reCAPTCHA服务器作了一个简单的实现,可以看看:
  评论这张
 
阅读(2531)| 评论(4)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017