文章目录
- Pre
- port
- command
- lua script
- SSL proxy
- 小结
Pre
这里我们主要谈一下使用 Redis 需要注意的安全风险以及防范措施,避免数据泄露和丢失,避免所在主机权限被黑客窃取,以及避免人为操作失误。
port
默认会监听 *:6379,如果当前的服务器主机有外网地址,Redis 的服务将会直接暴露在公网上。 一旦可以被外网直接访问,这何谈数据安全?
咋保护呢?
bind ip
运维人员务必在 Redis 的配置文件中指定监听的 IP 地址
增加 Redis 的密码访问限制 requirepass & masterauth
客户端必须使用 auth 指令传入正确的密码才可以访问 Redis,这样即使地址暴露出去了,普通黑客也无法对 Redis 进行任何指令操作.
requirepass passwd
密码控制也会影响到从库复制 ,如果配置了主从或者是集群模式,从库必须在配置文件里使用 masterauth 指令配置相应的密码才可以进行复制操作。
masterauth passwd
这俩密码必须一致。
command
Redis中有些指令会对 Redis 的稳定以及数据安全造成非常严重的影响。
比如
keys 指令会导致 Redis 卡顿 (单线程,需要关注n的量),
lushdb 和 flushall 会让 Redis 的所有数据全部清空。
config 可以动态修改参数
Redis 在配置文件中提供了 rename-command 指令用于将某些危险的指令修改成特别的名称,用来避免人为误操作。
比如在配置文件的 security 块增加下面的内容:
rename-command keys artisanlovecode
如果还想执行 keys 方法,那就不能直接敲 keys 命令了,而需要键入 artisanlovecode。
如果想完全封杀某条指令,可以将指令 rename 成空串,就无法通过任何字符串指令来执行这条指令了。
rename-command flushall ""
常用的
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 安全防护思路,安全防护措施务必做到位。