帮助中心 >  技术知识库 >  云服务器 >  服务器教程 >  Memcached 端口11211 未授权访问漏洞防范

Memcached 端口11211 未授权访问漏洞防范

2018-03-05 13:32:02 7984

漏洞描述:
memcache是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以开放在外网的memcache服务很容易被攻击者扫描发现,通过命令交互可直接读取memcache中的敏感信息。

修复方案:
因memcache无权限控制功能,所以需要用户对访问来源进行限制。

以下方案基于Linux CentOS:

方案一:(启动时绑定监听IP)

如果memcache没有在外网开放的必要,可在memcached启动的时候指定绑定的ip地址为 127.0.0.1。例如:

memcached -d -m 1024 -u root -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid

其中 -l 参数指定为本机地址。

方案二:(修改默认监听端口)

更改memcached 默认监听端口为11211 以外的端口,以下以新端口19203为例:

memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 19203 -c 1024 -P /tmp/memcached.pid

参数说明:

-d选项是启动一个守护进程;

-m是分配给Memcached使用的内存数量,单位是MB,我这里是100MB;

-u是运行Memcached的用户,推荐单独普通权限用户:memcached,不要使用root权限账户;

-l是监听的服务器IP地址我这里指定了服务器的IP地址x.x.x.x;

-p是设置Memcached监听的端口,我这里设置了19203,最好是1024以上的端口;

-c选项是最大运行的并发连接数,默认是1024,我这里设置了512,按照你服务器的负载量来设定;

-P是设置保存Memcached的pid文件,我这里是保存在 /tmp/memcached.pid;

方案三:(配置防火墙访问控制)

如果memcache服务需要对外提供服务,则可以通过iptables进行访问控制,下面是只允许本机及外部IP 1.1.1.1访问:

// accept
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 11211 -j ACCEPT
iptables -A INPUT -p udp -s 127.0.0.1 --dport 11211 -j ACCEPT

iptables -A INPUT -p tcp -s 1.1.1.1 --dport 11211 -j ACCEPT
iptables -A INPUT -p udp -s 1.1.1.1 --dport 11211 -j ACCEPT

// drop
iptables -I INPUT -p tcp --dport 11211 -j DROP
iptables -I INPUT -p udp --dport 11211 -j DROP

// 保存规则并重启 iptables
service iptables save
service iptables restart

上述规则的意思是只允许本机及外部IP 1.1.1.1 对11211端口进行访问,如已经变更默认监听端口,请变更--dport 的端口为新端口。

验证 memcache 端口11211开启情况:
以memcached 服务器IP(2.2.2.2),外部IP 1.1.1.1,在外部IP 服务器上运行telnet检测为例:

telnet 2.2.2.2 11211

无需用户名密码,1.1.1.1可以直接连接memcache 服务(2.2.2.2)的11211端口。

方案四:(最小化权限运行)

使用普通权限账号运行,以下指定memcached 用户运行

memcached -d -m 1024 -u memcached -l 127.0.0.1 -p 11211 -c 1024 -P /tmp/memcached.pid

方案五:(升级为最新版本)

在编译安装memcached程序时添加-enable-sasl选项,并且在启动memcached服务程序时添加-S参数,启用SASL认证机制以提升memcached的安全性

执行如下命令获得相应结果:

# stats  //查看memcache 服务状态
# stats items  //查看所有items
# stats cachedump 32 0  //获得缓存key
# get :state:264861539228401373:261588   //通过key读取相应value ,获得实际缓存内容,造成敏感信息泄露


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: