Redis密码设置与访问限制实现方法
现在用redis缓存热数据越来越常见了,甚至一些配置,开关等等的东西也写到redis里。原因就是redis简单高效。redis里的数据也越来越重要了,例如一些业务的中间数据会暂时存放在redis里,所以限制redis的访问还是很有必要。
本文通过几个手段说一下生产环境中redis的访问权限控制。
1、绑定网卡bind
redis的配置文件redis.conf中对于网络安全部分有这样一段话
##################################NETWORK#####################################
#Bydefault,ifno"bind"configurationdirectiveisspecified,Redislistens
#forconnectionsfromallthenetworkinterfacesavailableontheserver.
#Itispossibletolistentojustoneormultipleselectedinterfacesusing
#the"bind"configurationdirective,followedbyoneormoreIPaddresses.
#
#~~~WARNING~~~IfthecomputerrunningRedisisdirectlyexposedtothe
#internet,bindingtoalltheinterfacesisdangerousandwillexposethe
#instancetoeverybodyontheinternet.Sobydefaultweuncommentthe
#followingbinddirective,thatwillforceRedistolistenonlyinto
#theIPv4lookbackinterfaceaddress(thismeansRediswillbeableto
#acceptconnectionsonlyfromclientsrunningintothesamecomputerit
#isrunning).
这段话的意思道出了bind的深意:bind的意思是你的redis实例绑定在哪个interface上,可以理解成绑定在哪个网卡上。那么我们有几个网卡呢?可以看一下。
$ifconfig
eth0Linkencap:EthernetHWaddr6C:92:BF:22:D7:FC
inetaddr:10.93.84.53Bcast:10.93.84.127Mask:255.255.255.128loLinkencap:LocalLoopback
inetaddr:127.0.0.1Mask:255.0.0.0
这里就两个,一个是eth0以太网卡(10.93.84.53),一个是本地回路lo(127.0.0.1)。
那么会有这两种情况:
1)bind10.93.84.53#同一网段的所有主机都可以连接redis
2)bind127.0.0.1#本地回路,那么只有你redis实例所在的主机能访问redis
你可以根据你的需要进行使用:
1)如果你的机器直接暴露给互联网,那么你还是慎重的将bind设置为127.0.0.1吧,否则你相当于暴露了你的redis给外部所有攻击。
2)如果你再生产环境中,那么你一般会需要绑在网卡上,以便其他主机也能访问redis,那么我们会有一些其他的方式保证redis数据的安全。
2、设置密码requirepass
redis.conf里有这样的配置,设置了密码之后。
#requirepass
requirepassmypass
重启redis服务后,你的客户端都需要通过密码的方式访问redis
#密码正确
$redis-cli-h10.93.84.53-p6379-amypassping
PONG
#密码错误
$redis-cli-h10.93.84.53-p6379-aheheping
(error)NOAUTHAuthenticationrequired.
3、nologin降低账号权限
以较低权限账号运行Redis服务,且禁用该账号的登录权限。另外可以限制攻击者往敏感写入文件,但是Redis数据还是能被黑客访问到,或者被黑客恶意删除。
禁止Linux用户登录的方法,一般是修改用户的shell类型为/sbin/nologin
这种方式会更加人性化一点,因为不仅可以禁止用户登录,还可以在禁用登陆时给提示告诉它这么做的原因。
修改/etc/nologin.txt,没有的话就手动新建一个,在里面添加给被禁止用户的提示(这种方式的所有用户的锁定信息都在这个文件中,在登陆时给与提示)。
其实就是把/etc/passwd文件里的/bin/bash对应改成/sbin/nologin
[root@host-192-168-1-117~]#useraddwangshibo
[root@host-192-168-1-117~]#echo"123456"|passwd--stdinwangshibo
Changingpasswordforuserwangshibo.
passwd:allauthenticationtokensupdatedsuccessfully.
[root@host-192-168-1-117~]#cat/etc/passwd|grepwangshibo
wangshibo:x:500:500::/home/wangshibo:/bin/bash
[root@host-192-168-1-117~]#sed-i's#/home/wangshibo:/bin/bash#/home/wangshibo:/sbin/nologin#g'/etc/passwd
[root@host-192-168-1-117~]#cat/etc/passwd|grepwangshibo
wangshibo:x:500:500::/home/wangshibo:/sbin/nologin[root@host-192-168-1-117~]#touch/etc/nologin.txt
[root@host-192-168-1-117~]#cat/etc/nologin.txt
Inordertoprotectthesystemsecurity,thistypeofuserislocked!
4、iptables设置防火墙
在生产环境中设置防火墙还是很有必要的。如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。
在你redis实例所在的主机,执行如下命令。
#查看iptables规则配置的规则
$iptables-nL--line-number
#禁止所有的主机访问本机6379端口
$iptables-IINPUT-pTCP--dport6379-jDROP
#打开如下的机器-s指定,这些机器可以访问本机的6379端口
$iptables-IINPUT-s10.93.21.21-ptcp--dport6379-jACCEPT
$iptables-IINPUT-s10.93.18.34-ptcp--dport6379-jACCEPT
$iptables-IINPUT-s10.93.18.35-ptcp--dport6379-jACCEPT
$iptables-IINPUT-s10.93.84.53-ptcp--dport6379-jACCEPT
#保存iptables配置
$serviceiptablessave
iptables:Savingfirewallrulesto/etc/sysconfig/iptables:[OK]
#重启防火墙
$serviceiptablesrestart
iptables:SettingchainstopolicyACCEPT:filter[OK]
iptables:Flushingfirewallrules:[OK]
iptables:Unloadingmodules:[OK]
iptables:Applyingfirewallrules:[OK]
设置成功后,只有配置的那四台机器可以访问redis实例。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。