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

在写《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的错误提示,咨询群里的朋友。此外,在验证问题的过程中,不要因为新的问题,迷失了原本的目标,这里就根据具体目标和问题特点采取合适的验证方法,如直接指定启动参数来验证目标。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++搭建深度学习的推理框架

我们的目的是:借助C++搭建一个类似于pytorch,tensorflow的深度学习框架,对标pytorch,tensorflow实现对应的功能。由于本人能力有限,下面本人将借助C++搭建一个简单的全连接神经网络,并且尝试解释里面的算子定义和计算图构建。 算子定义 回顾pytorch里面搭建的全连接神经网…

where 函数

Pandas 中的 where 函数 在 Pandas 中&#xff0c;where 函数用于替换不满足条件的值。具体来说&#xff0c;它返回一个与原始 DataFrame 或 Series 形状相同的新对象&#xff0c;但所有不满足条件的值都被替换为指定的值&#xff08;默认为 NaN&#xff09;。 对于 DataFram…

数据结构——二叉树链式结构的实现

大家好我是小锋&#xff0c;今天我们来学习的是二叉树链式结构的实现 首先我们来学习一下二叉树的基本操作 在看二叉树基本操作前我们来回顾下二叉树的概念&#xff0c; 二叉树是&#xff1a; 1. 空树 2. 非空&#xff1a;根节点&#xff0c;根节点的左子树、根节点的右…

软件团队工作的一些认识和方法,由西游记取经团队说开去

软件开发往往是由公司内外各个岗位人员通力协作才能完成工作目标&#xff0c;涉及团队、问题、目标、管理、协作、检查多个方面。 典型团队分析&#xff1a;西游记取经团队 优点 团队主管的目标特别明确&#xff1a;西天取经 团队有上级的得力支持&#xff1a;唐王、观音、如…

32-数据处理:如何高效处理应用程序产生的数据?

如何更好地进行异步数据处理。 一个大型应用为了后期的排障、运营等&#xff0c;会将一些请求数据保存在存储系统中 。例如&#xff1a;应用将请求日志保存到 Elasticsearch 中&#xff0c;方便排障&#xff1b;网关将 API 请求次数、请求消息体等数据保存在数据库中&#xff…

怎么用二维码来分享视频?视频二维码制作的简单方法

怎么用二维码来分享视频呢&#xff1f;为了能够更快速的将视频传递给其他人&#xff0c;所以现在很多人都使用生成二维码的方式&#xff0c;让其他人通过扫码来查看视频内容&#xff0c;从而实现多人同时扫码看视频的效果。这种方式也不会占用用户的内存和流量&#xff0c;通过…

【java的本地锁到分布式锁介绍】

文章目录 1.java本地自带锁介绍及应用synchronized&#xff08;1&#xff09;synchronized原理和优化&#xff08;2&#xff09;synchronized作用&#xff08;3&#xff09;synchronized的使用 CAS(1) CAS原理&#xff08;2&#xff09;CAS和synchronized优缺点 lock 2.分布式锁…

复习软考有哪些好的刷题APP?

这里为大家带来一些好用而且免费的软考刷题app&#xff0c;软考每年有两次&#xff0c;也渐渐成为很多人都会去考的了&#xff0c;这里推荐的这些软件上面的资料很新很齐全&#xff0c;各种科目类型都是有的&#xff0c;而且有解析&#xff0c;非常的实用哦&#xff01; 1.希赛…

qt 打印日志

在 Qt Creator 中&#xff0c;将 QDebug、QInfo、QWarning、QCritical 和 QFatal 打印的日志输出到指定文件&#xff0c;需要设置 Qt 的消息处理机制。这通常涉及到安装一个自定义的消息处理器&#xff0c;该处理器将日志消息重定向到文件。以下是一个基本的步骤指南&#xff1…

聊聊Linux内核中内存模型

介绍 在Linux中二进制的程序从磁盘加载到内存&#xff0c;运行起来后用户态是使用pid来唯一标识进程&#xff0c;对于内核都是以task_struct表示。二进制程序中的数据段、代码段、堆都能提现在task_struct中。每一个进程都有自己的虚拟地址空间&#xff0c;虚拟地址空间包含几…

