Redis集群安全加固

news2024/11/23 8:49:13

本博客地址:https://security.blog.csdn.net/article/details/130692909

一、为Redis启用密码验证

默认情况下,Redis不执行任何密码身份验证。能够通过IP端口连接Redis的客户端均可以直接访问Redis中的数据。在启动Redis服务时,通过设置requirepass为true来打开身份验证。启用身份验证后,Redis将拒绝未经身份验证的客户端的查询。客户端需要通过发送AUTH命令和密码来对自己进行身份验证。

在云原生平台下,将密码信息保存为Kubernetes的Secrets资源,然后在redis deployment声明文件中引用。

创建Redis Secret的示例yaml描述文件:

apiVersion: v1
kind: Secret
metadata:
  name:redisresecret
type: Opaque
data:
  requirepass: * * * * * * * * * *

在创建Redis Pod时,指定引用Secrets:

volumes:
  - name: config
    secret:
      secretName:redisresecret

此时再访问Redis,就会提示限制登录

二、限制允许访问Redis服务的Pod和IP

通常情况下,Redis服务仅作为业务应用内部使用的一个缓存服务,只需要对集群内部使用这个Redis服务的业务容器开放,对大部分其他的Pod不需要开放,尤其在大部分情况下都不能通过集群nodeport或弹性IP的方式对外部网络开放。在云原生平台下,需要对Redis配置专门的网络策略,限制只允许指定标签的Pod访问。

Network Policy的配置方法:

apiVersion: networking,k8s.io/v1
kind: NetworkPolicy
medata:
  # 定义网络策略名
  name: redisdb-networkpolicy
  namespace: default
spec:
  # 通过标签选择Redis Pod
  podSelector:
    matchLabels:
      role: redisdb 
  # 策略类型为Ingress和Egress两个方向
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    # 只有符合cidr段定义、namespace定义、Pod labels过滤的Pod才能访问Redis服务
    - ipBlock:
        cidr: 172.17.0.0/16
        expect:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    # 对Redis的端口6379做ingress方向的访问限制
    ports:
    - protocol: TCP
      port: 6379
egress:
# 配置redis服务在出口方向的策略
- to:
  - ipBlock:
      cidr: 10.0.0.0/24

以上网络策略配置限制了能够访问Redis的Namespace、Pods以及IP段。这样就确保在一个集群内只有指定的资源能够访问Redis。此外,允许访问的Redis的Pod也要经过服务器的AUTH认证,只有认证通过的服务才允许访问Redis的接口进行数据的插入和查询,最后形成的Redis安全部署架构如图下所示:

在这里插入图片描述

针对Redis的安全部署有三部分安全加固。首先是Redis只对集群内部提供服务,而不将其服务IP暴露于外部网络;另外通过集群的网络策略对集群内的Redis提供一层网络访问上的隔离;最后激活Redis内部的认证机制,应用侧需提供Redis Server的访问密码,经过认证后方可接入。

除了使用网络策略外,还可以使用基于服务网格(Service Mesh)的流量管控技术,通过将流量策略配置在Pod的边车上实现类似的功能。

三、使用TLS对访问Redis的流量和数据进行加密

服务网格技术可以通过配置使Pod之间基于TLS通信,使请求从明文模式平滑过渡至双向TLS模式。对于Redis服务,就不需要在Redis Server层启动TLS模式,而直接在网络上进行配置。这种配置方式有很大的便利性和灵活性,同时还能利用服务网络的监控能力,对访问调用进行详细的审计和监控。

四、禁用特殊权限的接口

特殊权限的接口有FLUSHDB、FLUSHALL、KEYS、PEXPIRE、DEL、CONFIG、SHUTDOWN、BGREWRITEAOF、BGSAVE、SAVE、SPOP、SREM、RENAME、DEBUG和EVAL。

