以下是关于 Redis 安全机制 的系统讲解,涵盖认证机制、网络隔离、安全配置、访问控制、常见攻击防护与最佳实践,适用于需要部署在生产环境中并确保高安全性的 Redis 服务。
📚 目录
🧠 Redis 安全风险概述
Redis 默认安全性较弱,存在以下风险:
风险类型 | 描述 |
---|---|
未授权访问 | 默认无密码保护,监听 0.0.0.0 时易被远程攻击 |
命令滥用 | 高危命令如 FLUSHALL 、CONFIG 可被恶意使用 |
持久化攻击 | 利用 SLAVEOF + CONFIG SET 实现远程命令执行 |
AOF 注入 | AOF 文件被写入恶意命令,重启 Redis 时执行 |
数据泄露 | 明文数据被抓包或非法访问读取 |
🔐 密码认证机制(AUTH)
开启密码认证
在配置文件 redis.conf
中设置:
requirepass yourStrongPassword123!
客户端连接后必须执行:
AUTH yourStrongPassword123!
注意事项
- 密码强度高,建议 16 位以上随机字符串
- 可结合防火墙/IP 限制,避免暴露端口
👤 访问控制列表(ACL)
Redis 6.0 起支持多用户与 ACL 机制,增强细粒度权限控制。
创建用户与权限控制
# 创建只读用户
ACL SETUSER readonly_user on >readonlypass ~* +get +exists
# 创建写用户(无删除权限)
ACL SETUSER writer on >writerpass ~* +set +incr -del
命令说明:
on/off
:启用/禁用用户>
:设置密码~*
:允许访问所有 key+command
/-command
:允许/禁用命令
查看用户权限
ACL LIST
ACL GETUSER readonly_user
🌐 网络访问安全配置
限制监听地址
仅监听本地接口(默认):
bind 127.0.0.1
如需开放远程访问,建议配合防火墙、VPN 等手段,并启用认证。
配置保护模式
protected-mode yes
开启时:若未配置密码且绑定了非 localhost,则拒绝远程访问。
修改默认端口(可选)
port 6379 → port 6380
虽然不能彻底防御,但能避开扫描脚本。
🔥 常见 Redis 攻击类型及防护
攻击类型 | 描述 | 防护措施 |
---|---|---|
未授权访问 | 攻击者远程登录 | 设置 requirepass ,限制 bind ,开启 protected-mode |
命令注入 | 恶意使用 CONFIG SET | 设置 ACL,禁用敏感命令 |
AOF 持久化注入 | 写入恶意 Lua 脚本 | 禁用 SCRIPT LOAD ,定期检查 AOF 文件 |
扫描攻击 | 扫描默认端口 6379 | 修改端口,部署防火墙、Fail2Ban |
数据嗅探 | 网络传输被监听 | 使用 Stunnel、SSH Tunnel 实现加密传输 |
🛡️ 安全加固最佳实践
✅ 基本配置
requirepass
强密码bind 127.0.0.1
或指定受信主机 IPprotected-mode yes
rename-command
重命令高危命令如:rename-command CONFIG "" rename-command FLUSHALL ""
✅ 使用 ACL 控制权限
- 每个应用使用独立 Redis 用户
- 最小权限原则
✅ 限制持久化与动态配置
- 禁用
CONFIG
、SLAVEOF
:rename-command CONFIG "" rename-command SLAVEOF ""
✅ 加密传输(TLS)
Redis 6.0+ 支持内置 TLS:
tls-port 6379
tls-cert-file /path/to/cert.pem
tls-key-file /path/to/key.pem
客户端需支持 TLS(如 redis-cli、rediss://)
✅ 审计与监控
- 启用日志:
loglevel notice
- 配置慢日志监控:
slowlog-log-slower-than
+slowlog-max-len
- 配合 Fail2Ban 阻止暴力破解行为
📎 参考资料
如你正在构建 Redis 安全体系或希望使用 Ansible、Dockerfile 自动化配置 Redis 安全参数,我可以进一步为你生成完整脚本。是否需要我帮你生成一份适合生产环境的 Redis 安全配置模板?
发表回复