Redis必须配置密码,且应使用强密码与最小权限策略
无论你的Redis部署在本地、云服务器还是容器环境,未配置密码意味着任何能访问该端口的客户端都能直接读写数据,这等同于把数据库裸奔在公网上,配置密码是Redis安全基线中的第一道防线,但它绝不仅仅是设置一个requirepass那么简单,完整的方案应包含强密码、非默认端口、绑定内网IP、以及可选的TLS加密,才能有效抵御扫描、暴力破解和未授权访问。
为什么Redis默认不设密码是巨大风险
Redis的设计初衷是”高性能内存数据库”,早期版本默认仅监听127.0.0.1并假设运行在可信内网,但现实是,大量开发者在部署时忽略了这个假设,将Redis暴露在0.0.0.0或公网IP上,攻击者利用自动化扫描工具,24小时内就能发现未授权Redis实例,然后执行FLUSHALL清空数据,或写入定时任务反弹Shell。仅仅是设置密码这一动作,就能阻断90%以上的自动化攻击流量。
Redis配置密码的正确姿势
基础配置:修改redis.conf
找到Redis配置文件(通常位于/etc/redis/redis.conf或/usr/local/redis/etc/redis.conf),定位到# requirepass foobared这一行,取消注释并改为:
requirepass Your_Strong_Password_#2024!Redis
密码建议长度不小于32位,混合大小写字母、数字和特殊符号,不要使用生日、公司名等可猜测信息。
修改后重启Redis服务:systemctl restart redis 或 redis-server /path/to/redis.conf。
运行时测试验证
使用带密码的客户端连接测试:

redis-cli -a 'Your_Strong_Password_#2024!Redis' PING
返回PONG即成功。注意:命令行中直接输入密码会出现在shell历史中,生产环境建议使用REDISCLI_AUTH环境变量。
export REDISCLI_AUTH='Your_Strong_Password_#2024!Redis'
redis-cli PING
复杂环境下的额外安全措施
- 修改默认端口:在
redis.conf中将port 6379改为其他端口(如8723),降低被扫描识别的概率。 - 绑定内网IP:设置
bind 192.168.1.100或内网网段,让Redis只监听内部网络接口,杜绝公网直连。 - 禁用危险命令:通过
rename-command重命名或禁用FLUSHALL、SHUTDOWN、EVAL等高风险指令,
rename-command FLUSHALL ""
rename-command CONFIG ""
- 启用TLS加密(Redis 6.0+):配置
tls-port 6380、tls-cert-file和tls-key-file,确保数据在传输中不被监听。
密码以外的认证死角:你还需要知道的
ACL用户权限(Redis 6.0+)
传统的requirepass是”一把钥匙开所有锁”,所有用户共用同一个密码,且拥有全部权限。更安全的是使用ACL(Access Control List)创建独立用户,按需分配只读、只写或只访问特定键的权限。
示例:创建一个仅能读取”user:cache:”键的只读用户:
ACL SETUSER readonly_user on >readonly_pass ~user:cache: +@read
然后客户端使用AUTH readonly_user readonly_pass连接,这样即使密码泄露,攻击者也仅能访问限定范围内的数据。

密码轮换策略
定期更改Redis密码是云上安全合规的基础要求,如果你的业务容器化,可使用环境变量注入密码,避免硬编码在镜像或代码仓库中,每次轮换密码后要同步更新所有客户端连接池配置,否则会造成短暂连接失败。
酷番云经验案例:云主机上的Redis安全加固实战
我们曾为一家电商客户处理Redis被入侵的事件,客户使用的是酷番云云主机,Redis默认安装在系统自带仓库中,配置文件未做任何修改,6379端口直接暴露在安全组规则里,攻击者不仅清空了缓存,还利用Redis写入SSH公钥获取了root权限。
我们给出的解决方案是:
- 即刻止血:通过酷番云控制台的安全组,将入方向规则中6379端口的源IP限制为特定内网网段,并关闭公网访问。
- 加固服务:修改
redis.conf,设置32位随机密码,绑定私网IP(内网地址),将端口改为非默认,禁用危险命令。 - 恢复数据:从启用AOF持久化的备份中恢复,并建议客户开启每天自动快照。
- 事后审计:在酷番云控制台开启操作审计日志,监控所有登录和命令执行记录。
几个月后回访,客户业务稳定,再未发生安全问题。核心经验是:云服务器的安全组必须与Redis自身的密码策略配合使用,外部防火墙挡住大部分扫描,内部密码挡住绕过防火墙的访问。
常见问答
问题1:配置Redis密码后,为什么我的Java/Python客户端连接还是失败?
答:多数客户端默认不带密码连接,你需要检查连接代码是否补充了

auth参数,以Python的redis-py为例,正确方式是:
import redis r = redis.Redis(host='127.0.0.1', port=6379, password='你的密码')
若使用连接池,也要在连接池参数中传入password,确认配置文件中的protected-mode是否设置为yes,当Redis未设置密码或绑定外部IP时,该模式会拒绝远程连接。最简单测试:先在本机用redis-cli验证密码正确,再检查客户端代码。
问题2:改了requirepass后,主从复制是否还需要单独配置密码?
答:需要,从库复制主库数据时,必须在从库配置中指定主库的密码,否则从库无法通过认证,在主库的redis.conf中设置:
requirepass master_password
然后在从库的redis.conf中设置:
masterauth master_password
如果启用了ACL,还需要配置masteruser指定有复制权限的用户。注意:从库的密码可以与主库不同,从库客户端连接从库时使用从库自己的requirepass,而masterauth仅用于从库向主库认证。
你在配置Redis密码时遇到过哪些坑?或者对ACL、TLS安全方案有什么疑问?欢迎在评论区留言,我会逐一回复。如果你使用的是酷番云云主机,别忘了在控制台的安全组检查Redis端口是否只对可信IP开放,双管齐下才能最大程度保障数据安全,点击下方关注,获取更多数据库安全实战技巧。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/768491.html

