背景

为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 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 服务器:

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

3、配置 Nginx 示例:

Nginx 配置

其中

lua_shared_dict ip_blacklist 1m;

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

access_by_lua_file lua/ip_blacklist.lua;

指定 lua 脚本位置。

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

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

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

总结

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

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

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

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

爬虫或恶意攻击,如何动态屏蔽IP地址?相关推荐

  1. Android动态屏蔽IP地址

    我们想实现这样一个需求:当Android设备假待机(屏幕休眠)的时候,屏蔽某些IP地址,唤醒时解除屏蔽.同时要屏蔽的IP可以动态配置. 一.如何屏蔽IP地址 这里就要使用到iptables防火墙工具. ...

  2. linux wifi ip,Linux环境下使用WIFI模块:使用DHCP工具动态获得IP地址

    使用DHCP工具动态获得IP地址 实验版本及下载地址 DHCP:dhcp-4.4.1.tar.gz 链接: [https://www.isc.org/downloads/] 编译安装DHCP 配置编译 ...

  3. Nginx 屏蔽ip地址的方法

    转载来源 ; Nginx 屏蔽ip地址的方法 : http://www.safebase.cn/article-258999-1.html 摘要: 在网站维护过程中,有时候我们需要对一些IP地址或是一 ...

  4. Android中如何屏蔽IP地址

    前言 前几篇介绍了iptables | 路由策略 | DNS等相关理论基础知识,现在在这基础上,去学习安卓的网络框架并应用这些知识点.Android的网络框架可以细分很多部分,按功能分的话,可以分网络 ...

  5. 思科dhcp服务器动态获取ip地址

    项目要求: 某公司共有网管中心.行政部.技术部.三个部门,分别处在一栋大楼中的两个楼层,为了保证公司内部主机始终能够连接Internet,采用双向冗余设计,分别使用路由器R1与路由器R2连接中国电信和 ...

  6. Linux批量拉黑ip,在Linux下实现批量屏蔽IP地址的方法

    Netfilter/IPtables 的问题 在Linux中,可以很简单地用netfilter/iptables框架禁止IP地址: 代码如下: $ sudo iptables -A INPUT -s ...

  7. centos7安装dhcp服务器并由客户端动态获取IP地址

    主机架构: 角色 ip地址 网关 dhcp服务器 192.168.8.81 192.168.8.1 客户机1 动态获取 192.168.8.81 客户机2 192.168.8.99 192.168.8 ...

  8. 屏蔽武汉ip地址 php,wordpress如何限制屏蔽IP地址

    垃圾评论一直是很多人包括我都很头疼的问题,虽然一直在使用强大的Akismet插件,但要想完全的防止垃圾评论的骚扰似乎并不是想象中的那么容易. 从今天开始,我们将针对垃圾评论的问题进行一系列的探讨,希望 ...

  9. 服务器屏蔽ip地址访问站点,宝塔控制面板怎么屏蔽IP地址访问网站

    今天查看服务器状态,不小心误点了服务器的IP地址,然后居然能打开,,,OMG,怎么会这样,这怎么行呢?所以得修改以下配置文件,不让IP地址访问,至于为什么不让IP访问,有很多解释,其中最重要的就是防止 ...

最新文章

  1. C/C++中static关键字用法汇总
  2. (踩坑回忆录)Dva踩坑与解决方案
  3. Java Error(一)
  4. 计算机游戏 综述,计算机游戏对玩家认知能力影响的研究综述
  5. 【BZOJ3879】SvT,后缀数组+单调栈维护sum
  6. POJ1060 HDU1343 ZOJ1026 UVALive2323 Modular multiplication of polynomials题解
  7. esp8266教程:esp8266使用mqtt连接百度智能云
  8. mysql建考勤信息代码_C++嵌入式SQL写考勤/点名功能程序
  9. 哲学家就餐问题python解决_哲学家进餐问题-3中解决方案
  10. 相片打印机原理_【视界网】什么是便携式打印机以及工作原理有哪些呢?
  11. 今天是10月24日程序员节,祝所有程序员节日快乐!
  12. VSCode折叠所有区域代码快捷键
  13. SCC算法求强连通分量简单讲解证明及实现
  14. 大众点评数据爬虫思路[更新版]
  15. php 验证邮箱 php验证手机号码 ph验证身份证
  16. AMD处理器下虚拟机VMware15安装macOS 10.14
  17. 数据结构-青蛙杯棒球比赛
  18. 安排软件保护服务在 2022-07-26T23:00:43Z 时重新启动成功。原因: RulesEngine
  19. 那些年啊,那些事——一个程序员的奋斗史 ——127
  20. Pytest学习笔记4——测试步骤

热门文章

  1. 那个计算机应用没有广告,为什么别人的电脑没有什么广告,而你的电脑一大堆呢?答案在这里...
  2. java体重指数计算器程序_育儿 - 低体重儿和巨大儿的危害
  3. 无线红外探测器04:产品测试及验证
  4. 单步调试_keil for arm 调试时无法单步运行及打断点
  5. PTA基础编程题目集-6-8 简单阶乘计算
  6. python自动生成测试报告步骤_生成HTMLTestRunner测试报告的操作步骤——Python+selenium自动化...
  7. html5 lineheight属性,HTML中line-height的继承
  8. html中隐藏溢出怎么写,html-如何隐藏表行溢出?
  9. 计算机班级logo设计图案简单,班级的标志设计的简洁好看图片
  10. python交互式窗口怎么换行_Python多版本情况下四种快速进入交互式命令行的操作技巧