Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Nginx 通过 Lua + Redis 实现动态封禁 IP

Nginx 通过 Lua + Redis 实现动态封禁 IP

作者头像
后端技术探索
发布于 2018-12-17 03:31:23
发布于 2018-12-17 03:31:23
1.7K0
举报
文章被收录于专栏:后端技术探索后端技术探索

一、背景

为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝提供服务。

二、架构

实现 IP 黑名单的功能有很多途径:

1、在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求;

2、在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单;

3、在应用层面,在请求服务之前检查一遍客户端 IP 是否在黑名单。

为了方便管理和共享,我们通过 Nginx+Lua+Redis 的架构实现 IP 黑名单的功能,架构图如下:

三、实现

1、安装 Nginx+Lua模块,推荐使用 OpenResty,这是一个集成了各种 Lua 模块的 Nginx 服务器:

OpenResty

2、安装并启动 Redis 服务器;

3、配置 Nginx 示例:

其中

lua_shared_dict ip_blacklist 1m;

由 Nginx 进程分配一块 1M 大小的共享内存空间,用来缓存 IP 黑名单,参见:

https://github.com/openresty/lua-nginx-module#lua_shared_dict

access_by_lua_file lua/ip_blacklist.lua;

指定 lua 脚本位置

4、配置 lua 脚本,定期从 Redis 获取最新的 IP 黑名单,文件内容参见:

https://gist.github.com/Ceelog/39862d297d9c85e743b3b5111b7d44cb

5、在 Redis 服务器上新建 Set 类型的数据 ip_blacklist,并加入最新的 IP 黑名单。

完成以上步骤后,重新加载 nginx,配置便开始生效了

这时访问服务器,如果你的 IP 地址在黑名单内的话,将出现拒绝访问:

四、总结

以上,便是 Nginx+Lua+Redis 实现的 IP 黑名单功能,具有如下优点:

1、配置简单、轻量,几乎对服务器性能不产生影响;

2、多台服务器可以通过Redis实例共享黑名单;

