首页 > 数据库 >Redis数据库安全之旅

Redis数据库安全之旅

时间:2022-11-12 11:36:02浏览次数:43  
标签:TLS key 之旅 -- ca Redis 设置 数据库安全

前言

​Redis​​相信大家都或多或少都听说过吧,作为内存数据库的代表, 但是近些年​​Redis​​ 被攻击的典范也是越来越多,我们将如何防护​​Redis​​ 安全呢? 跟着我们的脚本,来看看这篇文章吧.

对于​​Redis​​而言,我们设置的方法大概有以下几种

  • 通过​​redis.conf​​ 设置。
  • 在已经启动的​​Redis​​ 中使用​​CONFIG SET​​ 来设置。

如之前所述,安全方面归根结底,总结一句话就是:最好的安全设置就是最小化权限。

那我们来看下,​​Redis​​ 有哪些安全设置呢?

开放最小化很重要

作为​​Redis​​ 服务器而言, 应该仅允许受信任的客户端访问,其他访问都应该拒绝,因此也善用防火墙相当重要,当然这个防火墙不是在​​Redis​​ 是做不了的,应该在​​Redis​​ 所属的机器进行设置。

若该​​Redis​​ 是自建于本地实体机中,那么应该考虑防火墙软件,例如: ​​iptables​​ 、​​firewalld​​ 等。若是存在于各云厂商实例中(​​ECS​​ ),那么应该善用云厂商提供的防火墙。

那我们​​Redis​​ 在这一步就什么也不能做了么? 不是的,在​​Redis​​ 配置中,有一个配置参数为​​bind​​ ,该参数选项是将​​Redis​​对相应的网卡监听,若配置如下:

bind 127.0.0.1
复制代码

则监听在本地的回环地址上,若该值为空,则监听所有的网卡(3.2版本提供的功能)。

若想监听在多个网卡上的话,​​ip​​ 地址直接可以使用空格分开即可,例如:

bind 127.0.0.1 10.0.2.15
复制代码

则该配置则是监听到​​127.0.0.1​​ 以及 ​​10.0.2.15​​ 网卡上。

在已经启动的​​Redis​​ 中,想查看​​Redis​​ 监听到哪些网卡上,除了查看所属机器的网路状态外,还可以通过​​CONFIG GET bind​​ 来获取。

除此之外,​​Redis​​还为我们提供了"保护模式",即配置: ​​protected-mode​​ ,默认为​​yes​​ 。请不要关闭它,因为它能够检测到启动后的​​Redis​​ 是否安全,其检测策略为:当​​Redis​​ 没有设置密码的时候,从外部进行访问,这就会触发它的保护模式,即向访问用户提示信息: ​​Redis is running in protected mode because protected mode is enabled and no password is set for the default user.​

当然网上很多博客提供的最快解决如上问题的方法是关闭其保护模式,请不要这么做.

认证不可少

接上一段落,若​​Redis​​ 想从外部进行访问,除了关闭保护模式以外,还可以设置​​Redis​​ 密码. 在​​Redis​​ 中,通过配置​​requirepass​​ 来设置密码,不过设置密码应当注意一下,​​Redis​​ 密码不应该设置为若密码,建议设置为复杂密码.

原因如下:

  • 客户端在校验身份的时候,使用的是​​auth​​ 命令,可以理解为是​​Redis​​ 的普通命令,即能够被无限执行,换言之有被爆破的可能.
  • ​redis-cli​​可以通过加载客户端的​​redis.conf​​ 文件来校验服务器, 不需要管理员记住密码.

如上所属,客户端在校验身份的时候,发送的是​​auth​​ 命令,该命令可以理解为​​Redis​​ 的普通命令,是没有被加密的, 若请求报文被监听了,也有泄密的可能. 所以尽可能的使用加密进行通信,即: ​​SSL/TLS​​.

防止管理员误操作也很重要

在​​Redis​​中有一些非常危险的命令,例如: ​​FLUSHALL​​ ,​​FLUSHDB​​ ,该命令前者是清空所有的数据,后则是清空当前库的数据, 在日常工作中,如果误操作了,那后果不堪设想. 还有一些命令,运行后可能会导致系统阻塞,非常不建议使用,例如:​​KEYS​​ ,​​HGETALL​​等.

基于上述情况,禁用某些命令来保证系统安全是非常有必要的, 好在​​Redis​​给我们提供了方法. 若想禁用某些命令,可以在其服务器​​redis.conf​​ 配置文件中,使用​​rename-command​​ 指令,例如:

rename-command FLUSHALL ""
rename-command FLUSHDB ""
复制代码

