Redis(01)Redis连接报错Redis is running in protected mode……的解决方案

news2025/4/24 19:45:34

一、引言:从一个典型连接错误说起

在分布式系统开发中,Redis 作为高性能缓存中间件被广泛使用。
然而,当我们首次部署 Redis 并尝试从外部客户端连接时,常常会遇到以下错误:

DENIED Redis is running in protected mode because protected mode is enabled and no password is set for the default user. In this mode connections are only accepted from the loopback interface.

这个错误看似简单,却涉及 Redis 安全机制的核心设计。

本文将深入解析 Redis 保护模式的原理、触发条件,并提供四种实战解决方案,同时结合生产环境最佳实践,帮助你全面理解和解决 Redis 外部连接问题。

二、Redis 保护模式原理与触发条件

2.1 保护模式的设计初衷

Redis 自 3.2 版本引入保护模式(Protected Mode),旨在解决用户因配置疏忽导致的安全漏洞。其核心逻辑是:当 Redis 未进行任何安全配置(如未设置密码、未绑定特定 IP)时,默认仅允许本地环回接口(Loopback Interface)访问,拒绝所有外部连接,从而避免公开网络中的未授权访问。

2.2 触发保护模式的三大条件

保护模式的激活需同时满足以下三个条件:

未设置访问密码:配置文件中 requirepass 未定义或为空。

未绑定具体 IP:默认绑定 127.0.0.1,或 bind 配置中未包含外部可访问的 IP 地址。

未禁用保护模式:配置文件中 protected-modeyes(默认值)。

2.3 保护模式下的连接限制

允许的连接:仅本地环回地址(127.0.0.1::1)的连接请求。

拒绝的连接:所有来自外部网络的 TCP 连接请求,即使 Redis 服务监听在 0.0.0.0 端口。

三、四种实战解决方案详解

3.1 方案一:通过命令临时关闭保护模式(测试场景)

适用场景

临时本地调试,需快速验证 Redis 功能。

仅建议在开发环境使用,严禁用于生产环境。

操作步骤

本地连接 Redis通过 redis-cli 从服务器本地发起连接:

redis-cli -h 127.0.0.1 -p 6379

若提示 (error) DENIED,说明保护模式已生效,但本地环回连接仍允许(因保护模式不限制本地访问)。

执行配置命令关闭保护模式在 Redis 命令行中输入:

CONFIG SET protected-mode no

命令执行后,保护模式立即关闭,允许外部连接。

验证配置状态

CONFIG GET protected-mode

# 预期输出:1) "protected-mode" 2) "no"

(可选)永久保存配置若希望重启后配置生效,需执行:

CONFIG REWRITE

该命令会将临时配置写入 Redis 配置文件(redis.conf)。

风险提示

关闭保护模式后,若 Redis 暴露在公网且未设置密码,可能导致数据泄露或被恶意攻击。

此方案仅适用于短期测试,完成验证后应立即恢复保护模式或设置密码。

3.2 方案二:修改配置文件永久关闭保护模式(开发环境)

适用场景

开发或测试环境,需长期允许外部无密码访问。

不建议用于生产环境,除非已通过其他方式(如防火墙)严格限制访问。

操作步骤

1、定位 Redis 配置文件

Linux 系统:通常位于 /etc/redis/redis.conf/usr/local/etc/redis.conf

Windows 系统:默认路径为 C:\Program Files\Redis\redis.windows.conf

2、编辑配置文件使用文本编辑器打开配置文件,搜索 protected-mode 配置项:

# 原值(默认)

protected-mode yes

# 修改后

protected-mode no

3、重启 Redis 服务

Linux(以 systemd 为例):

sudo systemctl restart redis

Windows:通过服务管理器找到 Redis 服务,点击 “重启”;或在命令行重新运行:

redis-server.exe "C:\Program Files\Redis\redis.windows.conf"
安全建议

若必须在开发环境关闭保护模式,建议同时配置 bind 限制允许的 IP 地址,例如:

bind 192.168.1.100  # 仅允许指定 IP 访问

结合防火墙规则,禁止公网访问 Redis 端口,仅允许内网可信 IP 连接。

3.3 方案三:启动时临时禁用保护模式(单次测试)

适用场景

仅需单次启动时允许外部连接(如临时演示、脚本测试)。

无需修改配置文件,快速验证场景。

操作步骤

在启动 Redis 服务时,通过命令行参数显式禁用保护模式:

# Linux 命令

redis-server --port 6379 --protected-mode no

# Windows 命令(需在 redis-server.exe 所在目录执行)

redis-server.exe redis.windows.conf --protected-mode no
注意事项

此参数仅在当前进程有效,Redis 服务重启后会恢复默认的保护模式。

