Redis 安全加固:从密码保护到高级安全配置

Redis 安全加固:从密码保护到高级安全配置

    • 一、Redis 安全概述
    • 二、密码认证配置
      • 1. 设置 Redis 密码
        • 临时设置(重启后失效)
        • 永久设置(修改配置文件)
      • 2. 密码认证流程
      • 3. Python 连接示例
    • 三、网络层安全加固
      • 1. 绑定内网 IP
      • 2. 修改默认端口
      • 3. 防火墙配置
    • 四、危险命令禁用
      • 1. 禁用敏感命令
      • 2. 命令禁用前后对比
    • 五、高级安全配置
      • 1. TLS 加密传输
      • 2. 客户端证书认证
      • 3. ACL 细粒度权限控制(Redis 6.0+)
    • 六、安全审计与监控
      • 1. 日志配置
      • 2. 监控可疑命令
    • 七、生产环境安全清单
    • 八、常见攻击与防护
      • 1. 未授权访问防护
      • 2. 防注入攻击
    • 九、安全工具推荐


The Begin点点关注,收藏不迷路

一、Redis 安全概述

Redis 作为内存数据库,默认配置并不注重安全性,生产环境必须进行安全加固。以下是 Redis 安全防护的主要方面:

Redis安全
认证授权
网络隔离
命令禁用
数据加密
日志审计

二、密码认证配置

1. 设置 Redis 密码

临时设置(重启后失效)
127.0.0.1:6379> CONFIG SET requirepass "YourStrongPassword"
OK
永久设置(修改配置文件)
# 编辑 /etc/redis/redis.conf
requirepass YourStrongPassword

2. 密码认证流程

Client Redis 任何命令 NOAUTH 需要认证 AUTH password OK 正常命令 执行结果 错误 alt [密码正确] [密码错误] Client Redis

3. Python 连接示例

import redis

# 创建带认证的连接
r = redis.Redis(
    host='localhost',
    port=6379,
    password='YourStrongPassword',
    decode_responses=True
)

# 测试连接
try:
    if r.ping():
        print("认证成功!")
except redis.exceptions.AuthenticationError:
    print("认证失败!")

三、网络层安全加固

1. 绑定内网 IP

# redis.conf
bind 127.0.0.1 192.168.1.100

2. 修改默认端口

# redis.conf
port 6380

3. 防火墙配置

# 只允许特定IP访问
iptables -A INPUT -p tcp --dport 6379 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP

四、危险命令禁用

1. 禁用敏感命令

# redis.conf
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command CONFIG "REDIS-CONFIG"
rename-command SHUTDOWN "REDIS-SHUTDOWN"

2. 命令禁用前后对比

命令 禁用前 禁用后
FLUSHALL 可以执行 命令不存在
CONFIG 可以执行 必须使用新名称

五、高级安全配置

1. TLS 加密传输

# redis.conf
tls-port 6379
tls-cert-file /path/to/redis.crt
tls-key-file /path/to/redis.key

2. 客户端证书认证

# redis.conf
tls-auth-clients yes
tls-ca-cert-file /path/to/ca.crt

3. ACL 细粒度权限控制(Redis 6.0+)

为用户 alice 配置权限,使其能够对 password 相关资源(排除 cached:* 范围)执行读取(get)和写入(set)操作。

# 创建用户并设置权限
127.0.0.1:6379> ACL SETUSER alice on >password ~cached:* +get +set

六、安全审计与监控

1. 日志配置

# redis.conf
logfile "/var/log/redis/redis.log"
loglevel notice

2. 监控可疑命令

# 监控危险命令示例
import redis

r = redis.Redis(decode_responses=True)

pubsub = r.pubsub()
pubsub.psubscribe('__redis__:inspect')
for message in pubsub.listen():
    if message['type'] == 'pmessage':
        print(f"命令监控: {message['data']}")

七、生产环境安全清单

  1. 认证授权

    • 启用密码认证
    • 使用 ACL 控制权限(Redis 6+)
  2. 网络防护

    • 绑定内网 IP
    • 配置防火墙规则
    • 启用 TLS 加密
  3. 命令安全

    • 禁用危险命令
    • 重命名敏感命令
  4. 数据安全

    • 启用 AOF 持久化
    • 定期备份 RDB 文件
  5. 监控审计

    • 开启详细日志
    • 设置日志轮转
    • 监控异常登录

八、常见攻击与防护

1. 未授权访问防护

# 确保以下配置
requirepass "StrongPassword123!"
bind 127.0.0.1
protected-mode yes

2. 防注入攻击

# 安全的方式执行命令
r = redis.Redis()

# 不安全
user_input = "foo; FLUSHALL"
r.keys(user_input)  # 危险!

# 安全
user_input = "foo*"
r.keys(user_input)  # 安全

九、安全工具推荐

  1. Redis 安全扫描工具

    git clone https://github.com/redis-security/redis-security-scanner.git
    cd redis-security-scanner
    python scanner.py -t 127.0.0.1 -p 6379
    
  2. Redis 漏洞检查清单

    • 检查版本是否最新
    • 检查是否开放公网访问
    • 检查是否使用默认端口

通过本文的配置和最佳实践,可以将 Redis 安全等级提升到生产环境要求,有效防范各类安全威胁。记得每次修改配置后重启 Redis 服务使配置生效。

在这里插入图片描述


The End点点关注,收藏不迷路

你可能感兴趣的:(数据库专栏,#,数据库--Redis,redis,安全,数据库,Redis,安全加固)