Redis(01)Redis连接报错Redis is running in protected mode……的解决方案
一、引言:从一个典型连接错误说起
在分布式系统开发中,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-mode 为 yes(默认值)。
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> PINGPONG
安全增强措施
结合 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:latestCOPY redis.conf /usr/local/etc/redis/redis.confCMD \["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群,一起探讨学习哦~
相关文章:
Redis(01)Redis连接报错Redis is running in protected mode……的解决方案
一、引言:从一个典型连接错误说起 在分布式系统开发中,Redis 作为高性能缓存中间件被广泛使用。 然而,当我们首次部署 Redis 并尝试从外部客户端连接时,常常会遇到以下错误: DENIED Redis is running in protected m…...
18487.1-2015-解读笔记之四-交流充电之流程分析
前面简单分析了国标交流充电桩插枪监测逻辑和PWM控制逻辑,下面简单分析一下交流充电流程 附录A 交流充电连接过程和控制时序如下: 由此可以将充电流程大概分为几个阶段: 1.充电连接阶段 充电连接阶段CC(电阻由无穷大到R4RC&…...
海外服务器安装Ubuntu 22.04图形界面并配置VNC远程访问指南
在云计算和远程工作日益普及的今天,如何高效地管理和使用海外服务器成为了一个热门话题。本文将详细介绍如何在海外的Ubuntu 22.04服务器上安装图形界面,并配置VNC服务来实现远程访问。无论您是开发者、系统管理员,还是只是想要更便捷地管理您的海外服务器,这篇指南都能为您…...
Linux 管道理解
一、什么是管道 1.1 unix中最古老的进程间通信 1.2 一个进程链接到另一个进程的数据流称为“管道”: 图解: 二、管道通信的原理 2.1当我们创建一个进程然后打开一个文件的时候 会经过以下步骤: ①首先要描述这个进程,为这个…...
国产RK3568+FPGA以 “实时控制+高精度采集+灵活扩展” 为核心的解决方案
RK3568FPGA方案在工业领域应用的核心优势 一、实时性与低延迟控制 AMP架构与GPIO中断技术 通过非对称多处理架构(AMP)实现Linux与实时操作系统(RTOS/裸机)协同,主核负责调度,从核通过GPIO中断响应紧…...
Pycharm(十五)面向对象程序设计基础
目录 一、面向对象基本概述 class 类名: 属性(类似于定义变量) 行为(类似于定义函数,只不过第一个形参要写self) 二、self关键字介绍 三、在类内部调用类中的函数 四、属性的定义和调用 五、魔法方法init方法 六、魔法方法str和del方法 七、案例-减肥 一、…...
华三(H3C)与华为(Huawei)设备配置IPsec VPN的详细说明,涵盖配置流程、参数设置及常见问题处理
以下是针对华三(H3C)与华为(Huawei)设备配置IPsec VPN的详细说明,涵盖配置流程、参数设置及常见问题处理: 一、华三(H3C)设备IPsec VPN配置详解 1. 配置流程 华三IPsec VPN配置主要…...
【消息队列RocketMQ】四、RocketMQ 存储机制与性能优化
一、RocketMQ 存储机制详解 1.1 存储文件结构 RocketMQ 的存储文件主要分布在store目录下,该目录是在broker.conf配置文件中通过storePathRootDir参数指定的,默认路径为${user.home}/store 。主要包含以下几种关键文件类型: 1.1.1 Comm…...
结合地理数据处理
CSV 文件不仅可以存储表格数据,还可以与地理空间数据结合,实现更强大的地理处理功能。例如,你可以将 CSV 文件中的坐标数据转换为点要素类,然后进行空间分析。 示例:将 CSV 文件中的坐标数据转换为点要素类 假设我们有…...
店匠科技摘得 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
摘要——我们研究一种基本的联合通信与感知设置,其中发射机希望向接收机传输一条消息,并同时通过广义反馈估计其信道状态。我们假设感知目标是获得状态的软估计(即概率分布),而非通常假设的点估计;并且我们…...
测试基础笔记第十天
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、查询语句1.基本查询2.条件查询3.模糊查询4.范围查询5.判断空 二、其他复杂查询1.排序2.聚合函数3.分组4.分页查询 一、查询语句 1.基本查询 – 需求1: 准备商…...
Geek强大的电脑卸载软件工具,免费下载
一款强大的卸载电脑软件工具,无需安装 免费下载...
Linux:41线程控制lesson29
1.线程的优点: • 创建⼀个新线程的代价要⽐创建⼀个新进程⼩得多 创建好线程只要调度就好了 • 与进程之间的切换相⽐,线程之间的切换需要操作系统做的⼯作要少很多 为什么? ◦ 最主要的区别是线程的切换虚拟内存空间依然是相同的&#x…...
基于Flask与Ngrok实现Pycharm本地项目公网访问:从零部署
目录 概要 1. 环境与前置条件 2. 安装与配置 Flask 2.1 创建虚拟环境 2.2 安装 Flask 3. 安装与配置 Ngrok 3.1 下载 Ngrok 3.2 注册并获取 Authtoken 4. 在 PyCharm 中创建 Flask 项目 5. 运行本地 Flask 服务 6. 启动 Ngrok 隧道并获取公网地址 7. 完整示例代码汇…...
Ai晚报20250423
Kortix 发布全球首个开源通用型 AI Agent——Suna,能像人类一样学习、推理和适应,通过自然对话帮助用户完成多种现实任务,支持浏览器自动化、文件管理等 20 个用户场景。腾讯混元大模型 AI 阅读助手“企鹅读伴”正式上线,为中小学…...
密码学货币混币器详解及python实现
目录 一、前言二、混币器概述2.1 混币器的工作原理2.2 关键特性三、数据生成与预处理四、系统架构与流程五、核心数学公式六、异步任务调度与 GPU 加速七、PyQt6 GUI 设计八、完整代码实现九、自查测试与总结十、展望摘要 本博客聚焦 “密码学货币混币器实现”,以 Python + P…...
HTMLCSS实现网页轮播图
网页中轮播图区域的实现与解析 在现代网页设计中,轮播图是一种常见且实用的元素,能够在有限的空间内展示多个内容,吸引用户的注意力。下面将对上述代码中轮播图区域的实现方式进行详细介绍。 一、HTML 结构 <div class"carousel-c…...
如何确定置信水平的最佳大小
在统计学中,置信水平的选择并不是一成不变的,而是根据具体的研究目的、样本量、数据类型以及行业标准等因素来确定的。然而,在大多数情况下,95%的置信水平是最常用的。 选择95%置信水平的原因 平衡可靠性与精确性: •…...
Java基础第21天-正则表达式
正则表达式是对字符串执行模式匹配的技术 如果想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为: 限定符选择匹配符分组组合和反向引用符特殊字符字符匹配符定位符 转义号\\:在我们使用正则表达式去检索某些特…...
Maven 项目中引入本地 JAR 包
在日常开发过程中,我们有时会遇到一些未上传到 Maven 中央仓库或公司私有仓库的 JAR 包,比如第三方提供的 SDK 或自己编译的库。这时候,我们就需要将这些 JAR 包手动引入到 Maven 项目中。本文将介绍两种常见方式:将 JAR 安装到本…...
CSGO 盲盒开箱系统技术实现深度解析
一、系统架构设计 (一)前后端分离架构 采用前后端分离模式,后端专注业务逻辑处理与数据管理,前端负责用户交互界面呈现。后端通过 RESTful API 与前端进行数据交互,这种架构能有效提高开发效率,便于团队分…...
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
编辑:LL 7N60-ASEMI无人机专用功率器件7N60 型号:7N60 品牌:ASEMI 封装:TO-220F 最大漏源电流:7A 漏源击穿电压:600V 批号:最新 RDS(ON)Max:1.20Ω …...
Redis日常学习(一)
我的Redis学习笔记:从命令行到性能调优 Redis Redis(Remote Dictionary Server)本质上是一个基于内存的键值存储系统. 安装配置Redis的过程非常简单: # Ubuntu/Debian安装Redis sudo apt-get update sudo apt-get install red…...
Pytorch图像数据转为Tensor张量
PyTorch的所有模型(nn.Module)都只接受Tensor格式的输入,所以我们在使用图像数据集时,必须将图像转换为Tensor格式。PyTorch提供了torchvision.transforms模块来处理图像数据集。torchvision.transforms模块提供了一些常用的图像预…...
Java 加密与解密:从算法到应用的全面解析
Java 加密与解密:从算法到应用的全面解析 一、加密与解密技术概述 在当今数字化时代,数据安全至关重要。Java 加密与解密技术作为保障数据安全的关键手段,被广泛应用于各个领域。 加密是将明文数据通过特定算法转换为密文,使得…...
Java基础系列-HashMap源码解析2-AVL树
文章目录 AVL树左旋右旋左旋右旋的4种情况LL 型RR 型LR 型RL 型 实际插入时怎么判断是那种类型?插入时注意事项删除节点 AVL树 为避免BST树退化成链表的极端情况, AVL 树应运而生。 平衡因子取值(-1,0,1)…...
蓝桥杯 19. 最大比例
最大比例 原题目链接 题目描述 X 星球的某个大奖赛设了 M 级奖励。每个级别的奖金是一个正整数。 并且,相邻两个级别间的比例是一个固定值,也就是说:所有级别的奖金构成一个等比数列。 例如: 奖金数列为 16, 24, 36, 54&…...
前端加密介绍与实战
前端数据加密 文章目录 前端数据加密前端数据加密介绍为什么需要前端数据加密?前端数据加密的常见方式前端数据加密的实现场景:加密用户密码并发送到后端步骤 1:安装加密库步骤 2:实现加密逻辑步骤 3:后端解密 实战总结…...
