Pre
这里我们主要谈一下使用 Redis 需要注意的安全风险以及防范措施,避免数据泄露和丢失,避免所在主机权限被黑客窃取,以及避免人为操作失误。
port
默认会监听 *:6379,如果当前的服务器主机有外网地址,Redis 的服务将会直接暴露在公网上。 一旦可以被外网直接访问,这何谈数据安全?
咋保护呢?
command
Redis中有些指令会对 Redis 的稳定以及数据安全造成非常严重的影响。
比如
- keys 指令会导致 Redis 卡顿 (单线程,需要关注n的量),
- lushdb 和 flushall 会让 Redis 的所有数据全部清空。
- config 可以动态修改参数
Redis 在配置文件中提供了 rename-command 指令用于将某些危险的指令修改成特别的名称,用来避免人为误操作。
比如在配置文件的 security 块增加下面的内容:
代码语言:javascript复制rename-command keys artisanlovecode
如果还想执行 keys 方法,那就不能直接敲 keys 命令了,而需要键入 artisanlovecode。
如果想完全封杀某条指令,可以将指令 rename 成空串,就无法通过任何字符串指令来执行这条指令了。
代码语言:javascript复制rename-command flushall ""
常用的
代码语言:javascript复制rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command KEYS ""
lua script
- 必须禁止 Lua 脚本由用户输入的内容 (UGC) 生成,这可能会被黑客利用以植入恶意的攻击代码来得到 Redis 的主机权限。
- 应该让 Redis 以普通用户的身份启动,这样即使存在恶意代码黑客也无法拿到 root 权限。
SSL proxy
Redis 并不支持 SSL 链接,意味着客户端和服务器之间交互的数据不应该直接暴露在公网上传输,否则会有被窃听的风险。
如果必须要用在公网上,可以考虑使用 SSL 代理。
SSL 代理比较常见的有 ssh,不过 Redis 官方推荐使用 spiped 工具
地址: http://www.tarsnap.com/spiped.html
同样 SSL 代理也可以用在主从复制上,如果 Redis 主从实例需要跨机房复制,spiped也可以派上用场.
小结
我们这里总结了最基本的 Redis 安全防护思路,安全防护措施务必做到位。