redis安全相关设置

安全是任何生产环境最基本的问题之一。然而,因为Redis的设计思想是它将部署在所有客户端都可信的环境中,所以其本身在安全方面只提供了非常有限的功能。Redis最初的设计思想更侧重于优化极限性能和简洁性,而没有考虑支持完整的身份验证和访问控制。虽然Redis安全大部分依赖于Redis之外(操作系统,防火墙等)的机制,但我们仍然可以做一些工作来保护Redis服务器免受非法的访问和攻击。

常见安全设置

接下来,我们看看如何通过恰当的网络配置来加固Redis。因为公网上任何不受信任的客户端都可以访问,所以将Redis生产服务暴露在公网上是不明智的。因此,我们必须配置Redis绑定到属于受信网络中的IP地址上,具体步骤如下所示:

1、 修改配置文件中的bind和port来更新绑定的IP地址和端口:

bind 127.0.0.1 192.168.0.3

port 36379

2、 更新主从配置和Sentinel配置中的相应参数:

slaveof 192.168.0.3 36379

sentinel monitor mymaster 192.168.0.3 36379

此外,我们还可以让Redis不监听任何网络接口,而监听Unix域套接字。这样,只有拥有套接字访问权限的本地客户端才可以访问Redis。

1、 在配置文件中设置unixsocket和unixsocketperm参数,然后将port设为0,使redis只监听套接字:

port 0

unixsocket /var/run/redis/redis.sock

unixsocketperm 766

2、 可以使用redis-cli –s

连接到监听在unix套接字上的redis服务器:

redis-cli –s /var/run/redis/redis.sock

redis /var/run/redis/redis.sock

通过密码验证来保护redis通常是一个良好的实践。Redis提供了一个非常简单的验证机制来防止未经授权的访问。我们可以给整个redis服务器设置一个密码,让所有客户端在通过密码进行身份验证后才能执行命令。

1、 要设置redis服务器的密码,只需在配置文件的requirepass部分中添加明文密码即可:

requirepass foobared

2、 要访问一个启用了身份验证的redis服务器,需要使用auth命令:

redis-cli

auth foobared

3、 如果redis服务器启用了主从复制,则需要将主实例的密码添加到所有从实例的配置文件中:

masterauth foobared

redis还支持将某些命令重命名。如果我们将某些诸如config或flushdb的危险命令重命名为难猜测的名称,那么客户端将几乎不可能执行这些命令。如果需要更高的安全性,我们也可以将这些命令完全禁用。

1、 要重命名命令,在redis的配置文件中添加rename-command参数即可:

rename-command config fdsfdsfdsf3r2fd3fsewdfdsf

2、 要完全禁用某个命令,只需要将其重命名为空字符串即可:

Rename-command config “”

工作原理

为了增强redis的安全性,我们看了三个配置项。如前所述,强烈建议不要向公网暴露redis。如果redis服务器不得不通过公网访问,那么使用一个不同于默认端口6379的端口号能够略微降低端口扫描带来的风险。

Redis的身份验证密码以明文保存在配置文件中。因此,我们应该严格设置redis配置文件的访问权限,以防止非管理员访问。此外,因为服务器和客户端之间的通信是未加密的,所以auth命令中的密码可能会被嗅探器嗅探到,故而redis的密码机制应该被认为是最后一道防线。

Redis主实例中的密码选项不会被从实例继承,因此我们必须分别为从实例设置密码。即使服务器已被攻破的情况下,重命名或禁用危险命令也可以在一定程度上组织高风险的操作。但是,由于重命名的配置也保存在redis的配置文件中,所以必须使用严格的访问权限来保护配置文件。

Redis保护模式

Redis保护模式可以在配置文件中设置protected-mode yes来启用。如果redis服务器启用了保护模式,且同时被配置为监听所有接口(在配置文件中没有bind参数),且禁用了密码验证,那么redis只会响应来自本地回环接口和unix套接字的查询;来自其它接口的查询会被拒绝。

保护模式在默认情况下是启用的,除非redis必须监听所有接口且网络环境是安全的,否则即使禁用了密码验证也不应禁用保护模式。在操作系统中,我们可以采用其他的预防措施来保护redis。一种措施是,不适用root权限的用户运行redis而使用有权限的专门用户来运行redis。同时,这个用户应该在ssh登录中禁用。另一种措施是,在操作系统的防火墙中设置白名单,只允许受新人的IP地址访问redis。

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();