很头疼,教你过滤Nginxhash ddos攻击办法

有些技术虽然过期可依旧可以用~用的着的可以做参考.

上段时间的各语言hash绝对印象深刻吧,做网站的几乎都在此类,不论你是用的是php,python还是ruby都不同程度受到影响, PHP尤其明显,因为PHP用的人也多嘛,攻击方式简直简单到不行,有兴趣的可以找我索取此测试脚本,一个终端随便搞挂一台有次漏洞PHP站点.
我们http请求都是通过nginx反向代理,所以优势是可以在nginx这一层对请求做很多逻辑,此次防hash ddos就是这个架构.
原理是过滤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版本了,否则一系列的版本升级,也够呛.
代码段:
ngx.req.read_body()
local method   = ngx.var.request_method
local max_count= 300
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
    –else
    —    ngx.redirect(‘/post-error’)
    end
end
完.
此文章出自《中国蓝客联盟团队博客》转载请注明出处。

转载请注明: 本文转载自中国蓝客联盟官方团队博客
本文链接地址: 很头疼,教你过滤Nginxhash ddos攻击办法

发表评论

电子邮件地址不会被公开。 必填项已用*标注

人类验证码: 如果无法查看图片请刷页面