不建议在生产环境中使用此方法,避免因进程重启导致配置丢失。

3.4 方案四:为 Redis 设置访问密码(生产环境推荐)

适用场景

所有生产环境,尤其是暴露在公网或复杂网络环境中的 Redis 实例。

需兼顾安全性与外部访问需求的最佳实践。

操作步骤

配置文件中设置密码编辑 redis.conf,找到 requirepass 配置项(默认被注释),取消注释并设置强密码:

# 原值
# requirepass foobared
# 修改后(替换为强密码,如包含大小写字母、数字、特殊符号)
requirepass YourStrongPassword123!

重启 Redis 服务使配置生效执行重启命令(参考方案二),确保密码配置加载成功。

客户端连接时携带密码

命令行连接

redis-cli -h <服务器IP> -p 6379 -a YourStrongPassword123!

应用程序配置(以 Spring Boot 为例):

spring.redis.password=YourStrongPassword123!

验证密码有效性连接后执行 PING 命令,若返回 PONG,表示认证成功:

127.0.0.1:6379> PING

PONG
安全增强措施

结合 bind 配置限制 IP:在 redis.conf 中指定允许访问的 IP 地址,例如:

bind 192.168.1.100 10.0.0.5  # 允许多个内网 IP 访问

启用 SSL 加密连接:通过 rediss:// 协议或代理(如 stunnel)实现客户端与 Redis 之间的流量加密,防止密码明文传输。

定期轮换密码:使用配置管理工具(如 Ansible、Vault)定期更新密码,避免长期使用固定密码。

四、方案对比与最佳实践

4.1 方案对比表格

方案安全性复杂度持久性适用场景
临时命令关闭简单临时(需重启)本地测试、短期验证
配置文件关闭中等永久开发环境、受限内网
启动参数关闭简单单次启动临时演示、脚本测试
设置密码中等永久生产环境、公网部署

4.2 生产环境最佳实践

强制设置强密码避免使用默认密码或简单密码,建议密码长度不少于 16 位,包含多种字符类型。

限制绑定 IP禁止使用 bind ``0.0.0.0 暴露所有 IP 接口,应指定具体的内网 IP 或子网,例如:

bind 10.0.0.0/8  # 允许 10.0.0.0 网段的所有 IP 访问

防火墙与安全组配置

云服务器中,仅放行指定客户端 IP 的 TCP 6379 端口入站规则。

禁止公网直接访问 Redis 端口,通过 VPN 或内网负载均衡器中转连接。

启用 ACL 访问控制Redis 6.0+ 引入 ACL(Access Control Lists)功能,可创建细粒度权限的用户,例如:

ACL SETUSER admin on # 允许 admin 用户执行所有命令

ACL SETUSER readonly \~\* +GET -SET # 只读用户,仅允许 GET 命令

定期审计与监控使用 redis-audit 等工具记录命令执行日志,监控异常连接尝试和高频操作,及时发现潜在攻击。

五、常见问题与进阶解决方案

5.1 问题:设置密码后仍无法连接

可能原因

密码错误:检查配置文件中 requirepass 的值与客户端输入是否一致。

端口未放行:防火墙或安全组阻止了 TCP 6379 端口。

保护模式未完全关闭:若同时满足保护模式触发条件(如未绑定 IP),即使设置密码,仍可能拒绝外部连接。

解决方法:执行 redis-cli -h ``127.0.0.1`` -a <密码> CONFIG GET protected-mode,确认保护模式为 no,并检查 bind 配置是否允许客户端 IP。

5.2 问题:保护模式关闭后,公网仍无法连接

可能原因

Redis 服务未监听在公网 IP:默认监听 127.0.0.1,需在 bind 中添加公网 IP 或 0.0.0.0

云服务器安全组限制:例如阿里云默认禁止 Redis 端口公网访问,需手动添加安全组规则。

解决方法

# 修改 redis.conf 监听所有接口

bind 0.0.0.0

并在云厂商控制台放行 TCP 6379 端口的入站规则。

5.3 进阶:使用 Docker 部署 Redis 时的安全配置

若通过 Docker 运行 Redis,需注意:

容器端口映射:避免直接映射 6379 端口到宿主机公网,建议通过 Docker 网络隔离或代理服务访问。

配置文件挂载:将本地加密后的 redis.conf 挂载到容器中,避免密码泄露在镜像中。

FROM redis:latest

COPY redis.conf /usr/local/etc/redis/redis.conf

CMD \["redis-server", "/usr/local/etc/redis/redis.conf"]

✍结尾

🀙🀚🀛🀜🀝🀞🀟🀠🀡🀐🀑🀒🀓🀔🀕🀖🀘🀗🀏🀎🀍🀌🀋🀊🀉🀈🀇🀆🀅🀃🀂🀁🀀🀄︎🀢🀣🀥🀤🀦🀧🀨🀩🀪

