Skip to content

第17章:Redis 安全防护(实战必备)

17.1 密码安全

1. 设置Redis密码

临时生效(重启后失效)

bash
# 连接Redis
redis-cli

# 设置密码
CONFIG SET requirepass "your_strong_password"

# 验证密码设置成功
CONFIG GET requirepass

永久生效(修改配置文件)

  1. 编辑redis.conf文件

    bash
    # 找到以下配置项并修改
    requirepass your_strong_password
  2. 重启Redis服务

    bash
    # 停止Redis
    sudo systemctl stop redis
    
    # 启动Redis
    sudo systemctl start redis

2. 密码登录

方法1:连接后登录

bash
# 连接Redis
redis-cli

# 尝试执行命令(会提示需要认证)
GET name
# (error) NOAUTH Authentication required.

# 认证登录
AUTH your_strong_password
# OK

# 现在可以执行命令
GET name

方法2:直接登录

bash
# 直接使用密码登录
redis-cli -a your_strong_password

# 或者使用-h指定主机,-p指定端口
redis-cli -h 127.0.0.1 -p 6379 -a your_strong_password

3. 密码安全最佳实践

  • 使用强密码:至少8位,包含大小写字母、数字和特殊字符
  • 定期更换密码:建议每3-6个月更换一次
  • 不要硬编码密码:在配置文件或代码中使用环境变量或配置管理工具
  • 避免在命令行中暴露密码:使用redis-cli -a会在命令历史中留下密码

17.2 端口与IP限制

1. 修改默认端口

修改配置文件

bash
# 编辑redis.conf文件
port 6380  # 修改为非默认端口

重启Redis服务

bash
sudo systemctl restart redis

2. 绑定IP

只允许本地访问

bash
# 编辑redis.conf文件
bind 127.0.0.1

允许特定IP访问

bash
# 编辑redis.conf文件,多个IP用空格分隔
bind 127.0.0.1 192.168.1.100

3. 防火墙设置

Linux防火墙(iptables)

bash
# 允许特定IP访问Redis端口
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 6380 -j ACCEPT

# 拒绝其他IP访问Redis端口
sudo iptables -A INPUT -p tcp --dport 6380 -j DROP

# 保存规则
sudo iptables-save > /etc/iptables/rules.v4

Windows防火墙

  1. 打开「控制面板」→「系统和安全」→「Windows Defender 防火墙」
  2. 点击「高级设置」
  3. 选择「入站规则」→「新建规则」
  4. 选择「端口」→「下一步」
  5. 输入Redis端口(如6380)→「下一步」
  6. 选择「允许连接」→「下一步」
  7. 选择适用的网络类型→「下一步」
  8. 输入规则名称(如「Redis访问」)→「完成」
  9. 右键点击新建的规则→「属性」→「作用域」→「远程IP地址」→「添加」,输入允许访问的IP地址

17.3 禁止危险命令

1. 命令重命名

在redis.conf文件中,通过重命名危险命令来禁用它们:

bash
# 编辑redis.conf文件

# 禁用FLUSHDB命令
rename-command FLUSHDB ""

# 禁用FLUSHALL命令
rename-command FLUSHALL ""

# 禁用DEL命令(谨慎使用,DEL是常用命令)
# rename-command DEL ""

# 禁用CONFIG命令
rename-command CONFIG ""

# 重命名为复杂名称
rename-command SHUTDOWN "my_shutdown_command_12345"

2. 危险命令列表

命令危险等级描述
FLUSHDB清空当前数据库
FLUSHALL清空所有数据库
DEL删除键(批量删除时危险)
CONFIG修改Redis配置
SHUTDOWN关闭Redis服务
DEBUG调试命令,可能导致性能问题
KEYS生产环境慎用,可能导致性能问题

3. 命令重命名注意事项

  • 重命名后,所有使用这些命令的应用程序都需要更新
  • 对于DEL等常用命令,建议谨慎禁用
  • 可以将危险命令重命名为复杂的随机字符串,而不是完全禁用

17.4 Redis 漏洞防护

1. 常见漏洞

