概述
1.安装openresty
安装依赖
# yum -y install pcre-devel zlib-devel openssl-devel
官网:http://openresty.org/cn/download.html
1.15版本:https://openresty.org/download/openresty-1.15.8.2.tar.gz
# cd /software
# wget https://openresty.org/download/openresty-1.15.8.2.tar.gz
# tar xvf openresty-1.15.8.2.tar.gz
# cd openresty-1.15.8.2
# ./configure && make && make install
2.写一个lua脚本
默认openresty安装在/usr/local/下
# vi /usr/local/openresty/waf_lua
着重填写前五行,其他直接复制
local ip = "127.0.0.1" -- redis服务器IP
local port = 6379 -- redis端口号
local passwd = 123 -- redis密码
local times = 3 -- redis访问次数限制
local expire_time = 600 -- redis拉黑时间/秒
------------------------------------
local function close_redis(red)
if not red then
return
end
local pool_max_idle_time = 10000
local pool_size = 100
local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)
if not ok then
ngx_log(ngx_ERR, "set redis keepalive error : ", err)
end
end
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000)
local ok, err = red:connect(ip,port)
if not ok then
return close_redis(red)
end
red:auth(passwd);
local clientIP = ngx.req.get_headers()["X-Real-IP"]
if clientIP == nil then
clientIP = ngx.req.get_headers()["x_forwarded_for"]
end
if clientIP == nil then
clientIP = ngx.var.remote_addr
end
local incrKey = "user:"..clientIP..":freq"
local blockKey = "user:"..clientIP..":block"
local is_block,err = red:get(blockKey) -- check if ip is blocked
if tonumber(is_block) == 1 then
ngx.exit(ngx.HTTP_FORBIDDEN)
return close_redis(red)
end
res, err = red:incr(incrKey)
if res == 1 then
res, err = red:expire(incrKey,1)
end
if res > times then
res, err = red:set(blockKey,1)
res, err = red:expire(blockKey,expire_time)
end
close_redis(red)
修改配置文件
# vim /usr/local/openresty/nginx/conf/nginx.conf
location / {
index index.html index.html;
access_by_lua_file /usr/local/openresty/waf_lua;
}
或者将这句access_by_lua_file放在您需要限制起访问的location中。
开启服务
# /usr/local/openresty/bin/openresty
3.验证
用浏览器访问主页,快速刷新,一会就403限制了。
从redis服务器中可以看到
1) "user:10.1.1.1:block"
被拉黑了。
最后
以上就是温柔枫叶为你收集整理的openresty+redis 限制访问,Web应用型防火墙,WAF的全部内容,希望文章能够帮你解决openresty+redis 限制访问,Web应用型防火墙,WAF所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复