Redis的安全配置
Redis 暴露在公网(即绑定在0.0.0.0:6379,目标IP公网可访问),并且没有开启相关认证和添加相关安全策略情况下可受影响而导致被利用。
根据 ZoomEye 的最新探测结果,总的存在无验证可直接利用 Redis 服务的目标全球有49099,其中中国有16477。其中被明着写入crackit的,也就是已经被黑的比例分别是全球65%(3.1万),中国67.5%(1.1万)。 这么多的被黑,赶紧看看你的服务器是否存在已经被黑了把!
——微博 @ZoomEye
昨天晚上看到这条微博,和上面那个新闻。心中立马“卧槽!”,原来服务器上那个crackit是这玩意……虽然是开发环境,也是要搞好嘛,所以对阿里云上的Redis进行了一些配置。(本文使用了我虚拟机上做测试)
1、修改bind
bind选项,限定可以连接Redis服务器的IP。这里上一篇文章已经说过了,我也已经配置过。修改配置文件中bind一行,去掉注释,修改IP即可。
1 |
bind 169.254.51.102 |
2、修改端口
修改配置文件,定义一个未使用的端口。
1 |
port 19456 |
3、增加AUTH认证
redis目前的密码验证方式,密码以明文保存在配置文件中。客户端使用auth命令来验证密码,如果密码与在配置文件中的口令相匹配,则服务器会返回OK状态码,并开始接受命令。否则,将返回一个错误,并且客户需要尝试新的密码。
配置
修改配置文件,去掉那一句注释:
1 |
requirepass dogfuckyou |
cli连接
客户端连接,使用auth验证密码,并设置了一个值。下面的过程也可以看到当不验证密码和密码错误的时候Redis的返回。过程如下:
1 2 3 4 5 6 7 8 9 10 11 |
[msir@localhost redis]$ redis-cli -h 169.254.51.102 -p 19456 169.254.51.102:19456> set hehe "12" (error) NOAUTH Authentication required. 169.254.51.102:19456> auth dogfuckhim (error) ERR invalid password 169.254.51.102:19456> auth dogfuckyou OK 169.254.51.102:19456> set hehe "12" OK 169.254.51.102:19456> get hehe "12" |
PHP使用AUTH验证
phpredis扩展:在连接后使用auth方法验证密码。注意:客户端将使用明文发送密码。
参数:STRING: password
返回值:BOOL: 成功返回TRUE,失败返回FALSE
1 2 3 |
$succ = $redis->auth($password); if(!$succ) throw new \Exception('Redis密码错误!'); |
4、重命名CONFIG命令
配置rename-command 配置项,可以重命名CONFIG这个命令,增大攻击者使用CONFIG命令的难度。
官方给的例子可以在配置文件中看到:
1 2 |
# Example: # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 |
这样还怎么用……还可以把命令设置为空字符串,这样就强行关闭了这个命令……
1 |
rename-command CONFIG "" |
普通就这样配置咯
1 |
rename-command CONFIG fuckconfig |