本文档风哥主要介绍Redis安全认证与访问控制的实战方法,包括安全概念、认证方法、访问控制、安全规划、认证策略、访问控制策略、密码认证配置、ACL配置、网络安全配置、命令安全配置以及安全审计等内容,风哥教程参考Redis官方文档Security等内容编写,适合DBA人员和开发人员在生产环境中使用。
Part01-基础概念与理论知识
1.1 安全概念
Redis安全是指保护Redis服务免受未授权访问、数据泄露和恶意攻击的措施。Redis安全包括:
- 认证:验证用户身份
- 授权:控制用户权限
- 加密:保护数据传输和存储
- 审计:记录操作日志
1.2 认证方法
Redis支持的认证方法:
- 密码认证:使用密码进行认证
- ACL(Access Control List):细粒度的访问控制(Redis 6.0+)
- SSL/TLS:加密传输(Redis 6.0+)
1.3 访问控制
Redis访问控制是指控制用户对Redis资源的访问权限。访问控制包括:
- 命令控制:限制用户可以执行的命令
- 键空间控制:限制用户可以访问的键
- 网络控制:限制可以访问Redis的网络地址
更多视频教程www.fgedu.net.cn
Part02-生产环境规划与建议
2.1 安全规划
生产环境安全规划:
- 安全级别:根据业务重要性确定安全级别
- 认证方式:选择合适的认证方法
- 访问控制:制定细粒度的访问控制策略
- 网络安全:配置网络安全措施
- 审计日志:启用审计日志
2.2 认证策略
- 生产环境:启用密码认证和ACL
- 开发环境:可以简化认证措施
- 密码策略:使用强密码,定期更换
- ACL策略:根据用户角色分配权限
2.3 访问控制策略
## 1. 网络访问控制
– 绑定特定IP地址
– 使用防火墙限制访问
– 配置网络隔离
## 2. 命令访问控制
– 禁用危险命令
– 重命名敏感命令
– 使用ACL限制命令执行
## 3. 键空间访问控制
– 使用ACL限制键空间访问
– 按业务模块划分键空间
– 实现命名空间隔离
## 4. 数据加密
– 启用SSL/TLS
– 加密敏感数据
– 保护持久化文件
学习交流加群风哥QQ113257174
Part03-生产环境项目实施方案
3.1 密码认证配置
# 编辑配置文件
$ vi /redis/app/redis.conf
# 设置密码
requirepass fgedu@2026
# 保存配置
:wq
# 重启Redis
$ systemctl restart redis
# 测试密码认证
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 ping
# 输出示例
(error) NOAUTH Authentication required.
# 使用密码连接
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 ping
# 输出示例
PONG
# 或者先连接再认证
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379
192.168.1.100:6379> AUTH fgedu@2026
OK
192.168.1.100:6379> ping
PONG
3.2 ACL配置
# 编辑配置文件
$ vi /redis/app/redis.conf
# 启用ACL
aclfile /redis/app/acl.conf
# 保存配置
:wq
# 创建ACL文件
$ vi /redis/app/acl.conf
# 定义用户
user default off
user admin on >fgedu@admin ~* +@all
user readonly on >fgedu@readonly ~* +@read
user limited on >fgedu@limited ~prefix:* +set +get
# 保存文件
:wq
# 重启Redis
$ systemctl restart redis
# 测试ACL
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -u admin -a fgedu@admin ping
PONG
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -u readonly -a fgedu@readonly set key value
(error) NOPERM this user has no permissions to run the ‘set’ command or its subcommand
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -u limited -a fgedu@limited set prefix:key value
OK
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -u limited -a fgedu@limited set other:key value
(error) NOPERM this user has no permissions to access one of the keys used as arguments
3.3 网络安全配置
# 编辑配置文件
$ vi /redis/app/redis.conf
# 绑定特定IP地址
bind 192.168.1.100
# 禁用保护模式
# 注意:在生产环境中,应该启用保护模式并绑定特定IP
protected-mode yes
# 保存配置
:wq
# 配置防火墙
$ firewall-cmd –permanent –add-port=6379/tcp
$ firewall-cmd –reload
# 查看防火墙规则
$ firewall-cmd –list-ports
# 输出示例
6379/tcp
# 测试网络访问
$ telnet 192.168.1.100 6379
# 输出示例
Trying 192.168.1.100…
Connected to 192.168.1.100.
Escape character is ‘^]’.
3.4 命令安全配置
# 编辑配置文件
$ vi /redis/app/redis.conf
# 重命名或禁用危险命令
rename-command FLUSHALL “”
rename-command FLUSHDB “”
rename-command KEYS “”
rename-command CONFIG “”
rename-command SHUTDOWN “”
# 保存配置
:wq
# 重启Redis
$ systemctl restart redis
# 测试禁用的命令
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 FLUSHALL
# 输出示例
(error) ERR unknown command ‘FLUSHALL’
# 测试重命名的命令
# 例如:rename-command CONFIG “CONFIG2”
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 CONFIG2 get maxmemory
# 输出示例
1) “maxmemory”
2) “17179869184”
风哥提示:Redis接口限流是保护系统的重要机制,合理的限流策略可以防止系统过载,确保系统的稳定性和可用性。在实际应用中,需要根据具体业务场景和数据特点,选择合适的限流算法和策略。
Part04-生产案例与实战讲解
4.1 密码认证实战
## 1. 配置密码
# 编辑配置文件
$ vi /redis/app/redis.conf
requirepass fgedu@2026
# 重启Redis
$ systemctl restart redis
## 2. 测试密码认证
# 无密码连接
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 ping
# 输出示例
(error) NOAUTH Authentication required.
# 有密码连接
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 ping
# 输出示例
PONG
## 3. 动态修改密码
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 config set requirepass fgedu@2027
# 验证新密码
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2027 ping
# 输出示例
PONG
# 保存配置
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2027 config rewrite
4.2 ACL实战
## 1. 配置ACL
# 编辑ACL文件
$ vi /redis/app/acl.conf
user admin on >fgedu@admin ~* +@all
user app1 on >fgedu@app1 ~app1:* +set +get +del
user app2 on >fgedu@app2 ~app2:* +set +get +del
user readonly on >fgedu@readonly ~* +@read
# 重启Redis
$ systemctl restart redis
## 2. 测试ACL
# 使用admin用户
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -u admin -a fgedu@admin set app1:key value1
OK
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -u admin -a fgedu@admin set app2:key value2
OK
# 使用app1用户
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -u app1 -a fgedu@app1 set app1:key value1
OK
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -u app1 -a fgedu@app1 set app2:key value2
(error) NOPERM this user has no permissions to access one of the keys used as arguments
# 使用readonly用户
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -u readonly -a fgedu@readonly get app1:key
“value1”
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -u readonly -a fgedu@readonly set app1:key value3
(error) NOPERM this user has no permissions to run the ‘set’ command or its subcommand
4.3 安全加固
## 1. 基本安全配置
# 编辑配置文件
$ vi /redis/app/redis.conf
# 绑定特定IP
bind 192.168.1.100
# 设置密码
requirepass fgedu@2026
# 启用保护模式
protected-mode yes
# 重命名危险命令
rename-command FLUSHALL “”
rename-command FLUSHDB “”
rename-command KEYS “”
rename-command CONFIG “”
rename-command SHUTDOWN “”
# 保存配置
:wq
## 2. 网络安全
# 配置防火墙
$ firewall-cmd –permanent –add-port=6379/tcp
$ firewall-cmd –reload
# 配置网络隔离
# 例如:使用VLAN或网络命名空间
## 3. 数据加密
# 启用SSL/TLS(Redis 6.0+)
$ vi /redis/app/redis.conf
# 启用SSL
tls-port 6380
tls-cert-file /redis/app/certs/server.crt
tls-key-file /redis/app/certs/server.key
tls-ca-cert-file /redis/app/certs/ca.crt
# 保存配置
:wq
# 生成证书
$ openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -nodes
$ mv server.key server.crt /redis/app/certs/
# 重启Redis
$ systemctl restart redis
# 使用SSL连接
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6380 –tls –cacert /redis/app/certs/ca.crt -a fgedu@2026 ping
# 输出示例
PONG
4.4 安全审计
## 1. 启用审计日志
# 编辑配置文件
$ vi /redis/app/redis.conf
# 启用慢查询日志
slowlog-log-slower-than 10000
slowlog-max-len 128
# 保存配置
:wq
# 重启Redis
$ systemctl restart redis
## 2. 查看慢查询日志
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 slowlog get
# 输出示例
1) 1) (integer) 1
2) (integer) 1651234567
3) (integer) 10000
4) 1) “KEYS”
2) “*”
## 3. 监控命令执行
# 使用monitor命令
$ /redis/app/bin/redis-cli -h 192.168.1.100 -p 6379 -a fgedu@2026 monitor
# 输出示例
1651234567.000000 [0 192.168.1.101:12345] “PING”
1651234568.000000 [0 192.168.1.101:12345] “SET” “key” “value”
## 4. 定期安全检查
# 创建安全检查脚本
$ vi /redis/app/security_check.sh
#!/bin/bash
# security_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`
REDIS_CLI=”/redis/app/bin/redis-cli”
REDIS_HOST=”192.168.1.100″
REDIS_PORT=”6379″
REDIS_PASS=”fgedu@2026″
# 检查密码认证
result=$($REDIS_CLI -h $REDIS_HOST -p $REDIS_PORT ping 2>&1)
if [[ $result == *”NOAUTH”* ]]; then
echo “密码认证已启用”
else
echo “密码认证未启用”
fi
# 检查绑定地址
bind_address=$($REDIS_CLI -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASS config get bind | tail -n 1)
if [[ $bind_address != “*” ]]; then
echo “绑定地址已限制: $bind_address”
else
echo “绑定地址未限制”
fi
# 检查危险命令
commands=($(echo “FLUSHALL FLUSHDB KEYS CONFIG SHUTDOWN”))
for cmd in “${commands[@]}”; do
result=$($REDIS_CLI -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASS $cmd 2>&1)
if [[ $result == *”unknown command”* ]]; then
echo “命令 $cmd 已禁用”
else
echo “命令 $cmd 未禁用”
fi
done
# 赋予执行权限
$ chmod +x /redis/app/security_check.sh
# 执行安全检查
$ /redis/app/security_check.sh
# 输出示例
密码认证已启用
绑定地址已限制: 192.168.1.100
命令 FLUSHALL 已禁用
命令 FLUSHDB 已禁用
命令 KEYS 已禁用
命令 CONFIG 已禁用
命令 SHUTDOWN 已禁用
更多学习教程公众号风哥教程itpux_com
Part05-风哥经验总结与分享
5.1 最佳实践
Redis安全认证与访问控制最佳实践:
- 启用密码认证:设置强密码,定期更换,学习交流加群风哥微信: itpux-com
- 使用ACL:根据用户角色分配细粒度权限
- 限制网络访问:绑定特定IP,使用防火墙
- 禁用危险命令:重命名或禁用危险命令
- 启用SSL/TLS:保护数据传输
- 定期安全审计:检查安全配置,监控异常操作
5.2 常见问题
- 认证失败:检查密码是否正确,ACL配置是否正确
- 权限不足:检查ACL权限配置
- 网络访问失败:检查绑定地址和防火墙配置
- 命令执行失败:检查命令是否被禁用或重命名
- SSL连接失败:检查证书配置是否正确
5.3 安全技巧
## 1. 认证配置
– [ ] 密码认证启用
– [ ] 密码强度足够
– [ ] 定期更换密码
– [ ] ACL配置合理
## 2. 网络安全
– [ ] 绑定特定IP地址
– [ ] 防火墙配置正确
– [ ] 保护模式启用
– [ ] SSL/TLS配置(如果需要)
## 3. 命令安全
– [ ] 危险命令禁用或重命名
– [ ] 命令权限控制
– [ ] 慢查询日志启用
## 4. 数据安全
– [ ] 持久化文件权限正确
– [ ] 敏感数据加密
– [ ] 定期备份数据
## 5. 审计与监控
– [ ] 安全审计日志启用
– [ ] 异常操作监控
– [ ] 定期安全检查
– [ ] 漏洞扫描
通过本文档的学习,您应该掌握了Redis安全认证与访问控制的方法,能够在生产环境中合理配置Redis的安全参数,确保Redis服务的安全性。在实际应用中,需要根据业务需求和安全级别,灵活调整安全配置。
风哥提示:Redis安全是Redis运维的重要组成部分,合理的安全配置可以防止未授权访问和数据泄露,保障业务数据的安全。
from Redis视频:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