📘 妹妹听后点了点头,脸上露出了满意的笑容。她轻声说道:“原来如此,谢谢你,鸽鸽。看来我不仅要多读书,还要多动手实践,提升自己才行。”

看着她那充满求知欲的眼神,我不禁感叹,学习之路虽然充满挑战,但有这样一位美丽聪慧的伙伴相伴,一切都变得格外有意义。快去和妹妹一起实践一下吧!

求赞图

📘相关阅读⚡⚡

笔者 綦枫Maple 的其他作品,欢迎点击查阅哦~:
📚Jmeter性能测试大全:Jmeter性能测试大全系列教程!持续更新中!
📚UI自动化测试系列: Selenium+Java自动化测试系列教程❤
📚移动端自动化测试系列:Appium自动化测试系列教程
📚Postman系列:Postman高级使用技巧系列


👨‍🎓作者:綦枫Maple
🚀博客:CSDN、掘金等
🚀CSDN技术社区:https://bbs.csdn.net/forums/testbean
🚀网易云音乐:https://y.music.163.com/m/user?id=316706413
🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。
🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系处理。
🀐其他:若有兴趣,可以加文章结尾的Q群,一起探讨学习哦~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

18487.1-2015-解读笔记之四-交流充电之流程分析

前面简单分析了国标交流充电桩插枪监测逻辑和PWM控制逻辑&#xff0c;下面简单分析一下交流充电流程 附录A 交流充电连接过程和控制时序如下&#xff1a; 由此可以将充电流程大概分为几个阶段&#xff1a; 1.充电连接阶段 充电连接阶段CC&#xff08;电阻由无穷大到R4RC&…

Linux 管道理解

一、什么是管道 1.1 unix中最古老的进程间通信 1.2 一个进程链接到另一个进程的数据流称为“管道”&#xff1a; 图解&#xff1a; 二、管道通信的原理 2.1当我们创建一个进程然后打开一个文件的时候 会经过以下步骤&#xff1a; ①首先要描述这个进程&#xff0c;为这个…

国产RK3568+FPGA以 ‌“实时控制+高精度采集+灵活扩展”‌ 为核心的解决方案

RK3568FPGA方案在工业领域应用的核心优势 一、‌实时性与低延迟控制‌ ‌AMP架构与GPIO中断技术‌ 通过非对称多处理架构&#xff08;AMP&#xff09;实现Linux与实时操作系统&#xff08;RTOS/裸机&#xff09;协同&#xff0c;主核负责调度&#xff0c;从核通过GPIO中断响应紧…

Pycharm(十五)面向对象程序设计基础

目录 一、面向对象基本概述 class 类名: 属性(类似于定义变量) 行为(类似于定义函数,只不过第一个形参要写self) 二、self关键字介绍 三、在类内部调用类中的函数 四、属性的定义和调用 五、魔法方法init方法 六、魔法方法str和del方法 七、案例-减肥 一、…

华三(H3C)与华为(Huawei)设备配置IPsec VPN的详细说明,涵盖配置流程、参数设置及常见问题处理

以下是针对华三&#xff08;H3C&#xff09;与华为&#xff08;Huawei&#xff09;设备配置IPsec VPN的详细说明&#xff0c;涵盖配置流程、参数设置及常见问题处理&#xff1a; 一、华三&#xff08;H3C&#xff09;设备IPsec VPN配置详解 1. 配置流程 华三IPsec VPN配置主要…

店匠科技摘得 36 氪“2025 AI Partner 创新大奖”

全场景 AI 方案驱动跨境电商数智化跃迁 4 月 18 日,36 氪 2025 AI Partner 大会于上海盛大开幕。大会紧扣“Super App 来了”主题,全力探寻 AI 时代的全新变量,探索 AI 领域下一个超级应用的无限可能性。在此次大会上,跨境电商独立站 SaaS 平台店匠科技(Shoplazza)凭借“店匠跨…

Joint communication and state sensing under logarithmic loss

摘要——我们研究一种基本的联合通信与感知设置&#xff0c;其中发射机希望向接收机传输一条消息&#xff0c;并同时通过广义反馈估计其信道状态。我们假设感知目标是获得状态的软估计&#xff08;即概率分布&#xff09;&#xff0c;而非通常假设的点估计&#xff1b;并且我们…

Linux:41线程控制lesson29

1.线程的优点&#xff1a; • 创建⼀个新线程的代价要⽐创建⼀个新进程⼩得多 创建好线程只要调度就好了 • 与进程之间的切换相⽐&#xff0c;线程之间的切换需要操作系统做的⼯作要少很多 为什么&#xff1f; ◦ 最主要的区别是线程的切换虚拟内存空间依然是相同的&#x…

