Redis性能瓶颈与安全隐患排查验证纪实

news2024/12/24 8:39:21

在写《Redis怎样保证数据安全?》这篇文章,我是有对redis设置密码需要哪些步骤,设置密码的性能损耗有验证的。这就涉及到要对redis的配置做修改。

开始时我是打算采用直接使用redis配置文件的方式。所以我从redis官网下载了一个默认的配置文件,就打算只将这个配置文件的requirepass注释打开,设置一个密码。

00d1f1c2ef5c1c6e14d757a1d8920f8a.png

redis我用docker启动,如果 docker run -p 6379:6379 --name ai-redis -v c:/docker/redis.conf:/etc/redis/redis.conf -d redis/redis-stack-server redis-server /etc/redis/redis.conf

使用本机的redis.conf文件拷贝一份到docker容器中启动,docker里可以正常运行,用docker内的redis-cli可以正常访问服务端,但是使用主机的java程序访问就会报 Unexpected end of stream.; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Unexpected end of stream.

我到咱们「编程一生」用户交流群里,问出了我的问题。咱们群里的朋友提示我说:telnet 可以验证下redis响应

我其实在他说之前是验证过的,当时telnet没有反应。既然人家说了,我就又试了一下。其实这次测试的配置和上次不一样了。我为了测试是不是我redis.conf文件的格式或者编码有问题。redis.conf直接弄了一个空文件,自然也是没有密码的。这时候给出了下面的提示(java客户端连提示和telnet的是一样的):

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. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Set up an authentication password for the default user. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

这么具体的问题,第一反应当然是问AI工具了。AI给了这个答案:

您所描述的信息是Redis的一个安全特性。当Redis在没有设置密码的情况下运行时,它会进入保护模式(protected mode)。在这种模式下,Redis仅接受来自本地回环接口(loopback interface)的连接,这通常意味着只能从运行Redis的同一台机器上进行连接。这是为了防止未经授权的外部访问。

如果您希望从外部计算机连接到Redis,您有几个选择:

  1. 禁用保护模式:您可以通过在本地回环接口上连接到Redis,并发送命令CONFIG SET protected-mode no来禁用保护模式。但是,请注意,这会增加安全风险,因为任何能够访问Redis服务器的机器都可以进行连接,除非您还实施了其他安全措施(如防火墙规则)。

  2. 设置密码:您可以在Redis配置文件中设置密码,方法是修改requirepass字段。例如,在redis.conf文件中,您可以添加或修改以下行:

    requirepass your_strong_password

    然后,您需要重启Redis服务器以使更改生效。设置密码后,您需要在连接到Redis时提供该密码。

根据提示,redis配置改成不允许本地接口外运行 protected-mode yes。同样,docker里可以正常运行。但从客户端连接,结果是:

 ERR AUTH <password> called without any password configured for the default user. Are you sure your configuration is correct?

另外一个朋友提示我抓包看一下,我就犯愁犯懒了。我是在windows上做的验证,默认不能使用tcmpdump。我是安装了wireshark的。wireshark貌似只能抓tcp和udp协议的包,不支持redis协议。有朋友能给点思路,对我这种懒人在这种情况下怎么抓包吗?

但是根据目前的情况:Redis仅接受来自本地回环接口(loopback interface)的连接,我想到了bind的配置

980d6cd37a26a4bca827f06ca3c71694.png

实际验证,默认bind是127.0.0.1。手动加上

bind 0.0.0.0

问题解决。回归验证时,我建立了一个空redis.conf,只有两样配置,也同样验证问题解决

272e044e641beac8be94b06446feb81e.png

但实际上这个问题与我真正的验证目标:对redis设置密码需要哪些步骤,设置密码的性能损耗做验证,是跑题的。

所以当时我并没有先全力去解决这个问题,而是使用了另外一种验证方式,不使用redis.conf文件,而是启动参数里直接指定参数,先验证了真正的目标之后再来解决的。启动参数如下:

docker run -p 6379:6379 --name ai-redis  -d redis/redis-stack-server redis-server --requirepass 123456 --protected-mode yes       

之后,我重新看了一下群里的聊天记录