其中EVAL接口用于发送Lua脚本,设计之初是为了在服务器端执行输入的Lua脚本来完成复杂的数据操作。虽然Redis内部实现是在一个沙箱中运行Lua脚本,但是从安全角度来看,这个命令接口仍然是系统漏洞的温床,大部分情况下也都不需要这个功能。

DEBUG接口可以执行无效的内存访问,通常在开发阶段用于模拟错误。一旦被滥用,它可以允许攻击者执行拒绝服务攻击,使Redis崩溃。

FLUSHALL命令能够清空或删除所有数据库中存在的所有键。如果FLUSHALL命令被恶意或意外使用,则它可以清除整个服务器中所有的密钥或数据,从而导致数据丢失,尤其是针对未配置备份策略的Redis Server上的数据。

通过在redis.conf中的rename-command指令对这些命令进行更名,更改为一些不容易被猜到的名字可以防止这些命令被滥用,如果通过rename-command指令将命令改为空字符串,就代表完全禁用这个命令。

如下:

vim /etc/redis/redis.conf
--------------------------------------------------
...
rename-command CONFIG "hide_CONFIG"
rename-command flushall ""
rename-commandeval ""
...

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

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

相关文章

玩转自动化操作神器n8n之(1)n8n的简介与安装

文章目录 1. 简介 2. 安装2.1. 使用npx进行安装2.2. 使用docker进行安装 2.3. 设置端口(可选) 3. 登录4. 搜索工作流 1. 简介 n8n是一款强大的工作流程自动化工具,可以自定义想要使用的功能和应用程序。n8n基于节点能够将任何工具连接在一起…

使用插件快速生成代码

使用插件快速生成代码 咋们常说,授人以鱼不如授人以渔,在这里给大家提供一些技巧性的东西,方便一些新手同学可以快速上手,同时,也提高我们的开发兴趣与开发热情! 主要讲什么呢,我们来学一学如何…

低代码信创开发核心技术(二):手撕灵活好用的Vue拖拉拽布局系统

前言 随着信息化时代的到来,软件已经成为企业和个人不可或缺的工具。然而,许多人在开发软件时遇到了各种问题,比如开发周期长、技术门槛高、成本高昂等等。为了解决这些问题,低代码平台应运而生。低代码平台是一种快速开发工具&a…

Golang每日一练(leetDay0067) 第十行、打家劫舍I

目录 195. 第十行 Tenth Line 🌟 198. 打家劫舍 I House Robber 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 195. 第十行 Tenth Line 给定一…

PySide6/PyQT多线程之 异常情况和优先级指南

前言 在PySide6/PyQT 中使用多线程时,线程的优先级和异常情况处理同样是重要的概念。 本文纯理论知识,无实操。换句话说,就是水文~~ 尽管在一般情况下我们不需要过多关注线程的优先级,但了解它的概念对于特定场景下的多线程编程仍…

Java每日一练(20230516) 最小栈、组合总和II、相同的树

目录 1. 最小栈 🌟 2. 组合总和 II 🌟🌟 3. 相同的树 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 最小栈 设计一个支持 push…

[入门必看]数据结构5.4:树、森林

[入门必看]数据结构5.4:树、森林 第五章 树与二叉树5.4 树、森林知识总览5.4.1 树的存储结构5.4.2 树、森林与二叉树的转化5.4.3 树和森林的遍历 5.4.1 树的存储结构树的逻辑结构回顾:二叉树的顺序存储如何实现树的顺序存储?树的存储1&#x…

【连续介质力学】张量的范数、各向同性和各向异性张量、同轴张量和极分解

张量的范数 张量的大小,使用Frobenius 范数: ∣ ∣ v ⃗ ∣ ∣ v ⃗ ⋅ v ⃗ v i v i (向量) ||\vec v|| \sqrt{\vec v \cdot \vec v} \sqrt{v_iv_i} (向量) ∣∣v ∣∣v ⋅v ​vi​vi​ ​&#xff…

