memcached验证远程连接

时间:2013-04-23 18:54:57

标签: php memcached

假设服务器1位于5:5:5:5:11211,服务器2位于25.25.25.25:11211。您将它们添加到服务器池中,一切都很棒。直到某人连接到该端口并开始搞乱您的数据。

所以我们将端口更改为38295.难以找到,但并非不可能,所以仍然不够。

我的问题是:

1)您是否可以为memcached服务器设置身份验证(用户名/密码)以验证连接?你可以将特定的主机/ IP列入白名单(可能是个坏主意)吗?

2)您是否可以保护通过互联网传输的数据?数据采用原始格式,您的ISP和任何嗅探线路的人都可以看到所有正在发送的数据。但加密数据可能会影响性能?

有哪些解决方案可用于设置memcached服务器集群,以及如何保护和验证它们?

3 个答案:

答案 0 :(得分:8)

满足我需求的解决方案是按照sumoanand的建议设置iptables条目。这就是我的工作。

使用以下内容启动memcached:

/usr/bin/memcached -p 11211 -l 0.0.0.0 -d -u www-data -m 12288

请注意,-l参数设置为0.0.0.0,这实际上允许来自任何来源的连接。如果您保留标准127.0.0.1,则无效。

接下来,我们为iptables创建条目。如果您的memcached服务器在LAN上,则以下命令将仅允许来自特定本地服务器的连接。

例如,为了将192.168.1.100添加到允许列表中,我们发出命令:

iptables -A INPUT -p tcp -s 192.168.1.100 --dport 11211 -j ACCEPT

如果要将远程服务器列入白名单,例如25.62.25.62,则发出另一个命令:

iptables -A INPUT -p tcp -s 25.62.25.62 --dport 11211 -j ACCEPT

您可以根据需要将尽可能多的IP列入白名单,但请务必发出阻止该端口上所有其他连接的最终命令。

iptables -A INPUT -p tcp --dport 11211 -j REJECT

IPtables按照输入的顺序读取,因此如果您在发出任何ACCEPT规则之前发出REJECT ALL语句,则所有连接都将被拒绝(即使是列入白名单的连接)。

然而,以这种方式发送的数据仍未以任何方式加密。拦截你的memcached服务器和远程服务器(数据包嗅探器,ISP)的任何东西都能够完全看到数据。

答案 1 :(得分:2)

我认为我们不需要像迈克提到的那样寻求复杂的解决方案。

假设您的Web服务器(web1,web2,web3)需要通过位于同一内部网络的11211端口从memcache服务器(mem1和mem2)获取数据,并且每个Web服务器的内部ip地址都以172.221开头。

在这种情况下,您可以在mem1&的ip-table中加入限制。 mem2服务器只接受172.221。的11211端口请求。

希望这会有所帮助。

答案 2 :(得分:1)

Memcached现在支持SASL。这将允许您对已存储的服务执行强身份验证。这是一篇关于如何使用memcached设置SASL的好文章。

http://blog.couchbase.com/sasl-memcached-now-available