f4d3df84d349530c763a7781fc811d05.png

群里朋友都给出我正确答案了,我没有领会到!!!

总结

总结一下本次排查的过程步骤:

我的整个排查过程使用的是《性能之巅》里介绍的科学法。

科学法采用以下框架:问题->假设->预测->实验->分析。在分析过程中,可以有效利用各种资源:AI技术、网上资料、仔细阅读Redis的错误提示,咨询群里的朋友。此外,在验证问题的过程中,不要因为新的问题,迷失了原本的目标,这里就根据具体目标和问题特点采取合适的验证方法,如直接指定启动参数来验证目标。

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

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

相关文章

java实现运行脚本文件

在最近的项目中&#xff0c;有一个需求是前端传给我一个脚本文件&#xff0c;然后我需要运行脚本文件后将结果进行返回&#xff0c;那接下来就让我们看看是怎么做的吧&#xff01; public R runScripts(Integer id) {ScriptsInfo scriptsInfo this.baseMapper.selectById(id);…

影响力营销与AI的结合:Kompas.ai在搭桥角色中的独特价值

在数字化营销的新时代&#xff0c;影响力营销已经成为品牌建立信任和提升市场影响力的有效手段。通过与关键意见领袖&#xff08;KOL&#xff09;的合作&#xff0c;品牌能够利用KOL的信誉和影响力来扩大其市场覆盖范围和提升品牌认知度。然而&#xff0c;寻找与品牌价值观相契…

汇编语言:寻址方式在结构化数据访问中的应用——计算人均收入

有一年多没有在CSDN上发博文了。人的工作重心总是有转移的&#xff0c;庆幸一直在做着有意义的事。   今天的内容&#xff0c;是为汇编语言课程更新一个实验项目。      本方案修改自王爽编《汇编语言》第&#xff14;版P172“实验7寻址方式在结构化数据访问中的应用” …

科普|老隋分享的人力资源项目怎么样?可不可以赚钱?

近年来&#xff0c;随着市场竞争的加剧和企业对人才需求的不断提升&#xff0c;人力资源项目逐渐成为了创业者和投资者关注的焦点。老隋作为一位在人力资源领域深耕多年的专业人士&#xff0c;经常分享关于人力资源项目的见解和经验。那么&#xff0c;老隋分享的人力资源项目究…

Android Glide

1.引入glide implementation com.github.bumptech.glide:glide:4.14.2 // Skip this if you dont want to use integration libraries or configure Glide. annotationProcessor com.github.bumptech.glide:compiler:4.14.2 //Glide 注解处理器 2.AndroidManifest.xml 中添加…

截稿倒计时 CCF-B 推荐会议EGSR’24论文摘要4月9日提交

会议之眼 快讯 第35届EGSR 2024 (Eurographics Symposium on Rendering)即欧洲图形学渲染专题讨论会将于 2024 年 7月3日-5日在英国伦敦帝国理工学院举行&#xff01;在EGSR之前&#xff0c;将有一个全新的联合研讨会&#xff0c;即材料外观建模&#xff08;MAM&#xff09;和…

【如何写论文】解决方案——删除脚注里多余的回车换行,标题的段前磅数消失问题、图像显示不完整、被截断、浮动问题

目录 一、脚注里多余的回车换行无法删除问题1.1、问题描述1.2、解决方案 二、标题前的段前磅数消失问题2.1、问题描述2.2、解决方案 三、图像显示不完整、被截断、浮动问题3.1、问题描述3.2、解决方案 一、脚注里多余的回车换行无法删除问题 1.1、问题描述 一般论文要求需要有…

Unity Toggle组件

Toggle Group组件 Allow Switch Off属性值为false时&#xff0c; 1&#xff0c;Toggle初始时默认会有一个被勾选&#xff08;ison为true&#xff09;&#xff0c;可以自己打勾指定 2&#xff0c;不能取消勾选 Allow Switch Off属性值为true时&#xff0c; 1&#xff0c;Toggl…

无监督学习简介

