前言

最近对自己的博客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脚本相关推荐

  1. java 使用Guava的RateLimiter做接口限流+redis的lua脚本做IP防刷

    需求: 每个IP在指定的时间内可以请求某一个接口多少次,如果请求次数超过指定数,就返回拒绝信息 没做IP防刷之前,请求多了之后服务蹦了 做防刷之后 当然,还有限流 直接上代码  接口注解代码: imp ...

  2. 实现一个黑名单的功能,将指定来源的ip地址加入到黑名单,后续该ip地址访问服务器全部不予访问。

    实现一个黑名单的功能,将指定来源的ip地址加入到黑名单,后续该ip地址访问服务器全部不予访问. 结构: 代码: BlackListListener.java @WebListener("/c ...

  3. wrk 使用lua脚本进行压测接口请求

    lua脚本是一种轻量小巧的脚本语言,用标准c语言编写,并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为程序提供灵活的扩展和定制功能.wrk工具嵌入了lua脚本语言,因此,在自定义压测场景时, ...

  4. 原创powershell脚本:通过远程桌面3389黑名单,阻止黑客ip

    远程桌面 3389 ban ip 防火墙 rdp 通过远程桌面3389黑名单,阻止黑客ip.这是一个常见的需求. 但我搜遍了谷歌也找不到成品脚本.想做搬运工却做不成,只能自己费尽写. 下载备用吧,估计 ...

  5. istio使用教程和示例(导流,请求路由,访问拒绝,黑白名单,限速)

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 Istio 对 Pod 和服务的要求 要成为服务网格的一部分,Kubernetes 集群中的 Pod 和服务必须满足以下几个要求: 需要给端口正确命名 ...

  6. nginx限制请求之四:目录进行IP限制

    相关文章: <高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <n ...

  7. php限制ip访问次数 并发_nginx限制ip请求次数 以及并发次数

    如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见 ...

  8. 邮件黑名单系列文章十 : IP被UCEProtect列入黑名单

    邮件服务器黑名单分两种: 1. 第三方公开的DNSBL(域名系统黑名单,也称为DNSBL或DNS黑名单)如http://www.dnsbl.info/ ,一但你被该组织列入黑名单,会导致引用该黑名单的 ...

  9. asp 检查黑名单_c# asp.net ip黑名单

    短信验证码接口被恶意请求,写了一个简单的黑名单规则. 使用静态数组的形式实现,优点为不占用数据库资源且速度更快效率更高. 缺点为数据无持久化,网站重启后黑名单就清空了. 效果为: 如果指定时间内请求次 ...

最新文章

  1. h5如何动态获取键盘高度_动态获取键盘高度
  2. 手动清除后门程序Iexplores.exe
  3. 《企业云桌面实施》-小技巧-02-使用ISO光驱安装esxi6.5
  4. JMeter:负载测试关系数据库
  5. SQL Server 2005中专用管理员连接 (DAC) 使用技巧修改系统表的方法
  6. Heritrix 3.1.0 源码解析(十四)
  7. OpenCV-图像处理(07、绘制形状与文字)
  8. Python实现简易语音转文字功能模块
  9. iphone开发 加速计
  10. 极光推送 简书android,极光推送第一篇:配置
  11. html5 生日贺卡在线制作软件,可在线制作或打印的个性化照片贺卡
  12. SCSI——小型计算机系统接口
  13. 浅谈MyBatis中的resultMap(个人总结)
  14. 2023最新素材解析网站源码搭建和原理,附带PHP小例子。
  15. EXCEL 快速统计一列中相同数值出现的个数
  16. SQL中的WHILE循环使用
  17. python调用谷歌翻译__201907
  18. 关于计算机英语翻译,计算机的英文翻译是什么
  19. 告别XML,Android新声明式UI框架《Jetpack Compose入门到精通》最全开发指南
  20. 《数据包是如何在网络中传输的》TODO

热门文章

  1. iPhoneX APP界面设计尺寸图-庞姿姿
  2. 模拟频率、数字频率、模拟角频率之间的关系
  3. 频率换算:模拟频率、模拟角频率、数字频率
  4. iOS动画:3D动画(18)
  5. Google guava学习
  6. 英文学习——100个经典句型
  7. TikTok Shop(英国小店)常见问题:退货?结算?回款?等。
  8. python爬京东延迟加载_python大规模爬取京东
  9. 整理外企常用英语及其缩写
  10. Python应用之批量打水印