使用nginx扩展:OpenResty实现防cc攻击

时间:13-03-19 栏目:域名空间服务器 作者:kyle 评论:0 点击: 8,122 次

千万别把CC看成虫虫博客了。

玩服务器VPS的朋友应该都知道神马是CC攻击。

CC简单说叫DDOS的一种,拒绝服务式攻击。简单说就是不停的往你电脑服务器网站请求发送数据包。直到你处理不过来把服务器直接搞崩溃的一种玩法。

详细的说明可以自己百度一下。

要想搞死谁的站就要用到这种攻击。

直接把服务器给对方搞崩溃。

CC我也不会玩,只是收藏这篇文章,万一哪天发达了用上服务器有可能会遇到这种问题。

本文介绍使用openresty来实现防cc攻击的功能。openresty官网http://openresty.org/cn/index.html。下面是防cc攻击的流程图。
根据流程图,我们知道防cc攻击主要包括两部分,一是限制请求速度,二是给用户发送js跳转代码进行验证请求是否合法。
cc

一、安装依赖

yum install readline-devel pcre-devel openssl-devel
apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl
二、luajit安装
cd /tmp/
git clone http://luajit.org/git/luajit-2.0.git 
cd luajit-2.0/
make && make install
ln -sf luajit-2.0.0-beta10 /usr/local/bin/luajit
ln -sf /usr/local/lib/libluajit-5.1.so.2 /usr/lib/
三、openresty安装
cd /tmp
wget http://agentzh.org/misc/nginx/ngx_openresty-1.2.4.13.tar.gz 
tar xzf ngx_openresty-1.2.4.13.tar.gz
cd ngx_openresty-1.2.4.13/
./configure --prefix=/usr/local/openresty --with-luajit
make && make install
四、nginx配置

nginx.conf:

http{
[......]
lua_shared_dict limit 10m;
lua_shared_dict jsjump 10m; 

    server {
#lua_code_cache off;
        listen       80;
        server_name  www.centos.bz; 

        location / {
default_type  text/html;
content_by_lua_file "/usr/local/openresty/nginx/conf/lua";
        }
        location @cc {
            internal;
            root   html;
            index  index.html index.htm;
        }
    }
}

/usr/local/openresty/nginx/conf/lua文件:

local ip = ngx.var.binary_remote_addr
local limit = ngx.shared.limit
local req,_=limit:get(ip)
if req then
    if req > 20 then
        ngx.exit(503)
    else
        limit:incr(ip,1)
    end
else
    limit:set(ip,1,10)
end 

local jsjump = ngx.shared.jsjump
local uri = ngx.var.request_uri
local jspara,flags=jsjump:get(ip)
local args = ngx.req.get_uri_args()
if jspara then
    if flags then
        ngx.exec("@cc")
    else
        if args["jskey"] and args["jskey"]==tostring(jspara) then
            jsjump:set(ip,jspara,3600,1)
            ngx.exec("@cc")
        else
            local url=''
            if ngx.var.args then
                url=ngx.var.scheme.."://"..ngx.var.host..ngx.var.request_uri.."&jskey="..jspara
            else
                url=ngx.var.scheme.."://"..ngx.var.host..ngx.var.request_uri.."?jskey="..jspara
            end
            local jscode="<script>window.location.href='"..url.."';</script>"
            ngx.say(jscode)
        end
    end
else
    local random=math.random(100000,999999)
    jsjump:set(ip,random,60)
    local url=''
    if ngx.var.args then
        url=ngx.var.scheme.."://"..ngx.var.host..ngx.var.request_uri.."&jskey="..random
    else
        url=ngx.var.scheme.."://"..ngx.var.host..ngx.var.request_uri.."?jskey="..random
    end
    local jscode="<script>window.location.href='"..url.."';</script>"
    ngx.say(jscode)
end

lua代码部分解释:

1、1-12行是限速功能实现,第5和第10行表示10秒钟内容最多只能请求20次。

2、14-48行是验证部分,24行中的3600表示验证通过后,白名单时间为3600秒,即1小时。

记得在Nginx环境下使用,什么是Nginx不明白的继续百度。

各人精力有限,大家遇到不明白的问题的时候请先使用百度。欢迎加群吹水。

成都SEO小五嚎2句: 本文是(成都SEO小五)辛苦弄出来的,转载成都SEO小五原创的请保留链接: 使用nginx扩展:OpenResty实现防cc攻击,3Q

使用nginx扩展:OpenResty实现防cc攻击:等您坐沙发呢!

来给哥评论评论


------====== 小五公告 ======------
成都SEO小五,专注成都搜索引擎优化。
小五善长站内外优化,C#、PHP开发,中英文SEO,Google中英文和百度优化技术。欢迎群内交流。伸手党请绕路,求资源的请绕开,求问题解答的请进群内交流。开放了一个QQ交流群:160750032。加入验证时请标注任何SEO相交字眼。友情链接直接Q我,收录正常,内容大部份原创、SEO或者程序开发、网络营销、线上推广等相关行业即可。

常用工具

赞助广告

来看过哥的人