返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >浅谈Redis安全策略
  • 510
分享到

浅谈Redis安全策略

2024-04-02 19:04:59 510人浏览 薄情痞子
摘要

目录命令配置密码手动配置密码指令安全端口安全ssh代理补充:1. 开启Redis密码认证,并设置高复杂度密码2. 禁止监听在公网3. 禁止使用root用户启动4. 限制redis 配

Redis 提供了诸多安全策略,比如为了保证数据安全,提供了设置密码的功能。Redis 密码设置主要有两种方式:一种是使用CINFIG命令来设置密码;另外一种则是手动修改 Redis 的配置文件。虽然看似前者更为简单,其实两种方式各有特点。本节将对它们进行介绍。

命令配置密码

通过执行以下命令查看是否设置了密码验证:


127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""

在默认情况下 requirepass 参数值为空的,表示无需通过密码验证就可以连接到 Redis 服务。

下面执行以下命令设置密码。如下所示:


127.0.0.1:6379> CONFIG set requirepass "www.jb51.net"

OK
127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) "www.jb51.net"

执行完上述操作后,客户端要连接到 Redis 服务就需要密码验证,如果不验证就无法操作 Redis 数据库。如下所示:


127.0.0.1:6379> set key name www.biancheng.net
#报错无法操作
(error) NOAUTH Authentication required.

使用AUTH命令验证密码:


127.0.0.1:6379> AUTH www.jb51.net
OK
#执行命令成功
127.0.0.1:6379> SET name www.jb51.net
OK
127.0.0.1:6379> GET name
www.jb51.net

注意:通过命令行设置的密码并非永久有效,当您重启服务后密码就会失效,所以一般不采用这种方式。下面介绍一种永久有效的修改方式,也就是手动配置密码。

手动配置密码

手动修改配置密码也非常的简单,首先,您要在 Redis 的安装目录中找到 redis.windows.conf 配置文件,然后打开该文件,并使用 Ctrl+F 搜索 requirepass 关键字,找到配置项并配置密码,如下所示:


# requirepass foobared
requirepass www.jb51.net //配置自己的密码

然后使用更改后的配置文件重启服务器,依次执行以下命令:


#首先停止服务:
C:\Users\Administrator>redis-server.exe --service-stop
#重启服务器
C:\Users\Administrator>redis-server.exe --service-start
#重新登陆
C:\Users\Administrator>redis-cli.exe -h 127.0.0.1 -p 6379 -a www.jb51.net
Warning: Using a passWord with '-a' or '-u' option on the command line interface may not be safe.
#命令执行成功
127.0.0.1:6379>config get requirepass
1)"requirepass"
2)"www.jb51.net"

手动配置无须验证密码,只需要重新启动 Redis 服务器。这种配置方式,密码永远有效。如果想取消密码设置,您需要将配置文件更改回原来的状态,然后再次重启服务器,即可取消。

除了需要为 Redis 配置密码外,我们在使用 Redis 时也需要注意一些常见的安全风险以及防范措施,从而避免数据泄露和丢失,以及人为操作失误等。

指令安全

Redis 有一些非常危险的命令,这些命令会对 Redis 的稳定以及数据安全造成非常严重的影响。比如 keys 指令会导致 Redis 卡顿,而 flushdb 和 flushall 会让 Redis 的所有数据全部清空。那么如何避免这些操作失误带来的灾难性后果呢?

Redis 在配置文件中提供了 rename-command 指令用于将某些危险的指令修改成特别的名称,用来避免人为误操作。比如在配置文件的 security 模块增加以下内容:


rename-command keys 123keys123

如果您还想执行 keys 命令,那就需要在命令行输入123keys123。 当然也可以将指令 rename 成空字符串,这样就无法通过字符串来执行 keys 命令了。


rename-command flushall ""

端口安全

Redis 默认监听*:6379,如果当前的服务器主机有外网地址,那么 Redis 的服务将会直接暴露在公网上,别有用心的人使用适当的探测工具就可以对 IP 地址进行端口扫描,从而威胁您的系统安全。

如果 Redis 的服务地址一旦可以被外网直接访问,其内部数据就彻底丧失了安全性。黑客们可以通过 Redis 执行 lua 脚本拿到服务器权限,然后清空您的 Redis 数据库。因此务必在 Redis 的配置文件中绑定要监听的 IP 地址,避免类似的情况发生。如下所示:


