Redis作为高性能内存数据库,默认配置偏向便捷性,存在未授权访问、命令滥用等安全风险。以下是在Ubuntu系统上加固Redis安全的具体步骤,覆盖网络隔离、身份认证、权限控制等核心环节:
首先确保系统包列表最新,避免依赖旧版本漏洞:
sudo apt update && sudo apt upgrade -y
sudo apt install redis-server -y
安装完成后,启动Redis服务并设置开机自启:
sudo systemctl start redis-server
sudo systemctl enable redis-server
默认情况下,Redis监听所有网络接口(0.0.0.0),易被公网扫描到。需修改配置文件,限制仅可信IP可访问:
sudo nano /etc/redis/redis.conf
找到bind配置项,修改为本地回环地址(仅本地访问)或内网IP(如192.168.1.100):
bind 127.0.0.1 192.168.1.100 # 示例:允许本地和内网IP访问
保存后重启Redis使配置生效:
sudo systemctl restart redis-server
验证绑定效果:
sudo netstat -lnp | grep redis
输出应显示Redis仅监听绑定的IP地址(如127.0.0.1:6379或192.168.1.100:6379)。
Redis默认无密码,需通过requirepass配置强密码(建议包含大小写字母、数字和特殊字符,长度≥12位):
sudo nano /etc/redis/redis.conf
找到requirepass行,取消注释并设置密码(如sTr0ng@RedisP@ss2025):
requirepass sTr0ng@RedisP@ss2025
重启Redis:
sudo systemctl restart redis-server
测试密码认证:
redis-cli
AUTH sTr0ng@RedisP@ss2025 # 输入密码
SET test_key "Hello Redis" # 验证命令执行
GET test_key
若返回"Hello Redis",则认证成功。
Redis的FLUSHDB(清空当前库)、FLUSHALL(清空所有库)、CONFIG(修改配置)等命令若被滥用,可能导致数据丢失或配置泄露。需通过rename-command重命名或禁用这些命令:
sudo nano /etc/redis/redis.conf
添加以下配置(示例):
rename-command FLUSHDB "" # 禁用FLUSHDB(空字符串表示禁用)
rename-command FLUSHALL "" # 禁用FLUSHALL
rename-command CONFIG "SECURE_CONFIG" # 重命名CONFIG为不易猜测的名称
重启Redis:
sudo systemctl restart redis-server
测试命令限制:
redis-cli AUTH sTr0ng@RedisP@ss2025
FLUSHDB # 将返回"(error) ERR unknown command 'FLUSHDB'"
SECURE_CONFIG GET * # 需使用新名称访问
使用Ubuntu自带的ufw防火墙,仅允许可信IP访问Redis端口(默认6379):
# 查看防火墙状态(确保处于active状态)
sudo ufw status
# 允许特定IP访问Redis端口(如应用服务器IP:10.0.0.5)
sudo ufw allow from 10.0.0.5 to any port 6379 proto tcp
# 拒绝其他所有入站请求到Redis端口
sudo ufw deny in to any port 6379 proto tcp
# 启用防火墙(若未启用)
sudo ufw enable
默认情况下,Redis以redis用户(低权限)运行,但仍需确认配置:
# 检查Redis运行用户
ps aux | grep redis-server
输出应包含redis用户(如redis 1234 0.0 0.1 ... /usr/bin/redis-server)。
若未以redis用户运行,修改配置文件:
sudo nano /etc/redis/redis.conf
找到supervised配置项,修改为systemd(Ubuntu默认使用systemd管理服务):
supervised systemd
并确保user配置项为redis:
user redis
重启Redis:
sudo systemctl restart redis-server
默认端口6379易被自动化工具扫描,可修改为非标准端口(如16379):
sudo nano /etc/redis/redis.conf
找到port配置项,修改为自定义端口:
port 16379
更新防火墙规则:
sudo ufw allow from 10.0.0.5 to any port 16379 proto tcp
sudo ufw deny in to any port 16379 proto tcp
重启Redis:
sudo systemctl restart redis-server
使用redis-cli的monitor命令实时查看操作日志(仅用于调试,生产环境建议用专业工具):
redis-cli monitor
或集成监控工具(如Prometheus+Grafana),监控Redis的连接数、内存使用、命令执行等指标,设置异常报警(如频繁的FLUSHDB命令)。
通过以上步骤,可显著提升Ubuntu上Redis的安全性,防范未授权访问、数据泄露等风险。需根据实际业务需求调整配置(如远程访问需谨慎开启bind 0.0.0.0并配合严格防火墙规则)。