redis安全配置

通常情况redis服务器总是放在内网并只允许内部服务器访问的,所以redis生来就不怎么关注安全问题,默认的redis-server配置允许任何访问。但总会有某些情况下,我们需要将redis暴露给外网,这时候就需要给redis-server加上些安全措施,你总不会希望有其他人能访问你的redis-server吧。

1. 设置防火墙

在redis服务器的防火墙(或者iptables)上设置只允许受信任的主机访问redis端口。这是最基本的安全策略。

2. 绑定本地网卡

修改redis.conf文件,添加

bind 127.0.0.1

这样做使得redis-server只接受本地访问。即使有外部主机通过了防火墙,也无法访问redis-server。

注意,bind指令不能绑定除本地网卡ip外的其他ip。也就是说,不能通过bind外部主机的ip来允许外部主机的访问,这只能通过防火墙来实现。

3. 添加密码验证

修改redis.conf文件,添加

requirepass your-password

redis的执行效率非常快,外部设备每秒可以测试相当多数量的密码,所以密码要尽量长尽量复杂。

redis的密码是明文存储在redis.conf文件,因此不需要管理员记住。所以可以使用相当长的密码。

密码验证的目标是提供第二层的安全保障。这样当防火墙失效的话,外部主机在没有密码的情况下仍然不能访问redis。

4. 指令重命名

修改redis.conf文件,将一些高危的指令重命名为难以猜出的名字,或者直接重命名为空字符串””来禁用该指令。

# 重命名CONFIG指令
rename-command CONFIG   XXX_CONFIG
# 禁用FLUSHALL指令
rename-command FLUSHALL ""
rename-command FLUSHDB  ""
# 禁用EVAL指令
rename-command EVAL     ""

4.1 处理CONFIG命令改名后phpRedisAdmin无法使用的问题

由于我部署了一个phpRedisAdmin网站来管理redis。phpRedisAdmin需要用到redis的CONFIG命令,所以改名的话,phpRedisAdmin就无法识别了。这时需要修改phpRedisAdmin源码中的/vendor/src/Command/ServerConfig.php文件,让ServerConfig->getId()方法返回改名后的XXX_CONFIG即可。

5. 修改redis运行账户

给系统新建一个无登陆权限的redis用户

useradd -s /sbin/nologin redis

然后修改redis目录的所有者

最后使用sudo -u redis来执行redis命令

sudo -u redis /usr/local/bin/redis-server /etc/redis/redis.conf

 

 

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top