当前位置:首页 > 编程笔记 > 正文
已解决

基于openresty waf二次开发多次匹配到的ip再做拉黑

来自网友在路上 172872提问 提问时间:2023-11-04 11:05:18阅读次数: 72

最佳答案 问答题库728位专家为你答疑解惑

我们想在openresty waf的基础上做二次开发,比如再精确一些。比如我们先匹配到了select的url我们先打分10分,匹配到cc 1000/s我们再给这个ip打10分…直到100分我们就拉黑这个ip。

[openresty waf][1]

#cat reids_w.lua
require 'lib'
local redis = require "resty.redis"
function redis_hash_ip(white)local red = redis:new()local ok, err = red:connect("192.168.14.66", 6379)if not ok thenngx.log(ngx.ERR, "Failed to connect to Redis: ", err)return false, "Failed to connect to Redis"end-- 认证Redis-- local res, err = red:auth("123456lzx")-- if not res then--   ngx.log(ngx.ERR, "Failed to authenticate Redis: ", err)--   return false, "Failed to authenticate Redis"-- end-- 检查列表中是否已存在要添加的值local exists, err = red:lrange(get_client_ip(), 0, -1)if exists thenfor _, v in ipairs(exists) doif v == white then-- 如果要添加的值已经存在于列表中,则直接返回red:set_keepalive(10000, 100)return true, nilendendend-- 如果要添加的值不存在于列表中,则将其添加到列表头部local res, err = red:lrem(get_client_ip(), 0, white)if res < 0 thenngx.log(ngx.ERR, "Failed to remove value from Redis list: ", err)return false, "Failed to remove value from Redis list"endlocal success, err = red:lpush(get_client_ip(), white)if not success thenngx.log(ngx.ERR, "Failed to set value in Redis lpush: ", err)return false, "Failed to set value in Redis lpush"end-- 关闭Redis连接red:set_keepalive(10000, 100)return true, nil
endfunction redis_select()local red = redis:new()local ok, err = red:connect("192.168.14.66", 6379)if not ok thenngx.log(ngx.ERR, "Failed to connect to Redis: ", err)return ngx.exit(500)endlocal res, err = red:lrange(get_client_ip(), 0, -1)if not res thenreturn nil, "Failed to query Redis list: " .. errelsefor _, v in ipairs(res) dongx.log(ngx.INFO, "List value: ", v)endend-- 关闭 Redis 连接(重用连接池中的连接)red:set_keepalive(10000, 100)return res, nilend

![2023-11-03T08:07:54.png][2]

![2023-11-03T08:08:20.png][3]

![2023-11-03T09:17:30.png][4]

请求url触犯代码

http://192.168.14.66 一分钟多访问一些,触发cc
http://192.168.14.66/.bash_history/ 触发url
...

查看redis里面是否写入数据,这是存得list数据,用ip做的name,然后那些触发得规则放在一个list里面。

![2023-11-03T09:12:30.png][5]

查看日志查出来的结果

![2023-11-03T09:15:45.png][6]

然后我们就可以根据redis里面的客户ip做打分机制,当然这只是一个基础版本

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"基于openresty waf二次开发多次匹配到的ip再做拉黑":http://eshow365.cn/6-31759-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!