bunkerweb/lua/behavior.lua

36 lines
1.1 KiB
Lua
Raw Normal View History

2021-05-19 09:11:18 +00:00
local M = {}
local logger = require "logger"
function M.is_banned ()
return ngx.shared.behavior_ban:get(ngx.var.remote_addr) == true
end
function M.count (status_codes, threshold, count_time, ban_time)
for k, v in ipairs(status_codes) do
if v == tostring(ngx.status) then
local count = ngx.shared.behavior_count:get(ngx.var.remote_addr)
if count == nil then
count = 0
end
count = count + 1
local ok, err = ngx.shared.behavior_count:set(ngx.var.remote_addr, count, count_time)
if not ok then
2021-05-19 09:11:18 +00:00
logger.log(ngx.ERR, "BEHAVIOR", "not enough memory allocated to behavior_ip_count")
2021-10-06 13:41:55 +00:00
return false
end
if count >= threshold then
2021-05-19 09:11:18 +00:00
logger.log(ngx.WARN, "BEHAVIOR", "threshold reached for " .. ngx.var.remote_addr .. " (" .. count .. " / " .. threshold .. ") : IP is banned for " .. ban_time .. " seconds")
local ok, err = ngx.shared.behavior_ban:safe_set(ngx.var.remote_addr, true, ban_time)
if not ok then
2021-05-19 09:11:18 +00:00
logger.log(ngx.ERR, "BEHAVIOR", "not enough memory allocated to behavior_ip_ban")
2021-10-06 13:41:55 +00:00
return false
end
2021-10-06 13:41:55 +00:00
return true
end
2021-10-06 13:41:55 +00:00
return false
end
end
end
return M