1. 启用强密码认证
密码认证是Redis安全的基础防线。编辑Redis配置文件(/etc/redis.conf),找到# requirepass foobared行,去掉注释并设置复杂密码(包含大小写字母、数字和特殊字符,长度不少于8位),例如:requirepass YourSecurePassword@2025。修改后重启Redis服务使配置生效:sudo systemctl restart redis。此后客户端连接时需通过AUTH命令验证密码,如redis-cli -h 127.0.0.1 -p 6379 -a YourSecurePassword@2025。
2. 限制网络访问范围
通过bind指令限制Redis仅接受特定IP地址的连接,降低非法访问风险。编辑/etc/redis.conf,将bind 127.0.0.1修改为服务器本地IP(如bind 192.168.1.100),或仅保留127.0.0.1(仅允许本机访问)。若需远程访问,需结合保护模式(protected-mode yes,Redis 6.0+默认开启)和密码认证,避免直接暴露在公网。
3. 配置防火墙规则
使用firewalld(CentOS 7+默认防火墙)限制Redis端口(默认6379)的访问,仅允许信任的IP地址或网段连接。执行以下命令:
sudo firewall-cmd --permanent --zone=public --add-port=6379/tcp # 永久开放6379端口
sudo firewall-cmd --reload # 重新加载防火墙配置
验证端口是否开放:sudo firewall-cmd --list-all,确认ports列表中包含6379/tcp。
4. 禁用危险命令与模块
通过重命名或禁用高风险命令(如FLUSHDB、FLUSHALL、KEYS),防止恶意操作导致数据丢失或泄露。编辑/etc/redis.conf,添加以下配置:
rename-command FLUSHDB "" # 禁用清空当前数据库命令
rename-command FLUSHALL "" # 禁用清空所有数据库命令
rename-command KEYS "" # 禁用遍历所有键命令(影响性能)
若无需额外模块,可通过loadmodule指令注释掉模块加载项,避免潜在风险。
5. 使用ACL实现细粒度权限控制(Redis 6.0+)
Redis 6.0及以上版本支持ACL(访问控制列表),可针对用户分配不同命令和键的访问权限。编辑/etc/redis.conf,添加以下配置创建用户并限制权限:
aclfile /etc/redis/users.acl # 指定ACL文件路径
创建/etc/redis/users.acl文件,添加用户及权限(如仅允许read命令访问user:*键):
user readonly_user on >ReadonlyPassword ~user:* +get +set
重启Redis服务使ACL配置生效:sudo systemctl restart redis。
6. 启用数据持久化与备份
通过RDB(快照)或AOF(追加日志)持久化机制,防止数据因服务器故障丢失。编辑/etc/redis.conf,配置AOF持久化(推荐):
appendonly yes # 开启AOF
appendfsync everysec # 每秒同步一次(平衡性能与安全性)
dir /var/lib/redis # AOF文件存储路径
appendfilename "appendonly.aof" # AOF文件名
定期备份/var/lib/redis目录(如使用rsync或tar命令),并将备份存储在异地。
7. 定期更新Redis版本
保持Redis为最新稳定版本,及时修复已知安全漏洞。使用yum更新Redis:
sudo yum update redis -y
关注Redis官方安全公告(如GitHub Releases或邮件列表),第一时间应用安全补丁。
8. 配置SELinux(可选但推荐)
若系统启用SELinux(sestatus显示Enforcing),需配置SELinux策略允许Redis访问所需资源。安装policycoreutils-python工具:
sudo yum install policycoreutils-python -y
添加Redis端口策略:
sudo semanage port -a -t redis_port_t -p tcp 6379
验证策略是否生效:sudo semanage port -l | grep redis。
9. 监控与日志记录
启用Redis日志功能,记录连接、命令执行等活动,便于及时发现异常。编辑/etc/redis.conf,配置日志级别和输出路径:
loglevel notice # 日志级别(notice为常用级别,记录重要事件)
logfile /var/log/redis/redis.log # 日志文件路径
确保/var/log/redis目录存在且Redis用户有写入权限:sudo mkdir -p /var/log/redis && sudo chown redis:redis /var/log/redis。使用tail -f /var/log/redis/redis.log实时监控日志,或通过ELK、Prometheus等工具实现集中监控。