1. 首页 > Redis教程 > 正文

Redis教程FG009-Redis安全认证与访问控制实战

本文档风哥主要介绍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配置

# ACL配置(Redis 6.0+)

# 编辑配置文件
$ 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实战

# 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 安全技巧

风哥提示:Redis安全是一个持续的过程,需要定期检查和更新安全配置,及时修复安全漏洞,确保Redis服务的安全性。

# 安全配置检查清单

## 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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息