修复方案:
因memcache无权限控制功能,所以需要用户对访问来源进行限制。
方案一:
如果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 参数指定为本机地址。
方案二:设置防火墙规则,限制未被授权的连接(注意:请谨慎配置iptables规则)
[root@cp2-redismem01 ~]# cat /etc/firewalld/zones/redismem.xml <zone> <short>redis and memcached service</short> <description>.</description> <source address="192.168.xx.10/24"/> <service name="redismem"/> <service name="ssh"/> </zone> [root@cp2-redismem01 ~]# cat /usr/lib/firewalld/services/redismem.xml <?xml version="1.0" encoding="utf-8"?> <service> <short>redis and memcache</short> <description>service of redis.service and memcached.service</description> <port protocol="tcp" port="11211"/> <port protocol="tcp" port="6379"/> </service>
重启firewalld防火墙
iptables设置防火墙
如果memcache服务需要对外提供服务,则可以通过iptables进行访问控制,下面是只允许本机访问:
// 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
// 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
上述规则的意思是只允许192.168.0.2这个ip对11211端口进行访问。
验证 memcache 端口11211开启情况
以IP(1.2.3.4)为例:
telnet 1.2.3.4 11211
无需用户名密码,可以直接连接memcache 服务的11211端口。
执行如下命令获得相应结果:
# stats //查看memcache 服务状态
# stats items //查看所有items
# stats cachedump 32 0 //获得缓存key
# get :state:264861539228401373:261588 //通过key读取相应value ,获得实际缓存内容,造成敏感信息泄露
memcache漏洞--被未授权访问,并作为肉鸡发动DDOS攻击
原文地址:http://blog.51cto.com/jschu/2084852