IT技术博客大学习 共学习 共进步

Nginx过滤hash ddos攻击

MySQLOPS 数据库与运维自动化技术分享 2012-04-07 14:51:50 浏览 3,204 次

    这事可能都过气了,不过还是贴出我使用的方式吧,用的着的可以参考.

    上段时间的各语言hash绝对印象深刻吧,做网站的几乎都在此类,不论你是用的是php,python还是ruby都不同程度受到影响, PHP尤其明显,因为PHP用的人也多嘛,攻击方式简直简单到不行,有兴趣的可以找我索取此测试脚本,一个终端随便搞挂一台有次漏洞的PHP站点.

    我们http请求都是通过nginx反向代理,所以优势是可以在nginx这一层对请求做很多逻辑,此次防hash dos就是这个架构.

    原理是过滤post请求中超过指定参数数量的请求, 我的是300,可自己调整,应该没有http开发者在使用post方法的时候有超过这个参数值的了,所以不会影响正常请求.

    之前有哥们自己写ngx的C模块,使用的也是这个原理,不过NGX模块开发复杂度是有的,因为自己C也看不熟练,还是自己用lua写,方便快捷,简洁明了.

    #配置依赖ngx-lua模块

    好,废话不多说,贴上nginx的配置:

    >>cat  post-limit.lua

    ngx.req.read_body()

    local method = ngx.var.request_method

     local max_count= 300  -post最大参数

    if method == ‘POST’ then

     local data = ngx.req.get_body_data()

     if data then

     local count = 0

     local i = 0

     while true do

     if count > max_count then

     -ngx.redirect(‘/post-error’)

     ngx.exit(ngx.HTTP_BAD_REQUEST)

     end

     i = string.find(data, ‘&’, i+1)

     if  i == nil then break end

     count = count + 1

     end

     end

     end

    >> cat nginx.conf

    …..

    server {

    client_body_buffer_size 20m;

     client_max_body_size 20m;

     access_by_lua_file /opt/conf/nginx/lua/post_limit.lua;

    }

    …..

    nginx其他配置已隐去.

    nginx 1.0.XX结合后端PHP应用测试通过,配置也适用其他开发语言的http应用.

    有时间可以慢慢升级你的后端应用PHP版本了,否则一系列的版本升级,也够呛.

    完.

建议继续学习

  1. HashMap解决hash冲突的方法 (阅读 12,463)
  2. 关于memcache分布式一致性hash (阅读 11,661)
  3. 一种抵御 DDoS 攻击的 IP 追踪技术 (阅读 7,381)
  4. MinHash原理与应用 (阅读 6,922)
  5. 防DDoS脚本 in python (阅读 6,663)
  6. 无锁HashMap的原理与实现 (阅读 6,582)
  7. LVS hash size解决4096个并发的问题 (阅读 6,282)
  8. 如果用户在5分钟内重复上线,就给他发警告,问如何设计? (阅读 5,884)
  9. Ubuntu 下Hash校验和不符问题的解决 (阅读 5,463)
  10. 分布式系统hash策略 (阅读 5,125)