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.在操作系统层面 ...
随机推荐
- Linux内核之I2C协议
I2C协议标准文档 THE I2C-BUS SPECIFICATION VERSION 2.1 JANUARY 2000: https://www.csd.uoc.gr/~hy428/reading/ ...
- 创建第一个springmvc程序
创建第一个springmvc程序 1.创建父项目文件,导入依赖,删除src文件夹 pom.xml文件 <dependencies> <dependency> <group ...
- 01 elasticsearch学习笔记-环境安装
docker-compose安装EFK git clone https://github.com/haimait/docker_compose_efk docker-compose up -d Flu ...
- 仿网易云音乐-微信小程序开发
1.很多时候要找到完整的API接口很难,但网易云音乐的数据API是可以得到完整的. 安装API:https://github.com/Binaryify/NeteaseCloudMusicApi,只需 ...
- virtualbox Ubuntn配置多站点
1.编辑站点文件: nano /etc/nginx/sites-available/default cd /etc/nginx/sites-available/ ls2. 把default的设置文件 ...
- PageOffice6 实现 word 全文检索
在文档服务器中存储有成千上万个文档的情况下,用户想要找到并打开包含特定关键字的文档,无疑是一项艰巨的任务.如何高效地管理和检索大量的Word文档呢? 在现有的技术解决方案中,许多方法都依赖于服务器端的 ...
- 部署Zabbix
https://blog.csdn.net/qq_57414752/article/details/125819822
- ubuntu18.04最小化安装
ubuntu 18.04虚拟机安装 镜像下载地址: https://releases.ubuntu.com/18.04/ubuntu-18.04.6-live-server-amd64.iso 创建虚 ...
- GK2023游记
不会有人高考之后二十多天才更博客吧...(写的很烂,单纯想补个坑) 大概就是写一下纯 whk 的高三生活,是不是流水账无所谓,就算当个记录了 高三生活开头就不太平,高三的班主任和高二一样(姑且叫他 田 ...
- 深度学习论文翻译解析(二十二):Uniformed Students Student-Teacher Anomaly Detection With Discriminative Latent Embbeddings
论文标题:Uniformed Students Student-Teacher Anomaly Detection With Discriminative Latent Embbeddings 论文作 ...