漏洞类型描述防护措施
未授权访问无密码或弱密码导致未授权访问设置强密码,限制IP访问
命令注入通过危险命令执行恶意操作禁用或重命名危险命令
内存泄露恶意客户端发送大量数据导致内存溢出设置最大内存限制,使用密码认证
持久化文件泄露RDB/AOF文件包含敏感信息限制文件权限,加密敏感数据
网络攻击DDoS攻击或网络嗅探使用SSL/TLS,限制IP访问

2. 防护措施

及时更新Redis版本

bash
# 查看当前版本
redis-server --version

# 下载最新版本
wget http://download.redis.io/releases/redis-x.x.x.tar.gz

# 编译安装
 tar xzf redis-x.x.x.tar.gz
cd redis-x.x.x
make
make install

使用SSL/TLS加密

  1. 生成证书

    bash
    openssl req -x509 -newkey rsa:4096 -keyout redis.key -out redis.crt -days 365 -nodes
  2. 配置Redis使用SSL

    bash
    # 编辑redis.conf文件
    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

限制Redis进程权限

  1. 创建专用用户

    bash
    sudo useradd -r -s /bin/false redis
  2. 修改文件权限

    bash
    sudo chown -R redis:redis /var/lib/redis
    sudo chown -R redis:redis /etc/redis
  3. 以专用用户运行Redis

    bash
    # 编辑redis.service文件
    User=redis
    Group=redis

17.5 其他安全措施

1. 定期备份

bash
# 手动触发RDB备份
redis-cli BGSAVE

# 备份RDB文件
cp /var/lib/redis/dump.rdb /backup/redis/dump_$(date +%Y%m%d).rdb

2. 监控Redis活动

bash
# 启用Redis日志
# 编辑redis.conf文件
logfile "/var/log/redis/redis-server.log"
loglevel notice

# 查看日志
tail -f /var/log/redis/redis-server.log

3. 使用Redis Sentinel或Cluster

  • Sentinel:提供高可用性,自动故障转移
  • Cluster:提供水平扩展和高可用性

4. 安全检查清单

检查项状态说明
设置强密码使用至少8位的强密码
限制IP访问只允许必要的IP访问
修改默认端口避免使用默认6379端口
禁用危险命令重命名或禁用危险命令
及时更新版本使用最新稳定版本
启用持久化开启RDB或AOF持久化
定期备份定期备份RDB/AOF文件
监控活动启用日志,监控异常活动
限制进程权限以专用用户运行Redis
使用SSL/TLS加密网络传输

17.6 安全事件处理

1. 发现安全问题时的处理步骤

  1. 立即隔离:暂时停止Redis服务或限制访问
  2. 评估影响:检查是否有数据泄露或篡改
  3. 修复漏洞:更新配置,修补漏洞
  4. 恢复服务:在确保安全的情况下恢复服务
  5. 加强监控:增加监控,防止类似问题再次发生

2. 常见安全问题排查

未授权访问

bash
# 检查是否设置了密码
redis-cli CONFIG GET requirepass

# 检查绑定IP
redis-cli CONFIG GET bind

可疑登录

bash
# 查看当前连接
redis-cli CLIENT LIST

# 查看最近的命令执行(如果启用了命令日志)
redis-cli MONITOR

实战总结

Redis安全是生产环境中不可忽视的重要环节。通过以下措施可以显著提高Redis的安全性:

  1. 设置强密码:使用复杂的密码,并定期更换
  2. 限制访问:通过bind配置和防火墙限制IP访问
  3. 修改默认端口:避免使用默认6379端口
  4. 禁用危险命令:重命名或禁用可能导致数据丢失的命令
  5. 及时更新版本:修复已知漏洞
  6. 启用持久化:确保数据安全
  7. 定期备份:防止数据丢失
  8. 监控活动:及时发现异常行为
  9. 限制权限:以低权限用户运行Redis
  10. 使用SSL/TLS:加密网络传输

通过综合运用这些安全措施,可以有效保护Redis服务和数据的安全,避免因安全问题导致的损失。

© 2026 编程马·菜鸟教程 版权所有