本文大部分内容引自《Redis深度历险:核心原理和应用实践》,感谢作者!!!
指令安全
1、使用某些Redis指令会导致Redis卡顿或者影响Redis的数据安全,比如说keys会导致Redis卡顿,flushdb和flushall会让Redis的所有数据全部清空
2、使用Redis配置文件中的rename-command指令用于将某些危险的指令修改成别的名称,如果想禁止使用某指令,可以将指令rename成空串,就无法通过任何字符串指令来执行这条指令了
rename-command keys abckeysabc #将keys指令重命名成abckeysabc
rename-command flushall "" #禁止flushall指令的使用
端口安全
Redis默认端口是6379,如果暴露在公网上是很危险的,可以使用bind配置绑定IP,同时配置Redis访问密码;密码控制会影响到从库复制,必须在从库配置里使用masterauth指令配置相应的密码才可以进行复制操作
requirepass 密码 #配置访问Redis的密码
masterauth 密码 #配置主从同步时用到的访问密码,这里的密码要和主库的访问密码相同
Lua脚本安全
1、禁止Lua脚本由用户输入的内容(UGC)生成,这可能被黑客植入恶意的攻击代码来得到Redis的主机权限
2、让Redis以普通的用户身份启动,这样即使存在恶意代码黑客也无法拿到root权限
SSL代理
Redis不支持SSL链接,意味着客户端和服务器之间交互的数据不应该直接暴露在公网上传输,否则会有被窃听的风险。如果必须要在工网上,可以使用SSL代理。常见的事spiped工具,下图是spiped对ssh通道进行二次加密的过程;同样SSL代理也可以用在主从复制上,如果Redis主从复制需要跨机房复制,spiped也可以派上用场