Ubuntu 上 Redis 的密码安全性
总体结论
仅依赖 Redis 的 requirepass 密码能提供基础访问控制,但并不等于“安全”。在 Ubuntu 的默认安装中,Redis 通常只监听 127.0.0.1,若为了远程访问而改为 bind 0.0.0.0 并开放 6379,在未加固的情况下会面临未授权访问、暴力猜测与网络嗅探等风险。因此,密码是必要但非充分的安全措施,需与网络边界、传输加密与最小权限等一起使用。
主要风险
- 密码以明文形式存放在 /etc/redis/redis.conf 的 requirepass 指令中;同时 masterauth 等敏感项亦是明文。若配置文件权限不当或备份外泄,密码即暴露。Redis 协议本身不加密,密码与数据在网络中以明文传输,除非使用 TLS/SSH 隧道。
- 将 bind 127.0.0.1 改为 bind 0.0.0.0 并开放 6379 后,若未启用防火墙白名单、未限制来源 IP、未更改默认端口或启用鉴权,极易被扫描与滥用(如写入恶意键、导出 RDB、占用内存导致拒绝服务)。
更安全的配置建议
- 网络与访问控制
- 仅在内网使用时保持 bind 127.0.0.1;确需远程时改为 bind 内网网段,并用 ufw/安全组 仅放行受信任来源的 6379(或自定义端口)。避免使用默认端口以降低噪音与自动化攻击命中率。
- 认证与口令
- 设置强口令:长度≥12,包含大小写字母、数字与符号;定期轮换。
- 禁止在生产使用 config set requirepass 动态改密;变更时走配置管理,重启后生效,避免运行时泄露与不一致。
- 传输与加密
- 公网或不可信网络中,启用 TLS/SSL 对客户端与复制链路加密;或采用 SSH 隧道/跳板机 转发本地端口访问。
- 权限最小化与加固
- 以最小权限运行 Redis(非 root),限制 maxmemory 与淘汰策略,开启 rename-command 隐藏危险命令(如 FLUSHDB/FLUSHALL/CONFIG/SHUTDOWN/EVAL)。
- 打开 protected-mode yes(默认开启),在不绑定本地时提供额外防护;禁用或限制 SLAVEOF/REPLICAOF 除非明确需要复制。
- 审计与监控
- 启用系统日志或 Redis 日志,记录认证成功/失败与关键操作;结合 fail2ban 或基于日志的告警,监测暴力尝试与异常流量。
快速自检清单
- 配置文件中已设置 requirepass <强密码> 且未被注释;变更后通过 sudo systemctl restart redis-server 重启并验证。
- 仅必要时才对外开放:监听地址为 127.0.0.1 或受控内网;远程访问已配置 ufw allow from 可信IP to any port 6379 或等效安全组规则。
- 已启用 TLS/SSH 隧道 或等效加密通道;未在生产使用 config set requirepass 动态改密。
- 已用 rename-command 隐藏危险命令;设置了合理的 maxmemory 与淘汰策略;日志与告警已开启。