OpenResty nginx擴充套件 實現防cc攻擊

2021-09-08 18:34:34 字數 2776 閱讀 1231

流程圖

本文介紹使用openresty來實現防cc攻擊的功能。openresty官網下面是防cc攻擊的流程圖。

根據流程圖,我們知道防cc攻擊主要包括兩部分,一是限制請求速度,二是給使用者傳送js跳轉**進行驗證請求是否合法。

安裝依賴

rhel/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

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

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:

/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)

endelse

limit:set(ip,1,10)

endlocal 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

local p_jskey=''

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

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

else

p_jskey=args["jskey"]

endif p_jskey and p_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..uri.."&jskey="..jspara

else

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

endlocal jscode="window.location.href='"..url.."';"

ngx.say(jscode)

endend

else

math.randomseed( os.time() );

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..uri.."&jskey="..random

else

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

endlocal jscode="window.location.href='"..url.."';"

ngx.say(jscode)

end

lua**部分解釋:

1、1-12行是限速功能實現,第5和第10行表示10秒鐘內容最多只能請求20次。

2、14-48行是驗證部分,24行中的3600表示驗證通過後,白名單時間為3600秒,即1小時。

update: 2013.5.26

1、修復js無限跳轉bug

2、增加隨機種子

openresty nginx 線上conf分析

今天在某業務中看到一些比較有學習意義的nginx配置,故拿出來解析一下。lua shared dict realtime variable 16m ngx lua模組中使用共享記憶體 lua shared dict lixian zone server gim schedule 100m ngx l...

5 openresty nginx命令 訊號控制

指令 nginx程式 c nginx配置檔案 usr local nginx sbin nginx c usr local nginx conf nginx.conf cd usr local nginx sbin 重啟 nginx s reload進入nginx可執行程式的目錄 cd usr lo...

SQL SERVER Buffer Pool擴充套件

buffer pool擴充套件是buffer pool 和非易失的ssd硬碟做連線。以ssd硬碟的特點來提高隨機讀效能。在buffer pool 擴充套件之前,sql server 從磁碟中讀入資料,並且存放在buffer pool中以供讀取和修改,修改完之後髒資料還是放在buffer pool中,...