使用了memcached,那就不可避免的需要解决安全问题。对于大公司,你外边一个F5做屏障,内部都使用的是内网ip,负载的服务器不会有被外部访问的问题,但是也免不了被内部人做手脚。对于小公司,可能你连F5没有,做的是软件方面的负载,这样你的缓存服务器的端口对外开发,也是很危险,我直接telnet上去,来几个add和delete操作,你的业务系统就玩完了。我们理想的做法就是对memcache的访问做限制。
做安全配置之前有个问题需要明确,我们默认安装的memcahced服务器是使用的tcp协议(虽然也支持udp协议,但是用的少,需要配置。这里请参看安装文件下的protocol.txt文件),而java版本的mecached服务器是使用socket来编码的(请看官方java客户端源码)。所以我们只需要配置tcp的安全就ok了。
具体做法就是,将你负载均衡的多个机器(也可能是单台服务器,如果你是单台服务器,你用memcache做缓存还不如用其他的缓存服务器呢)的ip列出来。
接下来有两种方案:
1、设置linux的iptables,来设定哪些机器之间是可以互相通过tcp协议访问的
2、使用tcpd(tcpwrapper)来设定哪些机器可以互访
第一种方案比较省事,第二种方案,我没试验过,可能需要你来将memcache配置成系统服务器,然后在/etc/hosts.deny,/etc/hosts.allow中进行配置才行,然后重启网络服务才能生效
这样只有在被信任的ip上才能使用telnet来访问我们的缓存服务器啦。
备注: tcpwrapper又称TCPD, 是网络服务的访问控制工具,也就是能过滤客户端的各种server的一个前台程序。不过有一个不好的地方就是:不适合用于UDP服务!