实现动态封禁 IP就是这么简单~

开发者(KaiFaX)

面向全栈工程师的开发者
专注于前端、Java/Python/Go/PHP的技术社区

原文:https://segmentfault.com/a/1190000018267201

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

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

1、在操作系统层面,配置 iptables,拒绝指定 IP 的网络请求;
2、在 Web Server 层面,通过 Nginx 自身的 deny 选项 或者 lua 插件 配置 IP 黑名单;
3、在应用层面,在请求服务之前检查一遍客户端 IP 是否在黑名单。

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

c0f15830e03c85aea4abd47560a6fe2c.png

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

32341a99b62c24af52ab5c483a565f30.png

2. 安装并启动 Redis 服务器

3. 配置 Nginx 示例:

93618b4b6b6865a23f129dfba399096a.png

Nginx 配置,其中

lua_shared_dict ip_blacklist 1m

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

access_by_lua_file lua/ip_blacklist.lua;

指定 lua 脚本位置。

4. 配置 lua 脚本,定期从 Redis 获取最新的 IP 黑名单。

9e148c206c10a13f661abca6ed0e8d48.png

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

完成以上步骤后,重新加载 nginx,配置便开始生效了。这时访问服务器,如果你的 IP 地址在黑名单内的话,将出现拒绝访问,如下图:

df8b7274861e6ba0a08347870938ec06.png

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

1. 配置简单、轻量,几乎对服务器性能不产生影响;
2. 多台服务器可以通过Redis实例共享黑名单;
3. 动态配置,可以手工或者通过某种自动化的方式设置 Redis 中的黑名单。


1. 回复“m”可以查看历史记录;

2. 回复“h”或者“帮助”,查看帮助;

   开发者已开通多个技术群交流学习,请加若飞微信:1321113940  (暗号k)进开发群学习交流

  说明:我们都是开发者。视频或文章来源于网络,如涉及版权或有误,请您与若飞(1321113940)联系,将在第一时间删除或者修改,谢谢!

f1a2415ed25a2040c648302dd37870dc.png

开 发 者 : KaiFaX

面向全栈工程师的开发者
专注于前端、Java/Python/Go/PHP的技术社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62315.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ngnix 实现IP封禁以及自动封禁IP

1.在ngnix的conf目录下创建一个blockip.conf文件 2.里面放需要封禁的IP,格式如下 deny 1.2.3.4; 3.在ngnix的HTTP的配置中添加如下内容 include blockips.conf;4.重启 ngnix /usr/local/nginx/sbin/nginx -s reload5.然后你就会看到IP被封禁了,你会…

Ngnix IP封禁以及实现自动封禁IP

1.在ngnix的conf目录下创建一个blockip.conf文件 2.里面放需要封禁的IP,格式如下 deny 1.2.3.4;3.在ngnix的HTTP的配置中添加如下内容 include blockips.conf;4.重启 ngnix /usr/local/nginx/sbin/nginx -s reload然后你就会看到IP被封禁了,你会喜提…

研究生论文阅读总结

UWB与协同定位 UWBUltra-Wideband Aided Fast Localization and Mapping System概要uwb权值设计平滑项权值设计 Integrated UWB-Vision Approach for Autonomous Docking of UAVs in GPS-denied Environments概要加定高雷达的改变 Robust Target-relative Localization with Ul…

考研复试-密码学(对比总结版本)

