Ubuntu 上 Redis 的安全配置清单
一 基线加固
- 安装与基础检查
- 更新索引并安装:sudo apt update && sudo apt install redis-server
- 确认服务运行与开机自启:sudo systemctl status redis-server、sudo systemctl enable redis-server
- 连接测试:redis-cli ping(应返回 PONG)
- 绑定与监听
- 仅本地访问:编辑 /etc/redis/redis.conf,确保包含 bind 127.0.0.1 ::1
- 验证监听地址:sudo netstat -lnp | grep redis(应仅见 127.0.0.1:6379 与 ::1:6379)
- 防火墙
- 启用 UFW:sudo ufw enable
- 默认策略为拒绝入站;如未开放 SSH,先放行:sudo ufw allow OpenSSH
- 在未放开 6379 的情况下,外部不可达 Redis(推荐保持此策略)
- 系统服务与集成
- 使用 systemd 管理:设置 supervised systemd(在 /etc/redis/redis.conf 中)以便与 systemd 正确集成
二 身份与命令防护
- 强密码认证
- 在 /etc/redis/redis.conf 的 SECURITY 段取消注释并设置:requirepass <强密码>
- 重启生效:sudo systemctl restart redis-server
- 验证:连接后执行命令应返回 (error) NOAUTH Authentication required.,使用 auth <强密码> 后恢复正常
- 重命名或禁用危险命令
- 禁用示例:rename-command FLUSHDB “”、rename-command FLUSHALL “”、rename-command DEBUG “”
- 重命名示例:rename-command SHUTDOWN SHUTDOWN_MENOT、rename-command CONFIG ASC12_CONFIG
- 重启生效:sudo systemctl restart redis-server
- 验证:被重命名/禁用的命令应不可用或返回未知命令错误
- ACL 用户管理(Redis 6+)
- 创建受限用户:ACL SETUSER appuser on >StrongPass123 ~cache: +@read +@write -@dangerous*
- 验证:ACL LIST、AUTH appuser、尝试受限/禁止命令以确认权限边界
三 网络安全与访问控制
- 原则
- Redis 设计用于受信任环境与受信任客户端,不建议直接暴露在公网或不安全网络中
- 必须远程访问时的做法
- 保持默认 bind 127.0.0.1,通过应用所在主机的本地端口转发或 SSH 隧道访问:
- 示例:ssh -L 6380:127.0.0.1:6379 user@redis-host -N
- 应用连接 127.0.0.1:6380,隧道流量经 SSH 加密
- 如确需开放网络访问(不推荐):
- 仅绑定内网地址(如 bind 10.0.0.10),严禁 bind 0.0.0.0
- 使用 UFW 精确放行来源网段:sudo ufw allow from 10.0.1.0/24 to any port 6379 proto tcp
- 变更端口并不能替代认证与访问控制,仍需强密码/ACL 与命令重命名
四 运行环境与持久化
- 运行身份与目录权限
- 建议创建专用系统用户(如 redis)并以该用户运行;确保 /var/lib/redis、/var/log/redis 归属该用户且权限最小化
- 日志与监控
- 配置日志文件(如 logfile /var/log/redis/redis.log),集中采集与安全审计
- 监控关键指标(命中率、连接数、慢查询、复制延迟),设置告警
- 持久化策略
- 根据业务选择 RDB 或 AOF,并定期备份快照与配置;在异常重启后可快速恢复
- 内存与驱逐策略
- 设置 maxmemory 与合适的 maxmemory-policy(如 allkeys-lru、volatile-lru),避免 OOM 导致进程被杀或数据丢失
五 快速核查与回滚
- 核查清单
- 监听地址仅限本地:sudo netstat -lnp | grep redis
- 防火墙策略:sudo ufw status verbose
- 密码与 ACL:连接后执行 AUTH <密码> 或 ACL LIST 验证
- 危险命令:尝试 FLUSHDB/FLUSHALL/CONFIG/SHUTDOWN 确认已被重命名或禁用
- 服务状态:sudo systemctl is-active redis-server、sudo systemctl is-enabled redis-server
- 回滚要点
- 恢复 bind 127.0.0.1 ::1 并重启
- 移除或注释 requirepass 与 rename-command 相关行并重启
- 关闭对外端口并恢复 UFW 默认拒绝策略
注意:任何对外暴露或修改默认网络配置都可能引入安全风险。生产环境请优先采用本地访问或 SSH 隧道,并在变更前在测试环境验证与备份配置。