Nginx+Fail2ban 实现同一ip在一分钟内连续三次请求同一接口并响应成功时进行封禁
1. 安装 Fail2Ban 和 Nginx
如果尚未安装 Fail2Ban 和 Nginx,可以使用以下命令进行安装:
# CentOS默认的仓库中可能不包含Nginx,所以需要添加EPEL(Extra Packages for Enterprise Linux)仓库。
sudo yum install epel-release、
# 安装 Fail2Ban 和 Nginx
sudo yum install fail2ban nginx
2. 确认 Nginx 日志文件位置
确保 Nginx 正在生成访问日志和错误日志,默认情况下,这些日志位于 /var/log/nginx/access.log 和 /var/log/nginx/error.log。
3. 配置 Fail2Ban 监控 Nginx 日志
3.1 创建 Nginx 过滤器(filter)
创建一个新的过滤器文件以检测恶意行为,例如:/etc/fail2ban/filter.d/nginx-ql-reg-sms.conf
sudo nano /etc/fail2ban/filter.d/nginx-ql-reg-sms.conf
nginx-ql-reg-sms.conf内容如下
[Definition]
failregex = ^<HOST> - - .* "GET /api/platform/staff/register/.* HTTP/.*" 200
ignoreregex =
3.2 创建触发过滤器的处理方式(action)
sudo nano /etc/fail2ban/filter.d/nginx-ql-reg-sms-block.conf
nginx-ql-reg-sms-block.conf内容如下:主要是定义了封禁和解禁的动作,封禁时往blockedips.conf中追加一个ip,解禁时移除blockedips.conf中对应的ip
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = echo "deny <ip>;" >> /etc/nginx/blockedips.conf && nginx -s reload
actionunban = sed -i "/deny <ip>;/d" /etc/nginx/blockedips.conf && nginx -s reload
Nginx中的 deny 命令
deny 命令用于拒绝特定的IP地址或IP范围访问某些资源。在Nginx中,deny 指令通常配合 allow 指令使用,以控制对特定资源的访问权限。
使用 deny 命令的场景
封禁特定IP地址:
拒绝某些恶意IP地址的访问。
控制访问权限:
限制内部资源只允许特定IP访问,其他IP一律拒绝。
基本语法
# <address> 可以是单个IP地址、CIDR格式的IP地址范围,或者all(表示拒绝所有访问)。
deny <address>;
# 拒绝单个IP地址访问
location / {
deny 192.168.1.1;
allow all;
}
# 拒绝IP地址范围访问
location / {
deny 192.168.1.0/24;
allow all;
}
# 只允许特定IP地址访问,其他全部拒绝
location /admin {
allow 192.168.1.100;
deny all;
}
3.3使用自定义的过滤器和处理方式
编辑/etc/fail2ban/jail.local,在末尾加上如下配置
#是自定义监控项的名称。
[nginx-ql-reg-sms]
#启用监控项
enabled = true
# 指定使用创建的过滤器文件
filter = nginx-ql-reg-sms
#定义了触发封禁时执行的动作
action = nginx-ql-reg-sms-block
#指定 Nginx 访问日志的位置
logpath = /var/log/nginx/access.log
#在 findtime 时间内允许的最大重试次数
maxretry = 3
#检测时间窗口为 60 秒,即一分钟内
findtime = 60
#封禁时间为 3600 秒(即 1 小时)
bantime = 60
3.4 nginx中对指定接口进行拦截配置
# 在对应的server块中配置具体的接口
location /api/platform/staff/register/ {
# 引入封禁IP列表
include /etc/nginx/blockedips.conf;
proxy_pass http://172.16.0.5:93/api/platform/staff/register/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Cookie $http_cookie;
}
4. 常用命令
4.1 启动和重启 Fail2Ban 服务
# 配置修改后,需要启动或重启 Fail2Ban 服务:
sudo systemctl restart fail2ban
# nginx配置修改后需要重载配置
/usr/sbin/nginx -t # 检查配置是否合法
/usr/sbin/nginx -s reload 重载配置
你可以使用以下命令检查 Fail2Ban 的状态,确保其正常运行:
sudo systemctl status fail2ban
4.2 查看所有封禁的 IP
列出所有监狱:首先,列出所有启用的 Fail2Ban 监狱:
sudo fail2ban-client status
查看特定监狱的详细信息:接下来,查看特定监狱的状态和封禁的 IP 地址。例如,要查看 nginx-api-platform-staff-register 监狱的状态:
sudo fail2ban-client status nginx-ql-reg-sms
4.3 解禁IP
如果需要解封某个 IP,可以使用以下命令:
sudo fail2ban-client set nginx-ql-reg-sms unbanip <IP_ADDRESS>
4.4 查看 Fail2Ban 的状态
# 用来检测当前过滤器在nginx访问日志中是否有匹配数据
sudo fail2ban-client status nginx-ql-reg-sms
Nginx+Fail2ban 实现同一ip在一分钟内连续三次请求同一接口并响应成功时进行封禁的更多相关文章
- Redis 在java中的使用(登录验证,5分钟内连续输错3次密码,锁住帐号,半小时后解封)(三)
在java中使用redis,做简单的登录帐号的验证,使用string类型,使用redis的过期时间功能 1.首先进行redis的jar包的引用,因为用的是springBoot,springBoot集成 ...
- 一分钟内搭建全web的API接口神器json-server详解
JSON-Server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源. 安装json-server npm install -g json ...
- django 实现同一个ip十分钟内只能注册一次
很多小伙伴都会有这样的问题,说一个ip地址十分钟内之内注册一次,用来防止用户来重复注册带来不必要的麻烦 逻辑: 取ip,在数据库找ip是否存在,存在判断当前时间和ip上次访问时间之差,小于600不能注 ...
- nginx环境安装配置fail2ban屏蔽攻击ip
安装 fail2ban yum install -y epel-release yum install -y fail2ban 设置 Nginx 的访问日志格式 这个是设置 fail2ban 封禁 ...
- nginx 限制及指定IP或IP段访问
nginx 限制及指定IP或IP段访问. location / { deny 192.168.1.1; allow ; allow ; deny all; } 企业问题案例:Nginx做反向代理的时候 ...
- nginx反向代理取得IP地址
nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递 ...
- Nginx负载均衡反向代理 后端Nginx获取客户端真实IP
Nginx 反向代理后,后端Nginx服务器无法正常获取客户端的真实IP nginx通过http_realip_module模块来实现的这需要重新编译,如果提前编译好了就无需重新编译了1,重新编译ng ...
- django 实现同一个ip十分钟内只能注册一次(redis版本)
上一篇文章,django 实现同一个ip十分钟内只能注册一次 的时候,我们在注册的时候选择使用的使我们的数据库来报错我们的注册的ip信息,可是如果数据量大,用户多的时候,单单靠我们的数据库 来储存我们 ...
- nginx获取上游真实IP(ngx_http_realip_module)
realip模块的作用是:当本机的nginx处于一个反向代理的后端时获取到真实的用户IP,如果没有realip模块,nginx的access_log里记录的IP会是反向代理服务器的IP,PHP中$_S ...
- Nginx 通过 Lua + Redis 实现动态封禁 IP
一.背景 为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP ,拒绝提供服务. 二.架构 实现 IP 黑名单的功能有很多途径: 1.在操作系统层面 ...
随机推荐
- Pod进阶篇-Pod生命周期和健康探测以及startupProbe(6)
一.Pod容器探测和钩子 1.1 容器钩子:postStart和preStop postStart:容器创建成功后,运行前的任务,用于资源部署.环境准备等. preStop:在容器被终止前的任务,用于 ...
- SqlServer使用总结
-- 新增主键,系统随机取名 ALTER TABLE "T_CS1" ADD PRIMARY KEY CLUSTERED ("ID1", "ID2&q ...
- 使用Lagent AgentLego 搭建智能体-书生浦语大模型实战营第二期第6节作业
书生浦语大模型实战营第二期第6节作业 对于这个作业,这里只给出截图,不给详细过程,因为确实没有什么好写的,会做Demo那个作业就会做这个作业.具体的步骤可以查看官方教程. 基础作业 完成 Lagent ...
- ansible系列(28)--ansible的playbook异常处理
目录 1. playbook的异常处理 1.1 Playbook错误忽略 1.2 task执行失败强制调用handlers 1.3 控制Tasks报告状态为OK 1.4 changed_when检查任 ...
- linux打包压缩工具详解
linux打包压缩工具详解 目录 linux打包压缩工具详解 1.linux文件压缩工具 1.1 compress命令详解 1.2 gzip命令详解 1.3 bzip2命令详解 1.4 xz命令详解 ...
- centos7桌面版安装百度网盘
百度网盘官网下载Linux版本的软件 CentOS7的软件包格式为rpm # 安装依赖 yum -y install libXScrnSaver yum -y install libstdc++.so ...
- 腾讯、阿里、B站最新面经汇总,有的妥妥的凉经
除了BAT(没错我说的B是B站的B),还有网易.希音科技.美柚等中小厂的最新面经. 这次投稿的同学行文幽默风趣,处处透漏着不成功便搞笑的骚气. 祝他早日上岸,也欢迎大家在评论区讨论这些面试题,有哪些面 ...
- selenium遇到手机验证码怎么解决
完整代码在: selenium使用案例 解决思路,点击发送送验证码,程序用input方法去和人进行交互,手动输入验证码,按回车键,这样程序就接收到手机验证码了,再把验证码赋值给验证码框,继续往下操作 ...
- 【论文阅读】VulCNN受图像启发的可扩展漏洞检测系统
基本信息 摘要 由于深度学习(DL)可以自动从源代码中学习特征,因此已被广泛用于源代码漏洞检测.为了实现可扩展的漏洞扫描,一些先前的研究打算通过将源代码视为文本来直接处理源代码.为了实现准确的漏洞检测 ...
- Python作图三维等高面
技术背景 对于等高线,大家都是比较熟悉的,因为日常生活中遇到的山体和水面,都可以用一系列的等高线描绘出来.而等高面,顾名思义,就是在三维空间"高度一致"的曲面.当然了,在二维平面上 ...