okhttp篇2:Dispatcher

Dispatchers维护着一个线程池,3个双端队列,准备执行的AsynCall,正在执行的AsynCall,正在执行的同步Call(RealCall)。 同时规定每个Host最多同时请求5个Request,同时可最多执行64个Request。 p…

玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

一、前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例。 二、下载 如果不记得网址, 直接在google里搜gtest,第一个就是。目…

Docker下Gitlab配置Let’s Encrypt证书

Docker下Gitlab配置Let’s Encrypt证书 1 参考文档2 常见问题2.1 前置条件2.2 不支持ip2.3 重复签发2.4 外网无法访问 ※3 内网穿透配置(可选)4 Gitlab 创建并配置Let’s Encrypt证书4.1 开放Let’s Encrypt签发所需端口4.2 新增存储HTTPS证书文件夹4.3 …

多态与虚函数(补)

多态与虚函数(补) 静态联编与动态联编的深层次理解多态底层原理 示例示例一示例二示例三示例四 对象与内存虚析构函数构造函数为什么不能是虚函数? 静态联编与动态联编的深层次理解 我们首先看下面一段代码 class object { private: int va…

C learning_12 操作符前篇(算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符)

目录 算术操作符 移位操作符 移位规则 位操作符 交换两个整形变量的写法 赋值操作符 单目操作符 sizeof和数组的纠缠 和--运算符 多组输入的方案 关系操作符 逻辑操作符 算术操作符 -- 加法操作符():用于将两个值相加。 -- 减法操…

Python爬虫(二):Requests库

所谓爬虫就是模拟客户端发送网络请求,获取网络响应,并按照一定的规则解析获取的数据并保存的程序。要说 Python 的爬虫必然绕不过 Requests 库。 1 简介 对于 Requests 库,官方文档是这么说的: Requests 唯一的一个非转基因的 P…

存储知识点:RAID0、RAID1、RAID5、RAID10特点是什么?所需的硬盘数量分别为多少?

RAID(Redundant Array of Independent Disks)是一种将多个独立的硬盘组合成一个逻辑磁盘的技术,目的是提高性能或容错能力。RAID有不同的级别,常见的有RAID0、RAID1、RAID5、RAID10等。下面我们来介绍这些级别的特点和所需的硬盘数…

套接字编程简介

作者:V7 博客:https://www.jvmstack.cn 一碗鸡汤 少年辛苦终身事,莫向光阴惰寸功。 —— 杜荀鹤 Socket概述 在计算机中产生和接受IO流的数据源是多种多样的,在网络编程中,有一个特殊的数据源就是socket。通俗点soc…

linux的系统日志

目录 一、日志文件的产生 二、日志文件存放在哪儿 (1)文本日志 (2)二进制日志 三、日志存放规则的配置文件 四、日志轮转 五、分析和监控日志 一、日志文件的产生 日志内容:内核、开机引导、守护进程启动运行的…

华为和思科两种常见的网络设备如何进行ospf配置?

概述 ospf(开放最短路径优先)是一种基于链路状态的动态路由协议,它可以在网络中自动发现和维护最优的路由路径。ospf广泛应用于大型和复杂的网络环境,因为它具有以下优点: 支持分层路由,可以将网络划分为…

WebAssembly黑暗的一面

案例1:技术支持诈骗 什么是技术支持诈骗? 技术支持诈骗是一种电话欺诈,其中诈骗者声称可以提供合法的技术支持服务。该骗局可能以陌生电话开始,骗子通常会声称来自合法的第三方的员工,如“微软”或“Windows部门”。他…

YOLOv5实现目标分类计数并显示在图像上

有同学后台私信我,想用YOLOv5实现目标的分类计数,因此本文将在之前目标计数博客的基础上添加一些代码,实现分类计数。阅读本文前请先看那篇博客,链接如下: YOLOv5实现目标计数_Albert_yeager的博客 1. 分类实现 以co…