Redis安全配置 #
一、安全概述 #
1.1 Redis安全风险 #
text
Redis安全风险:
┌─────────────────────────────────────────────┐
│ 1. 无认证访问 │
│ - 默认无密码 │
│ - 任何人可以连接 │
│ │
│ 2. 网络暴露 │
│ - 默认绑定所有网卡 │
│ - 可能被外部访问 │
│ │
│ 3. 危险命令 │
│ - FLUSHALL 删除所有数据 │
│ - FLUSHDB 删除当前数据库 │
│ - KEYS 阻塞式查询 │
│ - CONFIG 修改配置 │
│ │
│ 4. 数据泄露 │
│ - 敏感数据明文存储 │
│ - 无加密传输 │
└─────────────────────────────────────────────┘
1.2 安全配置清单 #
text
安全配置清单:
□ 设置密码认证
□ 绑定内网地址
□ 启用保护模式
□ 禁用或重命名危险命令
□ 使用ACL控制权限
□ 启用TLS加密(可选)
□ 定期更新版本
二、密码认证 #
2.1 设置密码 #
bash
# redis.conf 配置密码
requirepass your_strong_password
# 密码要求:
# - 长度至少16位
# - 包含大小写字母、数字、特殊字符
# - 不要使用常见密码
# 命令行设置密码(临时)
CONFIG SET requirepass "your_strong_password"
# 客户端认证
redis-cli -a your_strong_password
# 或连接后认证
redis-cli
127.0.0.1:6379> AUTH your_strong_password
OK
2.2 主从复制认证 #
bash
# 主节点配置
requirepass master_password
# 从节点配置
masterauth master_password
requirepass slave_password
# 从节点连接主节点时使用masterauth认证
2.3 集群认证 #
bash
# 所有节点配置相同密码
requirepass cluster_password
masterauth cluster_password
三、网络绑定 #
3.1 绑定内网地址 #
bash
# redis.conf 配置
# 只绑定内网地址
bind 192.168.1.100 127.0.0.1
# 不要绑定公网地址
# bind 0.0.0.0 # 危险!
3.2 保护模式 #
bash
# 启用保护模式
protected-mode yes
# 保护模式作用:
# - 绑定127.0.0.1时,只允许本地连接
# - 未设置密码时,拒绝外部连接
# - 增加安全性
3.3 端口配置 #
bash
# 修改默认端口
port 6380
# 使用非标准端口增加安全性
3.4 防火墙配置 #
bash
# Linux防火墙配置
# 只允许特定IP访问
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 6379 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP
# 或使用firewalld
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="6379" accept'
firewall-cmd --reload
四、命令重命名 #
4.1 禁用危险命令 #
bash
# redis.conf 配置
# 完全禁用命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""
rename-command CONFIG ""
rename-command DEBUG ""
# 重命名命令(使用复杂名称)
rename-command FLUSHALL "flushall_abc123xyz"
rename-command FLUSHDB "flushdb_abc123xyz"
rename-command CONFIG "config_abc123xyz"
4.2 常见危险命令 #
text
危险命令列表:
| 命令 | 危险等级 | 说明 |
|------|----------|------|
| FLUSHALL | 高 | 删除所有数据库的所有键 |
| FLUSHDB | 高 | 删除当前数据库的所有键 |
| KEYS | 中 | 阻塞式查询,可能影响性能 |
| CONFIG | 高 | 修改配置,可能影响安全 |
| DEBUG | 高 | 调试命令,可能导致问题 |
| SHUTDOWN | 高 | 关闭服务器 |
| BGREWRITEAOF | 中 | 重写AOF,消耗资源 |
| BGSAVE | 中 | 生成RDB,消耗资源 |
五、ACL权限控制 #
5.1 ACL概述 #
text
Redis ACL(Redis 6.0+):
功能:
- 用户管理
- 权限控制
- 命令限制
- 键限制
默认用户:
- 用户名:default
- 拥有所有权限
5.2 ACL配置 #
bash
# redis.conf 配置ACL
# 方式1:配置文件
user admin on >admin_password ~* +@all
user readonly on >readonly_password ~* +@read +@connection
user app on >app_password ~app:* +@all -@dangerous
# 方式2:ACL文件
aclfile /etc/redis/users.acl
# users.acl文件内容:
user admin on >admin_password ~* +@all
user readonly on >readonly_password ~* +@read
5.3 ACL命令 #
bash
# 查看所有用户
ACL LIST
# 查看当前用户
ACL WHOAMI
# 创建用户
ACL SETUSER newuser on >password ~* +@all
# 设置用户权限
ACL SETUSER readonly on >password ~* +@read +@connection
# 禁用危险命令
ACL SETUSER app on >password ~app:* +@all -@dangerous
# 删除用户
ACL DELUSER username
# 查看用户详情
ACL GETUSER username
# 查看可用命令类别
ACL CAT
# 查看特定类别的命令
ACL CAT dangerous
5.4 ACL权限说明 #
text
ACL权限格式:
user <username> on/off >password ~pattern +command -command
示例:
user app on >password ~app:* +@all -@dangerous
说明:
- on/off: 启用/禁用用户
- >password: 设置密码
- ~pattern: 允许访问的键模式
- +command: 允许执行的命令
- -command: 禁止执行的命令
- +@category: 允许命令类别
- -@category: 禁止命令类别
- +@all: 允许所有命令
- ~*: 允许所有键
命令类别:
- @all: 所有命令
- @admin: 管理命令
- @write: 写命令
- @read: 读命令
- @dangerous: 危险命令
- @connection: 连接命令
- @string: 字符串命令
- @list: 列表命令
- @set: 集合命令
- @hash: 哈希命令
- @zset: 有序集合命令
六、TLS加密 #
6.1 启用TLS #
bash
# redis.conf 配置TLS
# 启用TLS
tls-port 6380
# 证书配置
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 optional
# 复制连接使用TLS
tls-replication yes
# 集群连接使用TLS
tls-cluster yes
6.2 客户端连接 #
bash
# 使用TLS连接
redis-cli --tls --cert /path/to/client.crt --key /path/to/client.key --cacert /path/to/ca.crt
七、安全最佳实践 #
7.1 密码安全 #
bash
# 使用强密码
requirepass "Str0ngP@ssw0rd!2024#Redis"
# 定期更换密码
# 1. 生成新密码
# 2. 更新配置文件
# 3. 重启Redis或使用CONFIG SET
CONFIG SET requirepass "NewStr0ngP@ssw0rd!2024"
# 主从复制密码
masterauth "Str0ngP@ssw0rd!2024"
7.2 网络安全 #
bash
# 绑定内网地址
bind 192.168.1.100 127.0.0.1
# 启用保护模式
protected-mode yes
# 使用防火墙
# 只允许应用服务器访问
7.3 命令安全 #
bash
# 禁用危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""
rename-command CONFIG ""
# 或使用ACL限制
ACL SETUSER app on >password ~app:* +@all -@admin -@dangerous
7.4 数据安全 #
bash
# 敏感数据加密存储
# 应用层加密后再存入Redis
# 不要存储明文密码
# 存储加密后的值
# 定期审计
# 检查存储的数据
八、安全检查清单 #
text
Redis安全检查清单:
□ 密码认证
□ 设置强密码
□ 主从复制密码
□ 定期更换密码
□ 网络安全
□ 绑定内网地址
□ 启用保护模式
□ 配置防火墙
□ 使用非标准端口
□ 命令安全
□ 禁用危险命令
□ 或重命名危险命令
□ 使用ACL限制权限
□ 数据安全
□ 敏感数据加密存储
□ 定期备份数据
□ 加密传输(TLS)
□ 审计监控
□ 记录慢查询
□ 监控异常访问
□ 定期安全审计
九、总结 #
安全配置要点:
| 配置项 | 推荐值 |
|---|---|
| requirepass | 强密码 |
| bind | 内网地址 |
| protected-mode | yes |
| rename-command | 禁用危险命令 |
ACL权限控制:
| 用户类型 | 权限 |
|---|---|
| admin | 所有权限 |
| app | 应用所需权限 |
| readonly | 只读权限 |
下一步,让我们学习Redis监控运维!
最后更新:2026-03-27