若设置为空的话,则是禁止使用命令.修改配置,启动服务器后,若再使用这些命令,即会报错: ​​ERR unknown command​​ .

若并非想禁用命令,而是想重命名命令,那么将空字符串修改为重命名后的命令即可,例如:

rename-command KEYS FINDALL
复制代码

设置后,即可使用​​FINDALL​​ 来代替​​KEYS​​ , 案例如下:

127.0.0.1:6379> set juejinNmae pdudo
OK
127.0.0.1:6379> FINDALL *
1) "juejinNmae"
127.0.0.1:6379>
复制代码

担心网络被监听? 开启TLS之旅吧

开启​​ssl/tls​​ 后势必会降低​​Redis​​ 的吞吐量,所以是否采用该配置主要还是看业务情况,若业务想要避免被抓包等,适合开启该设置,若仅在某一内网使用,那就没必要的.

​Redis 6.0​​ 以后启用了​​SSL/TLS​​ ,但是注意, 若想使用​​SSL/TLS​​ 的话,在编译的时候需要指定​​make BUILD_TLS=yes​​ , 这里需要注意的是, 客户端和服务器都需要编译才行.

这里简单举个例子如何启动​​Redis​​吧.

证书生成

openssl genrsa -out ca.key 2048
openssl req -new -key ca.key -out ca.csr
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt
复制代码

数据库启动

redis-server --tls-port 6379 --port 0  --tls-cert-file ca.crt --tls-key-file ca.key  --tls-ca-cert-file ca.crt
复制代码

客户端连接

redis-cli --tls --cert ca.crt --key ca.key  --cacert ca.crt
复制代码

在使用​​SSL/TLS​​ 后,我们需要禁用非​​TLS​​ 端口并且开启​​SSL/TLS​​ 端口后,可以直接设置:

port 0
tls-port 6379
复制代码

这样的话,通过​​6379​​ 连接,默认情况下是走的​​SSL/TLS​

总结

安全一直是大家比较关心的话题,在​​Redis​​ 中,我们不仅仅要防外部入侵, 还要知道, 技术人员的误操作也许破坏的更为严重, 始终需要记住, 权限最小化.不仅对外,也需要对内.

标签:TLS,key,之旅,--,ca,Redis,设置,数据库安全
From: https://blog.51cto.com/u_15773567/5846575

相关文章

  • redis数据一致性问题还稀里糊涂?看这篇就够了
    前言当我们使用Redis做缓存时,数据不一致问题是绕不过的问题。如果我们没有很好的处理数据一致性问题,就有可能影响用户体验,最严重的会造成业务损失。数据一致性的场景和解决......
  • redis集群搭建
    Redis集群搭建安逸llllll已于2022-09-1312:20:58修改2721收藏9文章标签:redis数据库nosql版权目录Redis集群实现(redis版本6.2.4)1Redis集群1.1为什么要搭建集......
  • 云原生之旅 - 10)手把手教你安装 Jenkins on Kubernetes
    前言谈到持续集成工具就离不开众所周知的Jenkins,本文带你了解如何在Kubernetes上安装Jenkins,后续文章会带你深入了解如何使用k8spod作为Jenkins的buildagents。 ......
  • Redis的淘汰策略
    默认淘汰策略:满了就出错,不让写了Redis缓存的数据分为两种:设置了过期时间的、全量(也包含没设置过期时间的),这也是淘汰策略针对的两种数据范围lru:最近使用的保留,针对的两种......
  • Redis笔记02-数据类型
    String类型数据127.0.0.1:6379>setnamezhangsan#设置单key-valueOK127.0.0.1:6379>getname"zhangsan"127.0.0.1:6379>msetname1xiaowangname2lisiname3......
  • Redis各个客户端的对比
    【SpringRedisTemplate的底层一开始使用Jedis、但是自从SpringBoot2开始,底层开始使用了Lettuce,故不算在内】         【题外话:如果要使用Spring来集......
  • 腾讯云服务器部署redis
    一、下载安装redis1、使用wgethttp://download.redis.io/releases/redis-5.0.5.tar.gz下载redis2、tar-zxvfredis-5.0.5.tar.gz解压安装包3、进入解压后的文件目录......
  • Redis 简介 1
    虽然Redis已经很火了,相信还是有很多同学对Redis只是有所听闻或者了解并不全面,下面是一个比较系统的Redis介绍,对Redis的特性及各种数据类型及操作进行了介绍。是一个很不错......
  • 8、Redis整合SpringBoot
    1、依赖导入<!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-......
  • 6、Redis_Jedis_测试
    1、Jedis所需要的jar包<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.2.0</version></dependency>2、连接Rdis注意......