HTMLCSS实现网页轮播图

网页中轮播图区域的实现与解析 在现代网页设计中&#xff0c;轮播图是一种常见且实用的元素&#xff0c;能够在有限的空间内展示多个内容&#xff0c;吸引用户的注意力。下面将对上述代码中轮播图区域的实现方式进行详细介绍。 一、HTML 结构 <div class"carousel-c…

Java基础第21天-正则表达式

正则表达式是对字符串执行模式匹配的技术 如果想灵活的运用正则表达式&#xff0c;必须了解其中各种元字符的功能&#xff0c;元字符从功能上大致分为&#xff1a; 限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 转义号\\:在我们使用正则表达式去检索某些特…

CSGO 盲盒开箱系统技术实现深度解析

一、系统架构设计 &#xff08;一&#xff09;前后端分离架构 采用前后端分离模式&#xff0c;后端专注业务逻辑处理与数据管理&#xff0c;前端负责用户交互界面呈现。后端通过 RESTful API 与前端进行数据交互&#xff0c;这种架构能有效提高开发效率&#xff0c;便于团队分…

JS通过GetCapabilities获取wms服务元数据信息并在SuperMap iClient3D for WebGL进行叠加显示

获取wms服务元数据信息并在三维webgl客户端进行叠加显示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

7N60-ASEMI无人机专用功率器件7N60

编辑&#xff1a;LL 7N60-ASEMI无人机专用功率器件7N60 型号&#xff1a;7N60 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大漏源电流&#xff1a;7A 漏源击穿电压&#xff1a;600V 批号&#xff1a;最新 RDS&#xff08;ON&#xff09;Max&#xff1a;1.20Ω …

Pytorch图像数据转为Tensor张量

PyTorch的所有模型&#xff08;nn.Module&#xff09;都只接受Tensor格式的输入&#xff0c;所以我们在使用图像数据集时&#xff0c;必须将图像转换为Tensor格式。PyTorch提供了torchvision.transforms模块来处理图像数据集。torchvision.transforms模块提供了一些常用的图像预…

Java 加密与解密:从算法到应用的全面解析

Java 加密与解密&#xff1a;从算法到应用的全面解析 一、加密与解密技术概述 在当今数字化时代&#xff0c;数据安全至关重要。Java 加密与解密技术作为保障数据安全的关键手段&#xff0c;被广泛应用于各个领域。 加密是将明文数据通过特定算法转换为密文&#xff0c;使得…

Java基础系列-HashMap源码解析2-AVL树

文章目录 AVL树左旋右旋左旋右旋的4种情况LL 型RR 型LR 型RL 型 实际插入时怎么判断是那种类型&#xff1f;插入时注意事项删除节点 AVL树 为避免BST树退化成链表的极端情况&#xff0c; AVL 树应运而生。 平衡因子取值&#xff08;-1&#xff0c;0&#xff0c;1&#xff09;…

MySQL的日志--Redo Log【学习笔记】

MySQL的日志--Redo Log 知识来源&#xff1a; 《MySQL是怎样运行的》--- 小孩子4919 MySQL的事务四大特性之一就是持久性&#xff08;Durability&#xff09;。但是底层是如何实现的呢&#xff1f;这就需要我们的Redo Log&#xff08;重做日志&#xff09;闪亮登场了。它记录着…

【AI应用】免费代码仓构建定制版本的ComfyUI应用镜像

免费代码仓构建定制版本的ComfyUI应用镜像 1 创建代码仓1.1 注册登陆1.2 创建代码仓1.5 安装中文语言包1.4 拉取ComfyUI官方代码2 配置参数和预装插件2.1 保留插件和模型的版本控制2.2 克隆插件到代码仓2.2.1 下载插件2.2.2 把插件设置本仓库的子模块管理3 定制Docker镜像3.1 创…

​​Agentic AI——当AI学会主动思考与决策,世界将如何被重塑?

一、引言&#xff1a;2025&#xff0c;Agentic AI的元年 “如果ChatGPT是AI的‘聊天时代’&#xff0c;那么2025年将开启AI的‘行动时代’。”——Global X Insights[1] 随着Agentic AI&#xff08;自主决策型人工智能&#xff09;的崛起&#xff0c;AI系统正从被动应答的“工具…

Ollama API 应用指南

1. 基础信息 默认地址: http://localhost:11434/api数据格式: application/json支持方法: POST&#xff08;主要&#xff09;、GET&#xff08;部分接口&#xff09; 2. 模型管理 API (1) 列出本地模型 端点: GET /api/tags功能: 获取已下载的模型列表。示例:curl http://lo…