nginx lua 配置cc 防攻击-使用lua 配置黑白名单

7 篇文章 0 订阅
5 篇文章 0 订阅

nginx lua 配置cc 防攻击-使用lua 配置黑白名单


cc 防攻击和ip 禁止期限

lua_shared_dict _dict 1m;
lua_shared_dict _blacklist 10m;
lua_shared_dict _whitelist 10m;
init_by_lua_file conf/lua/init.lua;
lua_package_path "/usr/local/nginx/conf/lua/?.lua;/usr/local/nginx/conf/channel/?.lua;";
location / {
    set_by_lua_file $cc_allow conf/lua/deny_cc.lua 300 60 300;
    if ($cc_allow == 1) {
        return 403;
    }    
}

init.lua

local whitelist = ngx.shared._whitelist
local config = require "whitelist"

for host, list in pairs(config.whitelist) do
    for j, ip in pairs(list) do
        local token = ip..host
        whitelist:set(token, true)
    end
end

whitelist.lua

_M_WHITELIST_ = {}
_M_WHITELIST_.whitelist = {
	["baidu.cn"] = {
		"1.1.1.1",
		"2.2.2.2"
	},
	["baidu.com"] = {
        "3.3.3.3",
        "4.4.4.4"
	}
}

deny_cc.lua

local token = ngx.var.remote_addr..ngx.var.host
local dict = ngx.shared._dict
local blacklist = ngx.shared._blacklist
local whitelist = ngx.shared._whitelist
local rate = tonumber(ngx.arg[1])
local seconds = tonumber(ngx.arg[2])
local duration = tonumber(ngx.arg[3])


local in_whitelist = whitelist:get(token)
if in_whitelist ~= nil then
    return 0
end

local in_blacklist, _ = blacklist:get(token)
if in_blacklist ~= nil then
    return 1
end

local req, _ = dict:get(token)
if req then
    dict:incr(token, 1)
    req = req + 1
    if req > rate then
        blacklist:set(token, true, duration)
        return 1
    end
else
    dict:set(token, 1, seconds)
end

return 0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值