主机头

 找回密码
 立即注册
查看: 2635|回复: 0
打印 上一主题 下一主题

openresty防cc设置教程分享

[复制链接]

878

主题

2

好友

5472

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
楼主
发表于 2013-5-5 21:07:44 |只看该作者 |倒序浏览
CC很蛋疼。现在分享下LOC的一个朋友分享的。也保存下学习下。

本文介绍使用openresty来实现防cc攻击的功能。openresty官网http://openresty.org/cn/index.html。下面是防cc攻击的流程图。

根据流程图,我们知道防cc攻击主要包括两部分,一是限制请求速度,二是给用户发送js跳转代码进行验证请求是否合法。

一、安装依赖 centos:

yum install readline-devel pcre-devel openssl-devel

ubuntu:

apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl

二、luajit安装

cd /tmp/git clone http://luajit.org/git/luajit-2.0.gitcd luajit-2.0/make && make installln -sf luajit-2.0.0-beta10 /usr/local/bin/luajitln -sf /usr/local/lib/libluajit-5.1.so.2 /usr/lib/

三、openresty安装

cd /tmpwget http://agentzh.org/misc/nginx/ngx_openresty-1.2.4.13.tar.gztar xzf ngx_openresty-1.2.4.13.tar.gzcd ngx_openresty-1.2.4.13/./configure --prefix=/usr/local/openresty --with-luajitmake && 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_addrlocal limit = ngx.shared.limitlocal req,_=limit:get(ip)if req then    if req > 20 then        ngx.exit(503)    else        limit:incr(ip,1)    endelse    limit:set(ip,1,10)endlocal jsjump = ngx.shared.jsjumplocal uri = ngx.var.request_urilocal 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    endelse    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小时。



感谢支持主机头,如果有问题可以联系我的QQ。目前提供各种服务。
网站建设,网站优化,美国VPS购买,VPS环境配置等。
目前通过本站购买VPS的话,可以免费帮忙配置环境。
付费提供DISCUZ PW DEDECMS技术支持。
www.www88.me
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

主机头版权声明|百度地图|谷歌地图|Archiver|手机版|主机头

GMT+8, 2024-10-30 21:20

Powered by Discuz! www.zhujitou.com

© 2001-2012 主机头.

回顶部