博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenResty(nginx扩展)实现防cc攻击
阅读量:7111 次
发布时间:2019-06-28

本文共 2541 字,大约阅读时间需要 8 分钟。

hot3.png

OpenResty(nginx扩展)实现防cc攻击

作者: /分类:,  /Tag: 

文章目录

[隐藏]

防cc攻击,推荐使用

 

本文介绍使用来实现防cc攻击的功能。openresty官网。下面是防cc攻击的流程图。

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

一、安装依赖

centos:

  1. yum install readline-devel pcre-devel openssl-devel

:

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

二、luajit安装

  1. cd /tmp/

  2. git clone http://luajit.org/git/luajit-2.0.git

  3. cd luajit-2.0/

  4. make && make install

  5. ln -sf luajit-2.0.0-beta10 /usr/local/bin/luajit

  6. ln -sf /usr/local/lib/libluajit-5.1.so.2 /usr/lib/

三、openresty安装

  1. cd /tmp

  2. wget http://agentzh.org/misc/nginx/ngx_openresty-1.2.4.13.tar.gz

  3. tar xzf ngx_openresty-1.2.4.13.tar.gz

  4. cd ngx_openresty-1.2.4.13/

  5. ./configure --prefix=/usr/local/openresty --with-luajit

  6. make && make install

四、nginx配置

.conf:

  1. http{

  2. [......]

  3. lua_shared_dict limit 10m;

  4. lua_shared_dict jsjump 10m;

  5.  

  6.     server {

  7. #lua_code_cache off;

  8.         listen       80;

  9.         server_name  www.centos.bz;

  10.  

  11.         location / {

  12. default_type  text/html;

  13. content_by_lua_file "/usr/local/openresty/nginx/conf/lua";

  14.         }

  15.         location {

  16.             internal;

  17.             root   html;

  18.             index  index.html index.htm;

  19.         }

  20.     }

  21. }

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

  1. local ip = ngx.var.binary_remote_addr

  2. local limit = ngx.shared.limit

  3. local req,_=limit:get(ip)

  4. if req then

  5.         if req > 20 then

  6.                 ngx.exit(503)

  7.         else

  8.                 limit:incr(ip,1)

  9.         end

  10. else

  11.         limit:set(ip,1,10)

  12. end

  13.  

  14. local jsjump = ngx.shared.jsjump

  15. local uri = ngx.var.request_uri

  16. local jspara,flags=jsjump:get(ip)

  17. local args = ngx.req.get_uri_args()

  18. if jspara then

  19.     if flags then

  20.         ngx.exec("@cc")

  21.     else

  22.                 local p_jskey=''

  23.                 if args["jskey"] and type(args["jskey"])=='table' then

  24.                          p_jskey=args["jskey"][table.getn(args["jskey"])]

  25.                 else

  26.                          p_jskey=args["jskey"]

  27.                 end

  28.         if p_jskey and p_jskey==tostring(jspara) then

  29.                         jsjump:set(ip,jspara,3600,1)

  30.                         ngx.exec("@cc")

  31.         else

  32.                         local url=''

  33.                         if ngx.var.args then

  34.                                 url=ngx.var.scheme.."://"..ngx.var.host..uri.."&jskey="..jspara

  35.                         else

  36.                                 url=ngx.var.scheme.."://"..ngx.var.host..uri.."?jskey="..jspara

  37.                         end

  38.                         local jscode="<script>window.location.href='"..url.."';</script>"

  39.                         ngx.say(jscode)

  40.         end

  41.     end

  42. else

  43. math.randomseed( os.time() );

  44.     local random=math.random(100000,999999)

  45.     jsjump:set(ip,random,60)

  46.     local url=''

  47.     if ngx.var.args then

  48.         url=ngx.var.scheme.."://"..ngx.var.host..uri.."&jskey="..random

  49.     else

  50.         url=ngx.var.scheme.."://"..ngx.var.host..uri.."?jskey="..random

  51.     end

  52.     local jscode="<script>window.location.href='"..url.."';</script>"

  53.     ngx.say(jscode)

  54. end

lua代码部分解释:

1、1-12行是限速功能实现,第5和第10行表示10秒钟内容最多只能请求20次。
2、14-48行是验证部分,24行中的3600表示验证通过后,白名单时间为3600秒,即1小时。

update: 2013.5.26

1、修复JS无限跳转bug
2、增加随机种子

转载请标明文章来源:《》

 

转载于:https://my.oschina.net/epiclight/blog/425538

你可能感兴趣的文章
三、Hadoop命令
查看>>
moment.js笔记
查看>>
2.1 Word 插入 smartart、图表
查看>>
css+div的存在问题
查看>>
PoEdu - C++阶段班【Po学校】- Lesson03-4_构造函数&赋值函数&拷贝构造函数&学习方式 - 第6天...
查看>>
通过url给action传中文参数乱码解决方案
查看>>
糊涂窗口综合症
查看>>
Hadoop的调度器总结(转)
查看>>
Linux磁盘空间被未知资源耗尽
查看>>
英语基础
查看>>
核心动画 - CAKeyframeAnimation 简单应用
查看>>
html的marquee理解
查看>>
区块链中的密码学
查看>>
大数据第七天
查看>>
放新浪微博的箭头css写法
查看>>
H5视频推流方案
查看>>
struts2获得需要的文件或者访问路径
查看>>
python 读写CSV文件
查看>>
Linux tar解压出错
查看>>
unity中利用纯物理工具制作角色移动跳跃功能
查看>>