redis--安全

[TOC]

1. redis 常规安全模式

redis被设计成仅有可信环境下的可信用户才可以访问。这意味着将redis实例直接暴露在网络上或者让不可信用户直接访问redis的是不安全的。

==换句话说,redis不保证redis的安全,而是由使用者保证的。==

2. 网络安全

在redis的配置文件中,可以配置==bind==的ip,让redis只接受绑定的ip的客户端。

一般来说,如果redis需要禁止外部访问,只需bind本地IP即可。

bind 127.0.0.1

也可以绑定指定的网段:

bind 192.168.1.100 10.0.0.1

3. 轻量认证

image-20200723150834768

在redis的配置文件中可以配置

requirepass password来配置验证密码。

当配置了验证密码后,在开始执行其他命令之前需要执行auth 来验证。

image-20200723151336634

使用config get requ*获取配置信息

发现有两个返回,分别是requirepass和空,意思是,requirepass现在的配置为空,表示不启用

使用config set requirepass mypassword设置密码是mypassword

然后我们退出客户端,然后重新登录

image-20200723151646686

连接是没有问题的,但是却无法执行任何命令。

image-20200723151728006

使用auth验证通过后,才能执行redis的命令。

但是这种方式也存在问题:

  • 密码在配置文件中是明文的。
  • redis的查询速度非常快,所以,使用暴力破解是可能的
image-20200723151941808

redis每秒可以尝试15W的密码,所以如果密码长度比较短的话,很短时间就会被暴力破解。

假设密码是6位,那么全部的密码组合共有(26+26+10+33)^6, 每一位密码的可能性:大小写字符,数字,可打印符号。总共6位。所以6位密码总共有95^6种。

image

735 091 890 625 / 150000 = 4 900 612.6 秒 = 81 676.88 分 = 1361.28时 = 56.72天

看起来还不错吧,假设一个机器有4个核心,8线程。那么在一个机器上同时开8个客户端,每个客户端负责尝试指定范围的密码组合。

56.72 / 8 = 7.09 天

如果有多台机器,那么速度会更快。假设有100台机器,每台的机器配置都一样:

7.09 / 100 = 15.696 分钟

==你设置的密码,在强大的算力下,只需15分钟的时间就会被破解。==

当然,这只是理论上的,实际上还需要考虑网络,多线程切换等因素影响。

==AUTH 命令在网络中是明文传输的。==

4. 命令的禁用

如果你登录了redis,意味着,redis中全部的命令你都能使用。对于普通用户来说,使用一些高危的操作很危险,所以需要对普通用户禁用一些命令。

redis是通过==命令重命名==来实现命令禁用的

rename-command source-command dest-command

通过配置rename-commandsource-command重命名为dest-command

后面想要使用source-command只能输入dest-command来使用了。

对于普通用户来说,不知道dest-command,就无法使用source-command了。

如果dest-command设置为空,表示任何人都无法使用source-command了。

image-20200723155001756

你可能感兴趣的:(redis--安全)