一、基础网络防护:关闭 "裸奔模式"
1. 限制绑定 IP(必选)
# redis.conf
bind 127.0.0.1 # 仅监听本地回环接口
# 如需要远程访问,绑定私有IP而非公网IP
# bind 192.168.1.100
2. 防火墙规则(必选)
bash
# Linux示例(ufw)
sudo ufw allow from 192.168.1.0/24 to any port 6379 # 允许私有网段访问
sudo ufw deny any port 6379 # 拒绝其他所有访问
# 云服务器务必使用安全组限制来源IP
3. 启用保护模式(推荐)
# redis.conf
protected-mode yes # Redis 3.2+ 默认开启,不要关闭
二、身份认证:防御未授权访问
1. 强密码认证(基础方案)
# redis.conf
requirepass YourSup3rStr0ngP@ssw0rd! # 长度≥12,含大小写、数字、特殊字符
2. ACL 精细化权限控制(推荐,Redis 6+)
# 创建只读用户
ACL SETUSER readonly on >readonlypass ~* +get +info -@all
# 创建管理用户(限制IP)
ACL SETUSER admin on >adminpass ~192.168.1.* +@all
# 禁用默认用户
ACL DELUSER default
最佳实践:生产环境必须使用 ACL,按业务功能创建不同权限用户,避免共用一个密码。
三、命令安全:防止危险操作
1. 重命名 / 禁用高危命令(强烈推荐)
# redis.conf
rename-command FLUSHALL "" # 禁用FLUSHALL
rename-command CONFIG "randomstring" # 重命名CONFIG为随机字符串
rename-command SHUTDOWN "randomstring"
高危命令清单:FLUSHALL、FLUSHDB、CONFIG、SHUTDOWN、DEBUG、SAVE、BGSAVE、RESETSTAT、MONITOR
四、加密通信:防止数据泄露
1. 启用 TLS/SSL(推荐,Redis 6+)
# redis.conf
tls-port 6380 # 使用独立TLS端口
tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key
tls-ca-cert-file /path/to/ca.crt # 客户端验证(可选)
tls-auth-clients yes # 要求客户端证书(可选)
2. 客户端连接方式
# 使用TLS连接
redis-cli --tls --cacert /path/to/ca.crt -p 6380
重要:即使使用 TLS,仍需配合网络防火墙和身份认证,实现多层防护。
五、高级安全措施
1. 数据持久化安全
-
RDB/AOF 文件权限:确保文件只能被 Redis 用户读写
bashchown redis:redis /var/lib/redis/dump.rdb chmod 600 /var/lib/redis/dump.rdb -
备份加密:
bash# 备份到S3并加密 aws s3 cp dump.rdb s3://bucket/backup/ --sse aws:kms
2. 内存保护
-
防止内存溢出攻击: plaintext
# redis.conf maxmemory 2gb # 设置合理内存上限 maxmemory-policy allkeys-lru # 内存不足时的淘汰策略
3. 运行身份安全
-
以非 root 用户运行 Redis
bash# 创建专用用户 sudo useradd -r -s /bin/false redis # 启动服务时指定用户 redis-server --user redis
六、监控与审计
1. 开启日志(推荐)
# redis.conf
logfile "/var/log/redis/redis-server.log"
loglevel notice # 记录notice级别以上日志
2. 审计配置(可选)
# 记录特定命令(如AUTH、SET)
audit-log yes
audit-log-file /var/log/redis/audit.log
audit-log-format json
七、应急响应预案
-
发现入侵时:
bash# 立即限制访问 sudo ufw deny any port 6379 # 保存证据 cp /var/log/redis/redis-server.log /var/log/redis/redis-server.log.bak # 从备份恢复数据 redis-cli -a yourpassword --rdb /path/to/backup.dump -
安全加固后:
# 重置所有用户密码 ACL RESET
八、安全加固检查清单(按优先级)
| 安全措施 | 配置项 | 是否完成 |
|---|---|---|
| 网络隔离 | bind 限制 IP + 防火墙规则 | ✓ |
| 身份认证 | ACL 或 requirepass 强密码 | ✓ |
| 命令安全 | 重命名 / 禁用高危命令 | ✓ |
| 加密通信 | TLS/SSL(如需要远程访问) | - |
| 数据保护 | RDB/AOF 文件权限控制 | ✓ |
| 系统安全 | 非 root 用户运行 | ✓ |
| 监控审计 | 日志 + 审计(可选) | - |
总结
Redis 安全加固核心原则:最小权限 + 多层防御。
立即行动清单:
- 修改默认端口(非 6379)
- 绑定本地 / 私有 IP,配置防火墙
- 启用 ACL 或强密码认证
- 重命名 / 禁用高危命令
- 以非 root 用户运行
记住:没有绝对安全,但通过合理配置可大幅提升攻击成本,让潜在攻击者望而却步。定期更新 Redis 版本并审查配置,安全是持续过程而非一次性任务。