无监督学习简介 一、定义和核心概念 无监督学习的定义 无监督学习是机器学习的一个关键分支&#xff0c;它涉及到从未标注数据中学习和提取信息。不同于其他学习类型&#xff0c;无监督学习的数据集没有提供任何显式的输出标签或结果。因此&#xff0c;这种学习方法的主要任务…

js计算器实现

文章目录 1. 演示效果2. 分析思路3. 代码实现 1. 演示效果 2. 分析思路 给每个按钮添加点击事件&#xff0c;使用eval()进行计算。 3. 代码实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name&q…

数据生成 | Matlab实现基于DE差分进化算法的数据生成

数据生成 | Matlab实现基于DE差分进化算法的数据生成 目录 数据生成 | Matlab实现基于DE差分进化算法的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.Matlab实现基于DE差分进化算法的数据生成&#xff0c;运行环境Matlab2021b及以上&#xff1b; 2.计…

HubSpot如何通过自动化和优化客户服务流程,提升客户满意度和忠诚度?

HubSpot通过自动化和优化客户服务流程&#xff0c;可以有效地提升客户满意度和忠诚度。以下是HubSpot实现这一目标的几个关键步骤&#xff1a; 建立清晰的服务流程&#xff1a;首先&#xff0c;HubSpot帮助企业建立清晰、标准化的客户服务流程。这包括明确的服务阶段定义&…

Codigger Desktop:用户体验与获得收益双赢的革新之作(一)

上周&#xff0c;我们介绍了Codigger Desktop凭借其强大的功能、稳定的性能以及人性化的设计&#xff0c;成为了广大开发者的得力助手。Codigger Desktop除了是开发者的利器外&#xff0c;它以其出色的用户体验和创新的收益模式&#xff0c;为用户提供了一个全新的选择。Codigg…

【线段树】1622. 奇妙序列

本文涉及知识点 设计 数学 线段树 本文基础解法 【设计】 【数学】1622 奇妙序列 LeetCode1622. 奇妙序列 请你实现三个 API append&#xff0c;addAll 和 multAll 来实现奇妙序列。 请实现 Fancy 类 &#xff1a; Fancy() 初始化一个空序列对象。 void append(val) 将整数…

【单片机家电产品--晶闸管(可控硅)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 单片机家电产品–晶闸管 前言 记录学习单片机家电产品内容 已转载记录为主 一、知识点 1 晶体管和晶闸管之间的区别 晶体管和晶闸管之间的区别 2 什么是可控硅&#xf…

WebKit结构揭秘:探秘网页渲染的魔法之源

一、WebKit之心&#xff1a;渲染引擎的魔力 WebKit的渲染引擎是其核心所在&#xff0c;它犹如一位技艺高超的魔法师&#xff0c;将HTML、CSS和JavaScript的魔法咒语转化为绚丽的网页画面。它解析代码&#xff0c;绘制页面&#xff0c;让网页内容跃然屏上&#xff0c;展现出无尽…

宏的使用(C语言详解)

在写一个代码生成可执行文件的过程需要经过编译和链接&#xff0c;编译又要经过三部&#xff1a;预处理&#xff0c;编译&#xff0c;汇编。 #define定义的变量和宏就是在预处理阶段会处理的。 一个简单的宏定义&#xff1a; #include<stdio.h>; #define Max(a,b) a>…

【微服务】SpringCloud之Feign远程调用

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

Mac安装Docker提示Another application changed your Desktop configuration解决方案

1. 问题描述 Mac安装Docker后&#xff0c;提示Another application changed your Desktop configuration&#xff0c;Re-apply configurations无效 2. 解决方案 在终端执行下述命令即可解决&#xff1a; sudo ln -sf /Applications/Docker.app/Contents/Resources/bin/docke…

TLF9471 - High-Speed CAN FD Transceiver

1 框图描述 2 功能描述 CAN收发器被设计用来承受汽车应用的恶劣条件,并支持12V应用。   SBC的控制器区域网络(CAN)收发器部分在汽车和工业应用中提供高速(HS)差分模式数据传输(最高可达2Mbaud) 和接收。它作为CAN协议控制器和与ISO 11898-2:2016和SAE J2284兼容的物理…