3、动态配置,可以手工或者通过某种自动化的方式设置 Redis 中的黑名单。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nginx 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Nginx 通过 Lua + Redis 实现动态封禁 IP
导读:在私有云中服务器被恶意请求时候,如何快速建立动态IP黑名单,拒绝提供服务?总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发 。
码农架构
2022/03/10
8480
Nginx 通过 Lua + Redis 实现动态封禁 IP
Nginx 通过 Lua + Redis 实现动态封禁 IP
为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝提供服务。
猫头虎
2024/04/07
7230
Nginx 通过 Lua + Redis 实现动态封禁 IP
本文将带领大家精读3个Nginx Lua编程实战案例,学不会就来砍我
接口(或者页面)的访问统计是网站运营和优化的一个重要参考数据,对于分布式接口可以通过Nginx+Redis架构来简单实现分布式受访统计。
愿天堂没有BUG
2022/10/28
1K0
本文将带领大家精读3个Nginx Lua编程实战案例,学不会就来砍我
分布式--OpenResty+lua+Redis实现限流与防爬虫
上篇分布式--OpenResty+lua+Redis中,我们了解了nginx结合lua脚本的强大之处,lua结合反向代理,可以对http请求提前做一些处理,来保证业务服务器的安全性和单一职责原则,以及结合Redis提升读写缓存的效率与持久化能力
aruba
2022/09/01
9620
分布式--OpenResty+lua+Redis实现限流与防爬虫
Nginx + Lua + Redis:打造智能 IP 黑名单系统
在Web服务中,为了防止恶意用户或爬虫对服务器造成不必要的负载和潜在的安全威胁,我们可以通过设置动态IP黑名单来拒绝来自这些IP的请求。本文将详细介绍如何使用Nginx配合Lua脚本及Redis数据库实现这一功能,并允许为每个被封禁的IP设定失效时间。
凯哥Java
2024/10/26
2450
Nginx + Lua + Redis:打造智能 IP 黑名单系统
【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
Bug开发工程师
2020/07/24
8820
【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!
nginx嵌入lua设置IP黑名单
nginx嵌入lua设置IP黑名单 准备工作 结合redis缓存实现IP黑名单 docker 安装 redis 服务 使用redis集合数据类型存储IP 安装redis # 命令来查看可用版本 docker search redis # 拉取官方的最新版本的镜像 docker pull redis:latest # 查看是否已安装了 redis docker images #运行redis容器 #–-requirepass 设置密码 #–-appendonly 开启redis 持久化 docker run
友儿
2022/09/13
1.3K0
nginx+lua实现简单的waf网页防火墙功能
参考地址:http://www.2cto.com/Article/201303/198425.html
保持热爱奔赴山海
2019/09/18
1.8K0
nginx+lua实现简单的waf网页防火墙功能
一文从原理到实践教你使用Nginx_lua实现WAF
过去企业通常会采用防火墙,作为安全保障的第一道防线;当时的防火墙只是在第三层(网络层)有效的阻断一些数据包;而随着web应用的功能越来越丰富的时候,Web服务器因为其强大的计算能力,处理性能,蕴含较高的价值,成为主要的被攻击目标(第七层应用层)而传统防火墙在阻止利用应用程序漏洞进行的攻击方面,却没有办法;在此背景下,WAF(Web Application Firewall)应运而生。
公众号: 云原生生态圈
2022/02/16
3K0
openresty基于lua/geoIp/redis实现ip限制
一、问题背景二、聊一嘴ip库三、解决方案四、下载安装openresty五、验证效果六、geoIp自动更新七、参考
叔牙
2023/02/26
4.6K0
openresty基于lua/geoIp/redis实现ip限制
nginx lua软waf应用防火墙 (Openresty)
现在企业的业务出口基本是http/https其他内部端口都可以在设备acl和iptables访问控制;那主要的web出口如何做安全防护?? 我们使用nginx lua 来实现web软waf。
以谁为师
2019/05/30
3.2K0
自建WAF系统
OpenResty 是一个基于 Nginx 的 Web 应用服务器,它将 Nginx 与一组强大的 Lua 模块集成在一起,提供了高性能、可扩展和灵活的 Web 开发环境。OpenResty 的目标是通过编写简洁的 Lua 代码来构建高性能的 Web 应用,而无需额外的服务器端脚本语言。
用户1423082
2024/12/31
2200
基于openresty防护源站
网站是一个企业或者团队的重要资产,源码也是开发人员和团队辛苦劳作的成果,对于后端服务,用户几乎触摸不到源码,但是对于前端页面,用户访问网站时会有最直接的接触,稍微有技术经验的用户可以通过浏览器的机制来查看页面源码,也有一些黑灰团队专门用爬虫扒别人的网站,然后包装成自己的产品,实现商业效益。
叔牙
2024/06/26
2730
基于openresty防护源站
Nginx与Lua
火云邪神语录:天下武功,无坚不破,唯快不破!Nginx的看家本领就是速度,Lua的拿手好戏亦是速度,这两者的结合在速度上无疑有基因上的优势。
LA0WAN9
2021/12/14
5370
Centos7安装openresty实现WAF防火墙功能
OpenResty® 是一个结合了 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。 OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
星哥玩云
2022/05/30
2.5K0
Centos7安装openresty实现WAF防火墙功能
Nginx添加开源防火墙(waf)防护
由于原生态的Nginx的一些安全防护功能有限,就研究能不能自己编写一个WAF,参考Kindle大神的ngx_lua_waf,自己尝试写一个了,使用两天时间,边学Lua,边写。不过不是安全专业,只实现了一些比较简单的功能:
王先森sec
2023/04/24
2.9K0
Nginx添加开源防火墙(waf)防护
记一次博客被群压的经历
前段时间,博客和论坛都放到的阿里云新购的三年 T5 实例服务器上,等都转移过去才发现,所谓的 T5 实例只能满足10% 的 CPU 峰值。期间经历了各种卡顿、死机,最终又把博客单独迁移了回来。静态文件走 CDN,文章都 Redis,以为万事大吉了就。
凯哥Java
2019/06/28
4390
记一次博客被群压的经历
每个后端都应该了解的OpenResty入门以及网关安全实战
在官网上对 OpenResty 是这样介绍的(http://openresty.org):
wayn
2023/10/25
1.6K0
每个后端都应该了解的OpenResty入门以及网关安全实战
nginx编译安装ngx_lua模块
nginx lua模块淘宝开发的nginx第三方模块,它能将lua语言嵌入到nginx配置中,从而使用lua就极大增强了nginx的能力.
老高的技术博客
2022/12/28
6980
OpenResty实战系列 | Nginx Lua API 接口开发
OpenResty 为开发者提供了一系列强大的API,这些API使得Lua脚本能够与Nginx紧密交互,从而高效地执行多种Web服务器任务。在处理Web服务器的核心工作流程中,主要包括三个环节:接收请求、处理请求以及输出响应。在接收请求时,我们能够获取到请求参数、请求头部以及请求体等关键信息。处理请求则涉及执行特定的Lua代码逻辑。至于输出响应,则需要设定响应状态码、自定义响应头部以及构造响应内容体。
Tinywan
2024/07/16
4360
OpenResty实战系列 | Nginx Lua API 接口开发
相关推荐
Nginx 通过 Lua + Redis 实现动态封禁 IP
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档