密码学 对称加密算法非对称加密算法(公开密钥算法)哈希算法(单向散列算法、杂凑函数)其他 各种算法介绍就不总结了,主要列举一些基本要点,方便对比记忆 对称加密算法 DES 密文长度(每组&#x…

深大计算机复试,20考研深大成功,分享考研复试考研经验!自我检讨

上次复试的时候,鸽了一天,很抱歉,后面说了会写一期的复试体会,现在就补上,其实说实话,我这次考研也是几番跌宕起伏,小心脏有点受不住了。 复试内容: 首先先说考试的内容吧&#xff0…

1. 考研常见问题总结 从择校到复试

文章目录 前言 1. 考研流程? 2. 如何选择学校? 3. 如何选择专业? 4. 选择学校还是选择专业? 5. 如何查专业资料?考试科目等。 6. 如何复习,准备初试? 7. 复试流程? 8…

考研复试问题汇总

计算机考研复试问题总结 文章目录 计算机考研复试问题总结一 . 计算机网络1.TCP连接建立(三次握手)2.TCP连接释放(四次挥手)3.计算机网络的主要功能?4.谈下你对五层网络协议体系结构的理解?七层协议理解 5.…

即便考分很好也不予录取的研究生复试红线,都是原则性问题

在浙大研究生招生录取政策文件中有这么一句话:坚持“按需招生、全面衡量、择优录取、宁缺毋滥”的原则,以提高人才选拔质量为核心,在确保安全性、公平性和科学性的基础上,做到统筹兼顾、精准施策、严格管理。字字体现出研究生招生…

研究生期间论文发表经验总结

文章目录 前言(一志愿未录取,走的调剂)一、研究生论文及成果1.中科院二区SCI英文论文2.中科院三区SCI英文论文3.北大核心期刊论文 二、经验分享1.第一篇SCI论文(二区英文论文)第一次返回大修:第二次返回大修…

详细分析DaSiamRPN,快速把握论文要点,不会请砍我!

文章目录 整体把握训练集修改的创新点出发点修改 论文代码:https://github.com/foolwood/DaSiamRPN 论文题目:Distractor-aware Siamese Networks for Visual Object Tracking 整体把握 本篇论文赢得了vot2018短时跟踪比赛的冠军,长时跟踪比…

应用统计432考研复试提问总结精简版【二】

一、自由度是什么? 定义:构成样本统计量的独立的样本观测值的数目解释:从书中所给的平均数的角度进行 二、讲一下对t检验的理解? t检验适用于两个变量均数间的差异检验。同时用t检验的前提下:正态性和方差齐性。t检…

本科论文常见答辩问题整理

这里写目录标题 专业性问题你系统的整体设计是怎么样?用了什么技术?这些技术应用的好处是什么?框架,SSM,SSH这些有什么优势。前端,前端用了什么;你数据库整体的设计是怎么样的,某个表…

iPhone苹果下载skype for business和skype有什么区别?苹果iPhone手机iOS系统如何下载Skype到iPhone苹果手机?

skype for business和skype有什么区别? 在国内iPhone苹果手机App Store上搜索:Skype,找不到真证的Skype,只能找到skype for business(以前称为Lync 2013); 而skype for business却不是一部分人…

1. 区块链项目开发常见错误-1-npm ERR! missing script: start

本节主要讨论在通过npm start 时,出现“npm ERR! missing script: start“错误 出现这个错误的常见原因是 在package.json中没有配置start 在通过truffle创建项目时,可以通过 1. truffle unbox webpack 通过这种方式创建的项目package.json的结构如下…

反编译微信小程序(支持分包)

手机端 小程序源文件具体本地目录: /data/data/com.tencent.mm/MicroMsg/018fd*****/appbrand/pkg/ 找到对应的包发送到电脑(如发送不了,压缩即可) 电脑端 环境:win7、10Node.js反编译脚本 1.下载反编译脚本并安装依赖 在反编译脚本目录…

反编译微信小程序工具之抓取小程序图片素材详细教程

一、关于软件 说明:本工具仅限学习使用,禁止使用此方法盗取他人的开发成果。由于经常反编译小程序,都是通过命令操作完成,步骤比较繁琐,故本人只好利用空闲时间对其进行小幅度修改,水平有限,经…

如何扒微信小程序源码

一.使用模拟器找到小程序.wxapkg文件(雷电模拟器为例或者夜神模拟器) 1.1在雷电模拟器中安装微信和文件管理器(RE管理器) 1.2登陆微信打开一个小程序 1.3在RE资源管理器找到小程序.wxapkg文件路径为/data/data/com.tencent.mm/Mi…

PC端使用微信小程序反编译工具的问题记录

PC端小程序路径:D: \用户\文档\WeChat Files\Applet\wx378xxxxxxxxxxxx0 通过查看修改日期确认自己要用到的小程序。 打开过的小程序建议移除掉之后重新添加小程序,小程序包回自动下载到目录下,这个时候把这个包复制出来进行反编译即可&…

VX小程序反编译

小程序反编译是是小程序测试必不可少的部分,接下来就让我们探讨其中一种反编译方式吧,以下纯属小分享,谢谢!!! 相关工具及链接: 链接:https://pan.baidu.com/s/1wutUCKbwrU-URD_RF…

微信小程序 - 实现简单登录和个人信息页面

接上节简单介绍完wxml,这节实际运用小程序的wxml来实现一套简单登录和个人信息展示。 微信个人信息获取接口已变更,请转移查看官方获取接口,本文仅作参考。小程序登录、用户信息相关接口调整说明 登录页面 创建好项目后,在page…