校园抄表电表系统

校园抄表电表系统是一种专门为学校宿舍、教学楼等校园建筑设计的电能计量和管理解决方案。随着校园数字化管理水平的提升&#xff0c;传统的电表抄录方式已经无法满足现代化校园管理的需求。因此&#xff0c;校园抄表电表系统应运而生&#xff0c;它通过自动化、信息化技术&…

一文读懂模块化赛道新的头部公链Meta Earth

加密货币诞生了15年后已经形成一定的规模&#xff0c;作为互联网和金融的延伸&#xff0c;加密货币也逐渐融合了人类经济的规律周期中&#xff0c;而这规律似乎早已被中本聪写入区块链上&#xff0c;那就是比特币的4年减半机制&#xff0c;也许是对传统金融和人类社会的洞察&am…

C++从入门到精通——类对象模型

类对象模型 前言一、如何计算类对象的大小问题 二、类对象的存储方式猜测对象中包含类的各个成员代码只保存一份&#xff0c;在对象中保存存放代码的地址只保存成员变量&#xff0c;成员函数存放在公共的代码段问题总结 三、结构体内存对齐规则四、例题结构体怎么对齐&#xff…

设计模式总结-适配器模式

适配器模式 模式动机模式定义模式结构适配器模式实例与解析实例一&#xff1a;仿生机器人实例二&#xff1a;加密适配器 总结 模式动机 在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式。 通常情况下&#xff0c;客户端可以通过目标类的接口访问它所提供的…

【PLC+Python】上位机通过snap7实现与西门子PLC通讯并用Tkinter可视化——(2)Python通讯和可视化

一 背景说明 计划通过西门子 S7-1200&#xff08;CPU 1212C-DCDCDC&#xff09;&#xff0c;进行PLC与设备间的数据监控。但 TIA Portal V15.1 的交互数据非专业人员很难一目了然&#xff0c;又不想专门购买西门子的可编程屏幕&#xff0c;所以拟采用 python-snap7 模块实现上位…

MQTT 5.0 报文解析 01:CONNECT 与 CONNACK

在 MQTT 5.0 报文介绍 中&#xff0c;我们介绍了 MQTT 报文由固定报头、可变报头和有效载荷三个部分组成&#xff0c;以及可变字节整数、属性这类 MQTT 报文中的通用概念。现在&#xff0c;我们将按照实际的用途来进一步介绍各个类型的报文的组成。首先&#xff0c;我们将专注于…

初识Java中的NIO

1.概述 Java NIO 全称java non-blocking IO &#xff0c;是指 JDK 提供的新 API。从 JDK1.4 开始&#xff0c;Java 提供了一系列改进的输入/输出新特性&#xff0c;被统称为 NIO(即 New IO)&#xff0c;是同步非阻塞的。NIO采用内存映射文件的方式来处理输入输出&#xff0c;NI…

电池UN38.3测试电池模组蓄电池检测报告出具

UN38.3运输报告规定了以下类型的电池&#xff1a; 1. 锂金属电池&#xff1a;包括锂金属氧化物电池&#xff08;如锂锰电池、锂铁电池、锂钴电池&#xff09;&#xff0c;锂-硫电池等。 2. 锂离子电池&#xff1a;包括锂聚合物电池、锂离子聚合物电池、锂离子含水电池等。 3.…

软考-系统集成项目管理中级-新一代信息技术

本章历年考题分值统计 本章重点常考知识点汇总清单(掌握部分可直接理解记忆) 本章历年考题及答案解析 32、2019 年上半年第 23 题 云计算通过网络提供可动态伸缩的廉价计算能力&#xff0c;(23)不属于云计算的特点。 A.虚拟化 B.高可扩展性 C.按需服务 D.优化本地存储 【参考…

记录一个C语言基础错误——scanf()输入!

今天犯了一个很傻的问题&#xff0c;记录一下。 Lint’Code 题目&#xff1a; 错误代码 #include <stdio.h>int function(int a, int b, int c, int x, int y) {// Write your code hereprintf("In function: %d\n", x y);x - y;return (a * (x y) * (x y…