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.在操作系统层面 ...
随机推荐
- 【AI新趋势期刊#2】AI发明计算机算法,如何给大模型排行,照片秒变二维码,视频一键动漫风
前言 每天都要浏览大量AI相关新闻,是不是感到信息量爆炸,有效信息少? 这么多新产品和新工具,到底哪些是真正是有价值的,哪些只是浮躁的一时热点? 想参与AI产品和工具的开发,从哪里能够获得大量的灵感和 ...
- .Net 8.0 下的新RPC,IceRPC之使用Dev Containers进行 .NET QUIC 精简开发
作者引言 很高兴啊,我们来到了IceRPC之使用Dev Containers进行 .NET QUIC 精简开发,主要是一篇指引,如何使用开发容器做为开发环境,进行开发IceRPC,可适用于任务应用的开 ...
- 构造照亮世界——快速沃尔什变换 (FWT)
博客园 我的博客 快速沃尔什变换解决的卷积问题 快速沃尔什变换(FWT)是解决这样一类卷积问题: \[c_i=\sum_{i=j\odot k}a_jb_k \] 其中,\(\odot\) 是位运算的 ...
- NVCC编译选项含义解析
NVCC编译 nvcc 是cuda程序的编译器. 1. 编译阶段 用于指定编译阶段最基本的编译参数. -c: 同gcc,只预处理.编译和汇编为.o文件,不link -lib:生成一个库文件,windo ...
- mac更新nodejs
查看本机node.js版本: node -v 清除node.js的cache:sudo npm cache clean -f 安装 n 工具:sudo npm install -g n 安装最新版本的 ...
- python教程1.1:环境安装+代码编辑器安装
1.环境安装 打开官⽹ https://www.python.org/downloads/windows/ 下载中 下载后执⾏,点击下⼀步安装就⾏,注意选择添加Python到当前⽤户环境变量 2.代码 ...
- grads读取nc格式文件
一.通常: 1.grads读取grd和ctl:open ****.ctl 2.执行gs脚本:run ****.gs d命令,display展示数据,常用来显示变量,比如rh,rain等 q命令, ...
- css样式相关的惊艳的属性
CSS gap 简写属性用于设置行与列之间的间隙(网格间距). 规范的早期版本将该属性命名为 grid-gap,且为了保持与旧网站的兼容性,浏览器仍然会接受 grid-gap 作为 gap 的别名. ...
- PageOffice在线打开 word 文件,并且禁止复制
在线打开 word 禁用拷贝的三种方式: 1 使用 AllowCopy 属性,效果:所有的 word 进程都不能进行拷贝操作 2 禁止 word 选择功能,效果:因为无法选择,所以无法拷贝 3 使用 ...
- 详解Spring循环依赖
一. 什么是循环依赖 循环依赖,就是两个或则两个以上的bean互相依赖对方,最终形成闭环.比如"A对象依赖B对象,而B对象也依赖A对象",或者"A对象依赖B对象,B对象依 ...