收录拒绝指定ip请求黑名单lua脚本、拒绝ip频次请求的lua脚本
前言
最近对自己的博客EAMON (eamonjun.cn)加了个功能,基于OpenResty + Redis 动态封禁ip.
关于OpenResty了解一下,OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。
说实话对于lua脚本看是能看的懂的或者在一个成熟的脚本上做一些小的修改,但是全程写下来就有点费劲了,所以需要收集一些常用的脚本,以备不时之需。
lua脚本
拒绝指定ip请求黑名单lua脚本
local redis_host ="IP地址"
local redis_port ="端口号"--connection timeout for redis In ms. don't set this too high!
local redis_connection_timeout = 1000--check a set with this key for blacklist entries
local redis_key = "ip_blacklist"--cache lookups for this many seconds
local cache_ttl = 60--end configuration
local ip = ngx.var.remote_addr
local ip_blacklist = ngx.shared.ip_blacklist
local last_update_time = ip_blacklist:get("last_update_time");--only update ip_blacklist from Redis once every cache_ttl seconds:
if last_update_time == nil or last_update_time <(ngx.now() - cache_ttl) thenlocal redis = require('resty.redis');local red = redis:new();red:set_timeout(redis_connection_timeout);local ok, err = red:connect(redis_host,redis_port);if not ok thenngx.log(ngx.DEBUG, "Redis connection error while retrieving ip_blacklist: ".. err);elselocal new_ip_blacklist, err = red:smembers(redis_key);if err thenngx.log(ngx.DEBUG, "Redis read error while retrieving ip_blacklist: "..err);else--replace the locally stored ip blacklist with the updated valuesip_blacklist:flush_all();for index, banned_ip in ipairs(new_ip_blacklist) doip_blacklist:set(banned_ip, true);end --update timeip_blacklist:set("last_update_time", ngx.now());endend
endif ip_blacklist:get(ip) thenngx.log(ngx.DEBUG,"Banned IP detected and refused access: " .. ip);return ngx.exit(403);
end
拒绝ip频次请求的lua脚本
# Lua
local function close_redis(redcli) if not redcli then return end --释放连接(连接池实现) local pool_max_idle_time = 10000 --毫秒 local pool_size = 100 --连接池大小 local ok, err = redcli:set_keepalive(pool_max_idle_time, pool_size) if not ok then ngx_log(ngx_ERR, "set redis keepalive error : ", err) end
end -- 连接redis
local redis = require('resty.redis')
local redcli = redis.new()
redcli:set_timeout(1000) local ip = "ip地址"
local port = "端口号"
local ok, err = redcli:connect(ip,port)
if not ok then return close_redis(redcli)
end local clientIP = ngx.var.remote_addr -- increKey为请求频率,blackKey黑名单key
local incrKey = "user:"..clientIP..":request:frequency"
local blackKey = "user:"..clientIP..":black:list" local is_black,err = redcli:get(blackKey) if tonumber(is_black) == 1 then ngx.exit(403) close_redis(redcli)
end inc = redcli:incr(incrKey)
new_ip_blacklist = redcli:smembers("ip_blacklist")
ngx.say(inc)
ngx.say(new_ip_blacklist)if inc < 2 then inc = redcli:expire(incrKey,1)
end if inc > 2 then --每秒2次以上访问即视为非法,会阻止30s的访问 redcli:set(blackKey,1) redcli:expire(blackKey,30)
end close_redis(redcli)
(一)闲来无聊,去搭了个人博客网站_Eamon_Jun的博客-CSDN博客
(二)购买域名和ICP备案的流程以及遇到的问题
参考文章:
https://blog.csdn.net/weixin_43112000/article/details/86650107
https://www.sohu.com/a/276817238_468627
收录拒绝指定ip请求黑名单lua脚本、拒绝ip频次请求的lua脚本相关推荐
- java 使用Guava的RateLimiter做接口限流+redis的lua脚本做IP防刷
需求: 每个IP在指定的时间内可以请求某一个接口多少次,如果请求次数超过指定数,就返回拒绝信息 没做IP防刷之前,请求多了之后服务蹦了 做防刷之后 当然,还有限流 直接上代码 接口注解代码: imp ...
- 实现一个黑名单的功能,将指定来源的ip地址加入到黑名单,后续该ip地址访问服务器全部不予访问。
实现一个黑名单的功能,将指定来源的ip地址加入到黑名单,后续该ip地址访问服务器全部不予访问. 结构: 代码: BlackListListener.java @WebListener("/c ...
- wrk 使用lua脚本进行压测接口请求
lua脚本是一种轻量小巧的脚本语言,用标准c语言编写,并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为程序提供灵活的扩展和定制功能.wrk工具嵌入了lua脚本语言,因此,在自定义压测场景时, ...
- 原创powershell脚本:通过远程桌面3389黑名单,阻止黑客ip
远程桌面 3389 ban ip 防火墙 rdp 通过远程桌面3389黑名单,阻止黑客ip.这是一个常见的需求. 但我搜遍了谷歌也找不到成品脚本.想做搬运工却做不成,只能自己费尽写. 下载备用吧,估计 ...
- istio使用教程和示例(导流,请求路由,访问拒绝,黑白名单,限速)
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 Istio 对 Pod 和服务的要求 要成为服务网格的一部分,Kubernetes 集群中的 Pod 和服务必须满足以下几个要求: 需要给端口正确命名 ...
- nginx限制请求之四:目录进行IP限制
相关文章: <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <n ...
- php限制ip访问次数 并发_nginx限制ip请求次数 以及并发次数
如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见 ...
- 邮件黑名单系列文章十 : IP被UCEProtect列入黑名单
邮件服务器黑名单分两种: 1. 第三方公开的DNSBL(域名系统黑名单,也称为DNSBL或DNS黑名单)如http://www.dnsbl.info/ ,一但你被该组织列入黑名单,会导致引用该黑名单的 ...
- asp 检查黑名单_c# asp.net ip黑名单
短信验证码接口被恶意请求,写了一个简单的黑名单规则. 使用静态数组的形式实现,优点为不占用数据库资源且速度更快效率更高. 缺点为数据无持久化,网站重启后黑名单就清空了. 效果为: 如果指定时间内请求次 ...
最新文章
- h5如何动态获取键盘高度_动态获取键盘高度
- 手动清除后门程序Iexplores.exe
- 《企业云桌面实施》-小技巧-02-使用ISO光驱安装esxi6.5
- JMeter:负载测试关系数据库
- SQL Server 2005中专用管理员连接 (DAC) 使用技巧修改系统表的方法
- Heritrix 3.1.0 源码解析(十四)
- OpenCV-图像处理(07、绘制形状与文字)
- Python实现简易语音转文字功能模块
- iphone开发 加速计
- 极光推送 简书android,极光推送第一篇:配置
- html5 生日贺卡在线制作软件,可在线制作或打印的个性化照片贺卡
- SCSI——小型计算机系统接口
- 浅谈MyBatis中的resultMap(个人总结)
- 2023最新素材解析网站源码搭建和原理,附带PHP小例子。
- EXCEL 快速统计一列中相同数值出现的个数
- SQL中的WHILE循环使用
- python调用谷歌翻译__201907
- 关于计算机英语翻译,计算机的英文翻译是什么
- 告别XML,Android新声明式UI框架《Jetpack Compose入门到精通》最全开发指南
- 《数据包是如何在网络中传输的》TODO