Memcached安全配置

1、Memcached简介


Memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

Memcached是danga的一个项目,由LiveJournal的Brad Fitzpatrick开发,最初为了加速 LiveJournal 访问速度而开发的,后来被很多大型的网站采用。

Memcached是以守护程序方式运行于一个或多个服务器中,随时会接收客户端的连接和操作。

2、Memcached服务器架设


安装memcached服务端

yum install memcached

安装php扩展操作memcached

yum -y install php-pecl-memcache

查看php扩展是否安装成功

php -m | grep memcache

启动memcached服务

memcached -d -m 100 -u root -l x.x.x.x -p 11211 -c 512 -P /tmp/memcached.pid

参数说明:

-d选项是启动一个守护进程;
-m是分配给Memcache使用的内存数量,单位是MB,我这里是100MB;
-u是运行Memcache的用户,我这里是root;
-l是监听的服务器IP地址我这里指定了服务器的IP地址x.x.x.x;
-p是设置Memcache监听的端口,我这里设置了11211,最好是1024以上的端口;
-c选项是最大运行的并发连接数,默认是1024,我这里设置了512,按照你服务器的负载量来设定;
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid;

结束memcached进程

kill `cat /tmp/memcached.pid`

设置memcached开机启动

chkconfig memcached on

3、错误配置及利用


Memcached服务器端都是直接通过客户端连接后直接操作,没有任何的验证过程,且Mecached默认以root权限运行。因而如果Mecached服务器直接暴露在互联网上的话是比较危险,轻则造成敏感数据泄露,重则可导致服务器被入侵。

stats #显示memcached的运行状态
version #显示版本号
stats items #列出item
add key 0 60 5 #增加一个item名为key,存活时间60s,大小为5字节
12345 #key的值
stats cachedump <item: id> <返回结果数量,0代表返回全部> #查看item信息
get key #取得key的值
delete key #删除key

4、实际案例

5、修复方案


限定访问的IP

使用iptables限制访问IP,只允许IP为X.X.X.X的主机访问memcached:

iptables -F
iptables -P INPUT DROP
iptables -A INPUT -p tcp -s X.X.X.X --dport 11211 -j ACCEPT
iptables -A INPUT -p udp -s X.X.X.X --dport 11211 -j ACCEPT

6、漏洞扫描与发现


半手动扫描

memcache默认是11211端口,可使用nmap扫描服务器的11211端口:

nmap -n --open -p 11211 X.X.X.X/24
telnet X.X.X.X 11211
stats items

7、相关资源