xiaobaoqiu Blog

Think More, Code Less

Memcached安全性

1.Memcached -l参数

最近整理了组内使用的Memcached。发现很多问题,其中一个问题就是开发机器测试机器可以直连线上的Memcached。这也是memcached公认的问题:memcached 是一种很简单、有效的协议,但也有其缺点,就是 memcached 自身没有 ACL 控制(或者相当弱)。

Memcache服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,这样如果服务器是直接暴露在互联网上的话是比较危险,轻则数据泄露被其他无关人员查看,重则服务器被入侵。

乌云也爆料过很多网站的memcached的安全性问题: http://www.wooyun.org/bugs/wooyun-2010-0790 http://www.wooyun.org/bugs/wooyun-2013-023891 http://www.wooyun.org/bugs/wooyun-2013-037301

通过-l参数可以再已定成都上做到安全的限制:

  1. 如果限定只要自己能够使用本机的Memcached,可以直接将-l参数绑定到回路地址127.0.0.1.
  2. 如果是后台系统且有自己的私有IP,最好将-l参数绑定到私有IP上(比如192.168.0.200).

如果Memcached非要挂在公网IP上,就需要做防火量限制,如下面说道的iptables。

2.使用iptable

ACL 最简单的设置方法就是在网络层,直接拒绝掉你的访问,通过iptable可以实现这个功能。

假如我们的一台 memcached 的机器,想拒绝除了自身之外的访问,假如机器自己IP是:XX.XX.XX.184,那么我们可以以root身份用下面几条命令来达到我们的目的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[baoqiu.xiao@... ~]sudo iptables -A INPUT -p tcp -s 127.0.0.1 --dport 6666 -j ACCEPT
[baoqiu.xiao@... ~]sudo iptables -A INPUT -p tcp -s XX.XX.XX.184 --dport 6666 -j ACCEPT
[baoqiu.xiao@... ~]sudo iptables -A INPUT -p tcp --dport 6666 -j REJECT

[baoqiu.xiao@... ~]sudo iptables -L -n --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  127.0.0.1            0.0.0.0/0           tcp dpt:6666 
2    ACCEPT     tcp  --  XX.XX.XX.184         0.0.0.0/0           tcp dpt:6666 
3    REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:6666 reject-with icmp-port-unreachable 

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

这里使用的是iptables的filter功能,其filter是一种链式结构且有从前往后依次执行。满足某一条filter规则就不往下走了。因此基于这个原则,我们需要将最严格的规则放在最前面。

删除某一条规则,其中的1就是iptables -L -n –line-number中的num号。如下会删除Chain INPUT中的编号为1的规则:

1
[baoqiu.xiao@... ~]sudo iptables -D INPUT 1

可以使用iptables -F 清空所有规则.

3.不需要Root权限

启动Memcached不需要Root权限,这样能避免Memcached被入侵而造成更大的危害。

参考: http://blog.couchbase.com/memcached-security http://serverfault.com/questions/424324/how-to-secure-memcached