bind 193.168.1.1 #绑定外网ip地址

不仅如此,还可以增加 Redis 的密码访问限制,客户端必须使用 auth 命令传入正确的密码才可以访问 Redis。


requirepass yourspassword

这样即使地址暴露出去了,普通黑客也无法对 Redis 服务器进行任何指令操作。

密码配置也会影响到主从复制。要求从机必须配置与主服务相同的密码才可以进行主从复制。


masterauth yourspassword

SSH代理

Redis 不支持 SSL 链接,这意味着客户端和服务器交互的数据不应该在公网上传输,否则会有被窃听的风险。如果必须要在公网上,可以考虑使用 SSL 代理。SSL 代理比较常见的有 ssh。Redis 官方也推荐了一种代理工具,也就是 spiped (点击了解)。 其功能虽然单一,但使用起来比较简单,易于理解。

补充:

1. 开启redis密码认证,并设置高复杂度密码

redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证。

打开redis.conf,找到requirepass所在的地方,修改为指定的密码,密码应符合复杂性要求:

1、长度8位以上

2、包含以下四类字符中的三类字符:

英文大写字母(A 到 Z)

英文小写字母(a 到 z)

10 个基本数字(0 到 9)

非字母字符(例如 !、$、#、%、@、^、&)

3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等

再去掉前面的#号注释符,然后重启redis

2. 禁止监听在公网

Redis监听在0.0.0.0,可能导致服务对外或内网横向移动渗透风险,极易被黑客利用入侵。

在redis的配置文件redis.conf中配置如下:

bind 127.0.0.1或者内网IP,然后重启redis

3. 禁止使用root用户启动

使用root权限去运行网络服务是比较有风险的(Nginx和apache都是有独立的work用户,而redis没有)。redis crackit 漏洞就是利用root用户的权限来替换或者增加authorized_keys,来获取root登录权限的


使用root切换到redis用户启动服务:
useradd -s /sbin/nolog -M redis 
sudo -u redis /<redis-server-path>/redis-server /<configpath>/redis.conf 

4. 限制redis 配置文件访问权限

因为redis密码明文存储在配置文件中,禁止不相关的用户访问改配置文件是必要的,设置redis配置文件权限为600,


chmod 600 /<filepath>/redis.conf

5. 修改默认6379端口

避免使用熟知的端口,降低被初级扫描的风险

编辑文件redis的配置文件redis.conf,找到包含port的行,将默认的6379修改为自定义的端口号,然后重启redis

6. 禁用或者重命名危险命令

Redis中线上使用keys *命令,也是非常危险的。因此线上的Redis必须考虑禁用一些危险的命令,或者尽量避免谁都可以使用这些命令,Redis没有完整的管理系统,但是也提供了一些方案。


修改 redis.conf 文件,添加
rename-command FLUSHALL ""
rename-command FLUSHDB  ""
rename-command CONFIG   ""
rename-command KEYS     ""
rename-command SHUTDOWN ""
rename-command DEL ""
rename-command EVAL ""
然后重启redis。
重命名为"" 代表禁用命令,如想保留命令,可以重命名为不可猜测的字符串,如:
`rename-command FLUSHALL  joYAPNXRPmcarcR4ZDGC`

7. 打开保护模式

redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。


redis.conf安全设置: # 打开保护模式 protected-mode yes

8. redis集群设置密码

1,如果是使用redis-trib.rb工具构建集群,集群构建完成前不要配置密码,集群构建完毕再通过config set + config rewrite命令逐个机器设置密码

2,如果对集群设置密码,那么requirepass和masterauth都需要设置,否则发生主从切换时,就会遇到授权问题,可以模拟并观察日志

3,各个节点的密码都必须一致,否则Redirected就会失败


# redis-cli -c -p 7004
127.0.0.1:7004> config set masterauth frank
OK
127.0.0.1:7004> config set requirepass frank
OK
127.0.0.1:7004> CONFIG REWRITE
(error) NOAUTH Authentication required.
127.0.0.1:7004> auth frank
OK
127.0.0.1:7004> config rewrite
OK
127.0.0.1:7004> exit
[root@iZj6c7eeosj2t5vjw8rf4xZ redis_cluster]# redis-cli -c -p 7004 -a frank

4,设置密码之后如果需要使用redis-trib.rb的各种命令报错问题

如:


# redis-trib.rb check 47.52.41.245:7003
[ERR] Sorry, can't connect to node 47.52.41.245:7003

解决办法:

找到建立集群时执行gem install redis命令生成的client.rb文件,如果不知道该文件在哪可以通过下面命令查找


# find / -name client.rb -print
/tmp/frank/ruby/ruby-2.2.8/lib/xmlrpc/client.rb
/usr/local/lib/ruby/gems/2.2.0/gems/redis-4.0.0/lib/redis/client.rb
/usr/local/lib/ruby/2.2.0/xmlrpc/client.rb

我这边的那个文件是/usr/local/lib/ruby/gems/2.2.0/gems/redis-4.0.0/lib/redis/client.rb

然后修改该文件


# vim /usr/local/lib/ruby/gems/2.2.0/gems/redis-4.0.0/lib/redis/client.rb

修改password对应的值然后保存,就可以了


require_relative "errors"
require "Socket"
require "cgi"

class Redis
  class Client

    DEFAULTS = {
      :url => lambda { ENV["REDIS_URL"] },
      :scheme => "redis",
      :host => "127.0.0.1",
      :port => 6379,
      :path => nil,
      :timeout => 5.0,
      :password => "frank",
      :db => 0,
      :driver => nil,
      :id => nil,
      :tcp_keepalive => 0,
      :reconnect_attempts => 1,
      :inherit_socket => false
    }

    attr_reader :options

重新运行redis-trib.rb命令


redis-trib.rb check 47.52.41.245:7003
>>> PerfORMing Cluster Check (using node 47.52.41.245:7003)
S: cc86a24f3896ad7530e2687cf52582912f74b661 47.52.41.245:7003
   slots: (0 slots) slave
   replicates 908430b2bf63669898e9eaef79dd6c1b33c8c57a
M: 668397aba571ece85532b1eb1fccb42e4e33b1f2 116.196.65.198:7001

9. 使用Redis5.0版本创建的集群设置密码

直接一步到位,在创建集群前,在配置文件中设置好密码(所有配置文件的密码保持一致),然后使用命令创建集群时在后面加上-a password参数。

这样一来,生成的集群进行访问时已经包含访问密码了,不用再事后设置了。

到此这篇关于浅谈Redis安全策略的文章就介绍到这了,更多相关Redis安全策略内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅谈Redis安全策略

本文链接: https://lsjlt.com/news/158273.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 浅谈Redis安全策略
    目录命令配置密码手动配置密码指令安全端口安全SSH代理补充:1. 开启redis密码认证,并设置高复杂度密码2. 禁止监听在公网3. 禁止使用root用户启动4. 限制redis 配...
    99+
    2024-04-02
  • 浅谈Redis缓存更新策略
     内存淘汰超时剔除主动更新说明不用自己维护,利用Redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次查询时更新缓存给缓存数据添加TTL时间,到期后自动删除缓存,下次...
    99+
    2022-11-13
    redis缓存策略 redis缓存更新策略 redis缓存更新机制
  • 浅谈Redis的几个过期策略
    目录概述设置过期时间三种过期策略定时删除懒汉式式删除定期删除Redis采用的过期策略总结概述 设置过期时间 expire key time(以秒为单位) 这是最常用的方式 setex...
    99+
    2024-04-02
  • 浅谈Redis缓存有哪些淘汰策略
    目录Redis过期策略 定时删除 惰性删除 定期删除 Redis的内存淘汰机制 LRU和LFU的区别 LRU LFU Redis重启如何恢复数据呢? 总结Redis过期策略 我们首...
    99+
    2024-04-02
  • Redis安全策略详解
    目录缓存穿透缓存击穿缓存雪崩布隆过滤器基于布隆过滤器解决缓存穿透问题缓存穿透 高并发情况下查询一个不存在的key 产生的背景(原因): 缓存穿透是指使用不存在的key进行大量的高并发查询,导致缓存无法命中,每次请求都要都...
    99+
    2022-07-27
    Redis安全 Redis安全策略
  • 浅谈redis的maxmemory设置以及淘汰策略
    redis的maxmemory参数用于控制redis可使用的最大内存容量。如果超过maxmemory的值,就会动用淘汰策略来处理expaire字典中的键。 关于redis的淘汰策略: Redis提供了下面几...
    99+
    2022-06-04
    浅谈 策略 redis
  • 浅谈Redis中的内存淘汰策略和过期键删除策略
    目录8种淘汰策略过期键的删除策略总结 redis是我们现在最常用的一个工具,帮助我们建设系统的高可用,高性能。 而且我们都知道redis是一个完全基于内存的工具,这也是redis速...
    99+
    2024-04-02
  • 浅谈MyBatisPlus主键设置策略
    根据一次插入失败报错来了解下MyBatis Plus主键设置策略今天学习使用MyBatis Plus,发现使用代码生成器生成对应的实体类、Service和Mapper后,在保存数据时...
    99+
    2024-04-02
  • 浅谈Redis对于过期键的三种清除策略
    目录PreRedis Key的超时设置处理被动删除主动删除当前已用内存超过maxmemory限定时,触发主动清理策略对于过期键一般有三种删除策略 定时删除:在设置键的过期时...
    99+
    2024-04-02
  • 浅谈用SpringBoot实现策略模式
    目录问题的提出策略模式代码的实现进一步的思考心得体会问题的提出 阅读别人代码的时候最讨厌遇到的就是大段大段的if-else分支语句,一般来说读到下面的时候就忘了上面在判断什么了。很...
    99+
    2024-04-02
  • 浅谈Redis 中的过期删除策略和内存淘汰机制
    目录前言Redis 中 key 的过期删除策略1、定时删除2、惰性删除3、定期删除Redis 中过期删除策略从库是否会脏读主库创建的过期键内存淘汰机制内存淘汰触发的最大内存有哪些内存...
    99+
    2024-04-02
  • 浅谈Tensorflow2对GPU内存的分配策略
    目录一、问题源起二、开发环境三、Tensorflow针对GPU内存的分配策略四、问题分析验证五、GPU分配策略分析六、扩展一、问题源起 从以下的异常堆栈可以看到是BLAS程序集初始化...
    99+
    2024-04-02
  • 浅谈Android 中图片的三级缓存策略
    什么是三级缓存? 内存缓存,优先加载,速度最快 本地缓存,次优先加载,速度快 网络缓存,最后加载,速度慢,浪费流量为什么要进行三级缓存三级缓存策略,最实在的意义就是 减少不必要的流量消耗,增加加载速度 。如今的 APP 网络交互似乎已...
    99+
    2023-05-30
    android 图片 三级缓存
  • PostgreSQL密码安全策略
    引用地址:https://blog.csdn.net/weixin_34143774/article/details/89561946  请以原文为主,引用注明出处。问题:今天公司进行软件测评,在测评期间,测评人员问起Postgr...
    99+
    2021-12-15
    PostgreSQL密码安全策略
  • 防火墙安全策略
    目录 防火墙安全策略 实验图  1.配置防火墙图形界面         先添加UDP端口          添加网段网卡         启动防火墙FW1          查找防火墙 0/0/0 端口默认的IP地址         将地...
    99+
    2023-10-01
    linux 服务器 运维
  • MysqL安全策略有哪些
    小编给大家分享一下MysqL安全策略有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1:使用预处理语句防止SQL注入2:写入数据库的数据要进行特殊字符的转义,比如字符中带单引号和双引号...
    99+
    2024-04-02
  • 云服务器安全策略
    1. 强密码和多因素认证 强密码是保护云服务器的第一道防线。使用复杂的密码,包括大小写字母、数字和符号,并定期更改密码。此外,启用多因素认证可以提高安全性,因为它需要用户提供两个或多个身份验证因素才能访问服务器。 2. 安全组和网络访问控...
    99+
    2023-10-26
    安全策略 服务器
  • Win10如何重置恢复安全策略和组策略
    本文小编为大家详细介绍“Win10如何重置恢复安全策略和组策略”,内容详细,步骤清晰,细节处理妥当,希望这篇“Win10如何重置恢复安全策略和组策略”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。右键点击开始按钮或...
    99+
    2023-06-28
  • Kotlin空安全空类型浅谈
    目录正文一、判断可空变量是否为null的方式二、涉及到返回可空值的函数使用方法,在返回类型后同时加?三、let操作符四、Evils操作符(: !! as)总结:正文 首先非空变量和可...
    99+
    2024-04-02
  • Android安全风险控制策略
      没有一个软件系统是安全的,总体而言,Android系统中的风险可概括为五大类。根据以下建议对每种风险做好防范工作。   第一类风险是滥用应用程序权限。关于这类风险有...
    99+
    2022-06-06
    风险控制 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作